本文介绍了SASS的常用语法,平常使用的时候忘记的话可以来这里快速查看语法。
SASS常用语法
目录
我们知道,CSS不是一种编程语言,它没有变量、函数、条件语句、循环语句等,因此,我们在编写CSS的时候,只能一句一句地描述,写多的话会觉得很麻烦。
后来,有人为CSS加入了编程元素,这被叫做“CSS于处理器”。它的基本思想是:用一种专门的编程语言,进行网页样式的设计,然后再编译成CSS文件。
目前常用的CSS于处理器有3种:SASS、LESS和Stylus。本篇文章主要介绍SASS的常用语法。想要看更系统地学习SASS,请参考官方文档。
一、把SASS文件编译成.css文件
SASS文件就是普通的文本文件,里面可以直接使用CSS语法。后缀名一般是.scss,意思是Sassy CSS。
现在我们打开命令行(cmd,或者git Bash等),切换到SASS文件所在的目录,然后运行下面命令,就可以把.scss文件转化为css代码。(现在假设文件名为test)
sass test.scss
如果想要保存为css文件,就运行下面的代码:
sass test.scss test.css
(这里要注意: 如果编译后出现乱码,记得在原scss文件的开头加上:@charset "UTF-8";)
SASS提供4个编译风格的选项:
nested: Nested (嵌套)样式是 Sass 默认的输出格式,能够清晰反映 CSS 与 HTML 的结构关系。选择器与属性等单独占用一行,缩进量与 Sass 文件中一致,每行的缩进量反映了其在嵌套规则内的层数。当阅读大型 CSS 文件时,这种样式可以很容易地分析文件的主要结构。expanded: Expanded 输出更像是手写的样式,选择器、属性等各占用一行,属性根据选择器缩进,而选择器不做任何缩进。compact: Compact 输出方式比起上面两种占用的空间更少,每条 CSS 规则只占一行,包含其下的所有属性。嵌套过的选择器在输出时没有空行,不嵌套的选择器会输出空白行作为分隔符。compressed: Compressed 输出方式删除所有无意义的空格、空白行、以及注释,力求将文件体积压缩到最小,同时也会做出其他调整,比如会自动替换占用空间最小的颜色表达方式。
4个编译风格的结果分别如下:


