sass基本语法

1.定义一个变量,变量定义以$开头,以冒号分隔开。

$blue:#1875e7;
div{
color:$blue;
} 编译之后的css代码:
div {
color: #1875e7;
}

定义一个带默认值的变量。默认变量只需要在普通变量后面加上 !default

$baseLineHeight:1.5 !default;
$baseLineHeight:3;
body{
line-height:$baseLineHeight;
} 编译后的css代码:
body {
line-height:;
}

line-height的默认值是1.5,然后被3覆盖了,所以值是3. 和赋值的先后顺序无关,即使把默认值放到赋值的后面,结果也还是3.

此外,sass局部变量和全局变量(sass 3.4之后的版本才会有局部变量,3.4之前的都是全局变量)。变量值后面加上!global 变成全局变量。

/* sass3.4之后的版本 */
$fontSize:16px;
body{
$fontSize:20px;
font-size:$fontSize;
}
p{
font-size:$fontSize;
} 编译之后的css代码:
body {
font-size: 20px; } p {
font-size: 16px; }//3.4之前的版本值是20px,因为都是全局变量

使用全局变量之后,sass 3.4之后才能转换成功

$fontSize:16px;
body{
$fontSize:20px !global;
font-size:$fontSize;
}
p{
font-size:$fontSize;
} 转换之后css代码:
body {
font-size: 20px; }
p {
font-size: 20px; }

变量作为属性名来使用(一般我们定义的变量都是属性值),要以#{$variableName}形式。

$side:left;
div{
border-#{$side}-radius:5px;
}
//转化之后的css代码:
div {
border-left-radius: 5px; }

2.变量复杂一点的用法,多值变量。多值变量分为list类型和map类型,list类似js数组,map类似js中的对象。list数据可以通过空格,逗号,小括号分隔多个值,常用的函数,nth($list,$index), length($list), append($list, $value, [$separator]).

$pxs:5px 10px 15px 20px;
h8{
margin-left:nth($pxs,1);
&:hover{
margin-top:nth($pxs,2);
}
}
//转换之后的css代码:
h8 {
margin-left: 5px;
}
h8:hover {
margin-top: 10px;
}

list另外一个栗子,

$pxs:5px,10px,15px,20px;
h9{
$len:length($pxs);
margin-right:nth($pxs,$len);
}
//转换之后的css:
h15 {
margin-right: 20px;
}

map类型的例子。。。map数据以key和value成对出现。看看w3cplus上的一个例子。开始的时候,总是转换失败,后面发现是sass版本的问题,我sass用的是3.4.21版本,之前用的是3.2.13老是转换失败,还以为是语法写的有错误呢。。。

$headings: (h1: 2em, h2: 1.5em, h3: 1.2em);
@each $header, $size in $headings {
#{$header} {
font-size: $size;
}
}
//转化过后的css
h1 {
font-size: 2em;
}
h2 {
font-size: 1.5em;
}
h3 {
font-size: 1.2em;
}

3.嵌套,嵌套包括两种:选择器嵌套 和 属性嵌套。

选择器嵌套,在一个选择器中嵌套另一个选择器,通过&引用外层选择器。

$blue:#1875e7;
a{
color:red;
&:hover{
color:$blue;
}
}
//转换后的css
a {
color: red;
}
a:hover {
color: #1875e7;
}

属性嵌套,有些属性拥有相同的前缀,可以提取出来,书写更方便。

/*属性嵌套*/
h16{
margin:{
left:5px;
right:15px;
}
}
//转换之后的css
/*属性嵌套*/
h16 {
margin-left: 5px;
margin-right: 15px;
}

4.继承, 选择器的继承可以让选择器继承另一个选择器的所有样式,要使用关键词@extend ,后面紧跟要继承的选择器。

/*选择器的继承*/
.class1{
border:1px;
}
.class2{
@extend .class1;
font-size:120%;
}
//转换之后的css
.class1, .class2 {
border: 1px;
}
.class2 {
font-size: 120%;
}

占位选择器% ,占位选择器的优势是,对于预先定义的基础样式,需要的时候使用@extend去继承它,不需要的时候,不会继承到。

