简介
Sass 是一个 CSS 预处理器。
Sass 是 CSS 扩展语言,可以帮助我们减少 CSS 重复的代码,节省开发时间。
Sass 完全兼容所有版本的 CSS。
Sass 扩展了 CSS3,增加了规则、变量、混入、选择器、继承、内置函数等等特性。
Sass 生成良好格式化的 CSS 代码,易于组织和维护。
Sass 文件后缀为 .scss。
安装
1 | npm install -g sass |
使用
查看版本
1 | sass --version |
创建test.scss
文件
1 | /* 定义变量与值 */ |
在命令行输入下面命令,即将 .scss 文件转化的 css 代码:
1 | $ sass test.scss |
1 | @charset "UTF-8"; |
可以在后面再跟一个 .css 文件名,将代码保存到文件中:
1 | $ sass test.scss test.css |
Sass变量
变量用于存储一些信息,可以重复使用。
Sass变量可以用于存储以下信息:
字符串、数字、颜色值、布尔值、列表、null值
Sass变量使用$
符号:
1 | $variablename: value; |
Sass作用域
Sass变量的作用域只能在当前的层级上有效果
1 | $myColor: red; |
!global
Sass 中可以使用 !global 关键词来设置变量是全局的:
1 | $myColor: red; |
现在 p 标签的样式就会变成 green。
注意: 所有的全局变量一般定义在同一个文件,如:_globals.scss
,然后使用 @include
来包含该文件。
Sass嵌套规则与属性
Sass 嵌套 CSS 选择器类似于 HTML 的嵌套规则。
1 | nav { |
Sass嵌套属性
很多 CSS 属性都有同样的前缀,例如:font-family, font-size 和 font-weight,在 Sass 中,可以使用嵌套属性来编写它们:
1 | body:{ |
将以上代码转换为 CSS 代码,如下所示:
1 | body { |
Sass @import 与 Partials
Sass 导入文件
类似 CSS,Sass 支持 @import 指令。
CSS @import 指令在每次调用时,都会创建一个额外的 HTTP 请求。但,Sass @import 指令将文件包含在 CSS 中,不需要额外的 HTTP 请求。
Sass @import 指令语法如下:
1 | @import filename; |
注意: 包含文件时不需要指定文件后缀,Sass 会自动添加后缀 .scss。
此外,你也可以导入 CSS 文件。
创建一个reset.scss
文件
1 | html, |
然后在 standard.scss
文件中使用 @import
指令导入 reset.scss
文件:
1 | @import "reset"; |
转化为css代码后,如下所示:
1 | html, body, ul, ol { |
Sass Partials
在实际的项目中,通常有一个sass文件夹放置相关.scss
文件,之后使用工具将其编译为对应的.css
文件。
但有些scss文件作为通用性文件,仅用于被其他文件引用,不需要单独进行编译使用,这些文件作为局部文件,被称为Partials
。此时可以在文件名的开头添加一个下划线,这将告诉 Sass 不要将其编译到 CSS 文件。如:
创建_reset.scss
文件:
1 | html, |
如果要导入局部文件,则不需要使用下划线。
创建test.scss
文件:
1 | @import "reset"; |
将sass文件夹下的所有文件编译到css文件夹中:
1 | $ sass sass/:css/ |
编译后的结果为:
注意: 请不要将带下划线与不带下划线的同名文件放置在同一个目录下,比如,_colors.scss 和 colors.scss 不能同时存在于同一个目录下,否则带下划线的文件将会被忽略。
Sass @mixin 与 @include
@mixin
指令允许定义一个可以在整个样式表中重复使用的样式。
@include
指令可以将混入(mixin)引入到文档中。
定义一个混入
1 | // 创建一个名为 "important-text" 的混入 |
注意: Sass 的连接符号 - 与下划线符号 _ 是相同的,也就是 @mixin important-text { } 与 @mixin important_text { } 是一样的混入。
使用混入
@include
指令可用于包含一混入:
1 | // 使用混入 |
转化为css代码为:
1 | .danger { |
混入中也可以包含混入,如:
1 | @mixin special-text { |
向混入传入变量
混入可以接收参数,定义可以接收参数的混入:
1 | /* 混入接收两个参数 */ |
混入的参数也可以定义默认值,语法格式如下:
1 | @mixin bordered($color: blue, $width: 1px) { |
在包含混入时,只需要传递需要的变量名及其值:
1 | @mixin sexy-border($color, $width: 1in) { |
可变参数
有时,不能确定一个混入(mixin)或者一个函数(function)使用多少个参数,这时可以使用 … 来设置可变参数。如:
1 | @mixin box-shadow($shadows...) { |
将以上代码转换为 CSS 代码,如下所示:
1 | .shadows { |
Sass @extend 与 继承
@extend
指令告诉 Sass 一个选择器的样式从另一选择器继承。如:
1 | .button-basic { |
将以上代码转换为 CSS 代码,如下所示:
1 | .button-basic, .button-report, .button-submit { |
使用 @extend 后,我们在 HTML 按钮标签中就不需要指定多个类 class=“button-basic button-report” ,只需要设置 class=“button-report” 类就好了。
@extend 很好的体现了代码的复用。
Sass函数
详见Sass 函数