在生产环境中,一般使用最后一个选项:
sass --style compressed test.scss test.css
你可以让SASS监听某个文件或目录,一旦源文件有变动,就自动生成编译后的版本。(冒号前面是scss文件(目录),冒号后为编译后的css文件(目录))
// watch a file sass --watch test.scss:test.css // watch a directory sass --watch app/sass:public/stylesheets
二、SASS基本用法
接下来我们来看看SASS的基本用法:【变量】、【运算】、【嵌套】、【注释】
1、变量
SASS可以使用变量,所有变量以 $ 开头
@charset "UTF-8";
$blue : #1875e7;
div {
color : $blue;
}
编译成css文件:
div {
color: #1875e7; }
如果变量需要写在字符串中(例如镶嵌在css属性名中),就必须写在 #{} 当中。
$side: top;
p {
margin-#{$side}: 10px;
border-#{$side}-left-radius: 3px;
}
编译成CSS文件:
p {
margin-top: 10px;
border-top-left-radius: 3px; }
2、运算
SASS允许在代码中使用算数表达式,也就是说,可以通过运算来得到css中属性的值了。
$var1: 5;
$var2: 10px;
body {
margin: (14px/2);
top: 50px + 100px;
right: $var1 * 10%;
left: $var2 * 5;
}
编译成CSS文件后:
body {
margin: 7px;
top: 150px;
right: 50%; }
3、嵌套
SASS允许选择器嵌套。例如下面的css代码:
div h1 {
color: red;
}
可以写成:
div {
h1 {
color: red;
}
}
属性也是可以嵌套的,例如border-color属性,可以写成:
p {
border: {
color: red;
}
}
注意,border后面必须加上冒号。
编译成CSS文件后:
p {
border-color: red; }
在嵌套的代码块内,可以使用 & 来引用父元素,比如a:hover,可以写成:
a {
&:hover {
color: #1875e7;
}
}
编译成CSS文件后:
a:hover {
color: #1875e7; }
上面的 & 就代表着 a。
4、注释
SASS注释有两种风格。
- 标准的CSS注释 / comment / ,会保留到编译后的css文件中。
- 单行注释 //comment ,只会保存在.scss文件中,编译后会被省略。
在 /* 后面加一个感叹号,即 /*! ,表示是“重要注释”。即使是compressed模式编译,也会保留这行注释,通常可以用来声明版权信息。
/*! Copyright by Allenmind */
三、SASS重用代码的方法
接着来说下SASS中,让代码重用的方法。主要也分4部分:【继承】、【Mixin】、【颜色函数】、【插入文件】
1、继承
SASS允许一个选择器,继承另一个选择器。比如:现在有一个选择器.class1:
.class1 {
border 1px solid #ddd;
}
选择器.class2要继承.class1,就要是用 @extend 命令:
.class2 {
@extend .class1;
font-siez: 120%;
}
编译后结果为:
.class1, .class2 {
border: 1px solid #ddd;
}
.class2 {
font-size: 120%;
}
2、Mixin
Mixin有点像C语言的宏,是可以重用的代码块。
使用 @mixin 命令,定义一个代码块:
@mixin iAmLeft {
float: left;
margin-left: 10px;
}
使用 @include 命令,调用这个mixin:
div {
@include iAmLeft;
}
以上两段程序合起来编译成CSS文件后:
div {
float: left;
margin-left: 10px; }
mixin还有一个强大的地方,就是可以指定参数和缺省值:
@mixin iAmLeft($value: 10px) {
float: left;
margin-right: $value;
}
使用的时候,根据需要加入参数(如果不指定参数,将会用定义mixin时参数的默认值,因此,如果在调用mixin(@include)时没有给定参数,在定义mixin时,就一定要给参数指定默认值,不然会报错)
div {
@include iAmLeft(30px);
}
编译成CSS文件后:
div {
float: left;
margin-left: 30px; }
下面再来一个mixin实例,用来生成浏览器前缀:
@mixin rounder($dir1, $dir2, $value) {
border-#{$dir1}-#{$dir2}-radius: $value;
-o-border-#{$dir1}-#{$dir2}-radius: $value;
-moz-border-#{$dir1}-#{$dir2}-radius: $value;
-webkit-border-#{$dir1}-#{$dir2}-radius: $value;
}
#navbar li {
@include rounder(top, left, 5px);
}
编译成CSS文件后:
#navbar li {
border-top-left-radius: 5px;
-o-border-top-left-radius: 5px;
-moz-border-top-left-radius: 5px;
-webkit-border-top-left-radius: 5px; }
3、颜色函数
SASS提供了一些内置的颜色函数,以便生成系列颜色。
lighten(#cc3, 10%) // #d6d65c darken(#cc3, 10%) // #a3a329 grayscale(#cc3) // #808080 complement(#cc3) //#33c
4、插入文件
当需要插入外部文件时,用@import命令:
@import "path/filename.scss";
如果插入的是.css文件,则等同与css的import命令。
@import "foo.css";
四、SASS高级用法
最后来看看SASS的高级用法。主要有:【条件语句】、【循环语句】、【自定义函数】
1、条件语句
@if 可以用来判断:
p {
@if 1 + 1 == 2 { border: 1px solid #a30d14; }
@if 5 < 3 { border: 2px dotted #555; }
}
编译成CSS文件后:
p {
border: 1px solid #a30d14; }
还配有 @else 命令:
p {
@if 1 + 1 > 2 {
background-color: #000;
} @else {
background-color: #fff;
}
}
编译成CSS文件后:
p {
background-color: #fff; }
2、循环语句
SASS支持for循环,用 @for 命令:
@for $i from 1 to 4 {
.border-#{$i} {
border: #{$i} px;
}
}
编译成CSS文件后:
.border-1 {
border: 1 px; }
.border-2 {
border: 2 px; }
.border-3 {
border: 3 px; }
SASS也支持while循环,用 @while 命令:
$i: 6;
@while $i > 0 {
.item-#{$i} {
width: 2em * $i;
}
$i: $i - 2;
}
编译成CSS文件后:
.item-6 {
width: 12em; }
.item-4 {
width: 8em; }
.item-2 {
width: 4em; }
第三种循环方法是each,用 @each 命令:
@each $member in a, b, c, d {
.#{$member} {
background-image: url("/image/#{$member}.jpg");
}
}
编译成CSS文件后:
.a {
background-image: url("/image/a.jpg"); }
.b {
background-image: url("/image/b.jpg"); }
.c {
background-image: url("/image/c.jpg"); }
.d {
background-image: url("/image/d.jpg"); }
3、自定义函数
SASS允许自己编写函数,用 @function 命令:
@function double($n) {
@return $n * 2;
}
#sidebar {
width: double(5px);
}
编译成CSS文件后:
#sidebar {
width: 10px; }