%ir{
color: transparent;
border:;
}
#header{
h1{
@extend %ir;
width:300px;
}
h2{
width:500px;
}
}
.ir{
@extend %ir;
}
//转换之后的css
#header h1, .ir {
color: transparent;
border:;
}
#header h1 {
width: 300px;
}
#header h2 {
width: 500px;
}

5.函数,sass已经定义好了很多函数,可以直接使用,如:length($list) ,nth($list,$n) .也可以自己定义一个函数使用@function。

下面是把px转换成rem的例子。

$baseFontSize:16px!default;
@function pxToRem($px){
@return $px/$baseFontSize*1rem;
}
body{
font-size:pxToRem(10px);
}
//转换之后的css
body {
font-size: 0.625rem;
}

6.混合(mixin),混合定义可重用的代码块,sass中通过@mixin来声明混合,@include来调用。

@mixin left($value:10px){
float:left;
margin-right:$value;
}
h16{
@include left(5px);
}
h17{
@include left();
}
//转换后的css
h16 {
float: left;
margin-right: 5px;
}
h17 {
float: left;
margin-right: 10px;
}

@content 用来解决css3的@media问题。。。。。。。。。。。。

@mixin 可以接受一整块样式,接受的样式从@content开始。

@mixin max-screen($res){
@media only screen and (max-width:$res){
@content;
}
}
@include max-screen(480px){
body{color:red;}
}
//转换后的css
@media only screen and (max-width: 480px) {
body { color: red; }
}

7.条件判断及循环。

a.@if{}@else{}

b.@if($condition,$if_true,$if_else)

c.@for($i from <start> through <end>) 包含end

d.@for($i from <start> to <end>) 不包含end

e.@each $item in <list or map>

之前在写@each 的时候碰到个问题。我之前使用的是sass3.2.13版本 对于对字段循环不支持,sass3.3.0之后的版本才会支持哦。不然转换时一直会报错,不能成功。

$headings: (h1: 2em, h2: 1.5em, h3: 1.2em);
@each $header, $size in $headings {
#{$header} {
font-size: $size;
}
}
//转换成css
h1 {
font-size: 2em;
}
h2 {
font-size: 1.5em;
}
h3 {
font-size: 1.2em;
}

把px转换成rem,支持同时输入多个值,以及一些特殊值如0的输入。

@function rem($values...) {
$all_rem: ();
$separator: list-separator($values);
@each $value in $values {
$rem: null;
@if type-of($value) == list {
// List: process each value on its own
$rem: rem($value...);
} @else if is_zero($value) {
// Zero: enforce no units
$rem: 0;
} @else if need_convert($value) {
// if need convert we will convert it to rem depend on the base font size.
$base_font_value: strip_units($rem_font_size);
$rem: (strip_units($value / $base_font_value) * 1rem);
} @else {
$rem: $value;
}
$all_rem: append($all_rem, $rem, $separator);
}
@return $all_rem;
} @function strip_units($num) {
@return $num / (($num * 0) + 1);
}
@function is_zero($value) {
@return
type-of($value) == number
and strip_units($value) == 0;
}
@function need_convert($value) {
$px_units: 'px', 'pt';
@return
type-of($value) == number
and not unitless($value)
and index($px_units, unit($value));
}

px convert to rem

测试一下

div{
padding:rem(0 5px 0 10px);
}
//转换之后的css
div {
padding: 0rem 0.3125rem 0rem 0.625rem;
}

