Sass
是成熟、稳定、强大的CSS
预处理器,可以很方便的复用一些CSS
样式,Sass
是一款强化CSS
的辅助工具,它在CSS
语法的基础上增加了变量 、嵌套 、混合、导入 等高级功能,这些拓展令 CSS
更加强大与优雅。通过使用变量
来定义一些常用反复使用的CSS
属性值。,然后通过变量名来引用它们,而无需重复书写这一属性值。
1.sass与.scss
Sass
包含两种文件,分别是.sass
与.scss
,那这两种文件有什么区别了?
Sass
包括两种语法,分别为SCSS语法和缩进语法,SCSS语法的文件以.scss
结尾,缩进语法以.sass
结尾。
1.1.SCSS语法
SCSS
语法使用 .scss
文件扩展名,除了少部分的例外,它是CSS
的超集,也就是说所有的CSS
也同样都是有效SCSS
,所有CSS3
语法在 SCSS
中都是通用的,同时加入Sass
的特色功能。由于其写法跟CSS
很相似,所以一般都使用SCSS
语法,该语法是最流行的语法,我在项目中也是用SCSS
语法。
注,任何一种格式可以直接 导入
@import
到另一种格式中使用,或者通过sass-convert
命令行工具转换成另一种格式。
1.2.缩进语法
缩进语法是Sass
最原始的语法,因此它的文件扩展名为.scss
,缩进语法支持与SCSS
语法相同的所有特性,但是它由于使用的是缩进语法,因此在代码中都是以缩进的方式来描述文档的模式,而不是用花括号来描述文档的格式,如下分别为SCSS语法和缩进语法的代码。
SCSS语法
@mixin button-base() {
@include typography(button);
@include ripple-surface;
@include ripple-radius-bounded;
display: inline-flex;
position: relative;
height: $button-height;
border: none;
vertical-align: middle;
&:hover { cursor: pointer; }
&:disabled {
color: $mdc-button-disabled-ink-color;
cursor: default;
pointer-events: none;
}
}
缩进语法
@mixin button-base()
@include typography(button)
@include ripple-surface
@include ripple-radius-bounded
display: inline-flex
position: relative
height: $button-height
border: none
vertical-align: middle
&:hover
cursor: pointer
&:disabled
color: $mdc-button-disabled-ink-color
cursor: default
pointer-events: none
2安装
Sass
是基于ruby
语言开发的,所以需要先安装ruby
环境。然后再使用如下命令进行安装。
gem install sass
gem install compass
2.1编译Sass
写好的.scss
或.sass
文件不能直接引入到html
中,需要先对将Sass
代码编译成CSS
代码,可以使用sass
命令进行编译,一般在开发的时候大多使用的是webpack
,所以可以使用webpack
的loader
进行编译,可以通过如下命令来安装sass
的loader
。
npm install sass-loader node-sass webpack --save-dev
3.快速入门
3.1变量
Sass
一个重要的特性是使用了变量,可以通过变量来定义一些常用的css
属性值,在需要用到属性值的地方直接使用变量就可以了,在Sass
中,使用$来定义变量,如下所示:
$theme-color: #F90;
$theme-border:1px solid black;
在需要使用变量的地方直接引入既可。如下所示:
div{
color:$theme-color;
border:$theme-border;
font-size:14px;
}
除了在外部定义变量外,也可以在块级中定义,如下所示:
div{
color:$theme-color;
border:$theme-border;
font-size:14px;
$width: 100px;
width: $width;
}
3.2CSS嵌套
在写css
的时候,我们经常会碰到如下的代码:
<div class="layout">
<div>
<p></p>
</div>
<div>
<h2></h2>
</div>
</div>
.layout div p{
}
.layout div h2{
}
如果html
标签比较复杂时,在写CSS
的时候会写很多的.layout div
,写起来很烦,在sass
中可以使用嵌套的方式来写,如下所示:
.layout{
div{
h2{}
p{}
}
}
这样子看上去就简洁多了。如果出现一些父选择器,也可以使用&来表示,如下所示:
article a {
color: blue;
&:hover { color: red }
}
编译后的代码如下所示:
article a { color: blue }
article a:hover { color: red }
嵌套属性
当在书定CSS
时,经常会碰到border-style
,border-width
,border-color
,以及border-*
等类似的代码时,写多了会感觉很烦。在sass
中可以把属性名从中划线-的地方断开,如下所示:
border: {
style: solid;
width: 1px;
color: #ccc;
}
3.3导入SASS
sass
的@import
可以在生成CSS
的时候,可以把相关文件导入进来,在导入文件的时候,可以省略.sass
或.scss
文件的后缀名。当通过@import
把sass
样式分散到多个文件时,你通常只想生成少数几个css
文件。那些专门为@import
命令而编写的sass
文件,并不需要生成对应的独立css
文件,这样的sass
文件称为局部文件。对此,sass
有一个特殊的约定来命名这些文件。此约定即,sass
局部文件的文件名以下划线开头。这样,sass
就不会在编译时单独编译这个文件输出css
,而只把这个文件用作导入。由于sass
兼容原生的css
,所以它也支持原生的CSS@import
。尽管通常在sass
中使用@import
时,sass
会尝试找到对应的sass
文件并导入进来。
3.4注释
在sass
中可以使用//
进行注释。如下所示:
body {
color: #333; // 这种注释内容不会出现在生成的css文件中
padding: 0; /* 这种注释内容会出现在生成的css文件中 */
}
3.5混合器
在前面介绍过变量,可以用变量来定义一些属性值,还是有一定的限制,只能定义单个的属性值,如果需要重用更多的代码样式时,变量就有点力不从心了,这时可以使用混合器来定义重复的代码,混合器使用@mixin
标识符定义。如下所示:
@mixin rounded-corners {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
可以使用@include
来引入定义的混合器。
notice {
background-color: green;
border: 2px solid #00aa00;
@include rounded-corners;
}
混合器除了设置固定的样式外,还可以使用参数来动态传入一些属性值,如下所示:
@mixin link-colors($normal, $hover, $visited) {
color: $normal;
&:hover { color: $hover; }
&:visited { color: $visited; }
}
a {
@include link-colors(blue, red, green);
}
为了在@include
混合器时不必传入所有的参数,可以给参数指定一个默认值。参数默认值使用$name: default-value
的声明形式,默认值可以是任何有效的css
属性值,甚至是其他参数的引用。
3.6继承
选择器继承是指一个选择器可以继承为另一个选择器定义的所有样式。这个通过@extend语法实现,如下代码:
.error {
border: 1px solid red;
background-color: #fdd;
}
.seriousError {
@extend .error;
border-width: 3px;
}
网友评论