sass 语法实例的更多相关文章

  1. SASS语法备忘

    sass语法 关于sass 3.3.0更新说明——3.3.0 sublime相关插件为:scss语法高亮,sass语法高亮,编译,保存即编译,格式化 文件后缀名 sass有两种后缀名文件:一种后缀名为 ...

  2. Esfog_UnityShader教程_UnityShader语法实例浅析

    距离上次首篇前言已经有一段时间了,一直比较忙,今天是周末不可以再拖了,经过我一段时间的考虑,我决定这一系列的教程会避免过于深入细节,一来可以避免一些同学被误导,二来会避免文章过于冗长难读, 三来可以让 ...

  3. 为sublime text2 添加SASS语法高亮

    以前写CSS时,都是直接写样式,没有任何的第三方工具,后面发现越是面向大网站,越难管理,上次参加完携程UED大会后,发现SASS对于前端团队多人协作和站点代码维护上很有帮助,很多同学都开始用了,我还是 ...

  4. jQuery的基础语法实例

    jQuery 基础语法 jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作. 基础语法是:$(selector).action() 美元符号定义 jQuery 选择符(sele ...

  5. JSON.stringify 语法实例讲解+easyui data-options属性+expires【申明:来源于网络】

    JSON.stringify 语法实例讲解+easyui data-options属性+expires[申明:来源于网络] JSON.stringify 语法实例讲解:http://www.jb51. ...

  6. (转)Esfog_UnityShader教程_UnityShader语法实例浅析

    距离上次首篇前言已经有一段时间了,一直比较忙,今天是周末不可以再拖了,经过我一段时间的考虑,我决定这一系列的教程会避免过于深入细节,一来可以避免一些同学被误导,二来会避免文章过于冗长难读, 三来可以让 ...

  7. 1-3 Sass 语法、编译、调试

    Sass 语法格式 这里说的 Sass 语法是 Sass 的最初语法格式,他是通过 tab 键控制缩进的一种语法规则,而且这种缩进要求非常严格.另外其不带有任何的分号和大括号.常常把这种格式称为 Sa ...

  8. Sass 语法格式及编译

    一.sass语法格式 这里说的 Sass 语法是 Sass 的最初语法格式,他是通过 tab 键控制缩进的一种语法规则,而且这种缩进要求非常严格.另外其不带有任何的分号和大括号.常常把这种格式称为 S ...

  9. SQLSERVER存储过程的基本语法实例

    SQLSERVER存储过程的基本语法实例 SQLSERVER存储过程的基本语法实例 一.定义变量--简单赋值 declare @a intset @a=5 print @a --使用select语句赋 ...

随机推荐

  1. WMware VMX格式转换成OVF

    1.关于VMX格式 vmx文件是vmware虚拟机系统的配置文件,注意:刚刚安装好VMware Workstation以后是找不到这个文件的,当你在VMware Workstation中建立了一个虚拟 ...

  2. CodeForces 111B - Petya and Divisors 统计..想法题

    找每个数的约数(暴力就够了...1~x^0.5)....看这约数的倍数最后是哪个数...若距离大于了y..统计++...然后将这个约数的最后倍数赋值为当前位置...好叼的想法题.... Program ...

  3. HTML文本框

    文本框样式大全   输入框景背景透明:<input style="background:transparent;border:1px solid #ffffff"> 鼠 ...

  4. clinit和init(转载)

    clinit和init(转载)   今天在看深入Java虚拟机的class文件结构时,看到了这么一句话, 可能出现在class文件中的两种编译器产生的方法是:实例初始化方法(名为<init> ...

  5. SQL 语句中按照in语句原有的顺序进行排序

    Access: ,,) order by instr(',1,5,3,',','&;id&;',') MSSQL: ,,) )))+',',',1,5,3,') MySQL: ,,) ...

  6. Matlab工程

    1.matlab设置默认路径 在原来的默认路径(bin)下创建一个名为startup.m的文件,内容为相对路径 cd ..\..\WorkSpace\ 或绝对路径 cd F:\Program\MATL ...

  7. Linux学习之给指定用户发邮件

    发送邮件 进入 mail 程序后的操作都很简单,但是可以不进入 mail 的 & 操作提示符界面,下面举几个实用例子: 1.给 snailwarrior@qq.com 发信 [root@pps ...

  8. Struts 2的iterator标签来遍历一个含有双层List的嵌套

    今天碰到一个很有意思的问题,就是需要用Struts 2的iterator标签来遍历一个含有双层List的嵌套. 首先我们从最基础的说起,用iterator标签遍历一个List. 如果Action中有一 ...

  9. Hive进阶(上)

    Hive进阶(上) Hive进阶(上) 执行数据导入 使用Load语句 语法: 1.LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE ...

  10. zookeeper参考

        ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.名字服务.分布式同步.组服务等.     我需要运行几个 ...