Scss 是 Sass 3 引入新的语法,其语法完全兼容 CSS3,并且继承了 Sass 的强大功能。也就是说,任何标准的 CSS3 样式表都是具有相同语义的有效的 SCSS 文件。另外,SCSS 还能识别大部分 CSS hacks(一些 CSS 小技巧)和特定于浏览器的语法。
完全兼容 CSS3
在 CSS 基础上增加变量、嵌套 (nesting)、混合 (mixins) 等功能
通过函数进行颜色值与属性值的运算
提供控制指令 (control directives)等高级功能
自定义输出格式
选择嵌套
优点: 避免了重复输入父选择器,提高开发效率。
1 | .box { |
父级选择 &
1 | a { |
属性嵌套
1 | .box { |
变量 $
变量以美元符号开头,赋值方法与 CSS 属性的写法一样
1 | $width: 200px; |
直接调用即可
1 | .box { |
变量支持块级作用域,嵌套规则内定义的变量只能在嵌套规则内使用(局部变量),不在嵌套规则内定义的变量则可在任何地方使用(全局变量)。将局部变量转换为全局变量可以添加 !global 声明:
1 | // 定义全局变量 |
插值语句 #{}
通过 #{} 插值语句可以在选择器或属性名中使用变量
1 | $name: foo; |
常见指令 @import
@extend
@root
@import
通常,@import 寻找 Sass 文件并将其导入,但在以下情况下,@import 仅作为普通的 CSS 语句,不会导入任何 Sass 文件。
- 文件拓展名是 .css;
- 文件名以 http:// 开头;
- 文件名是 url();
@import
包含 media queries。
1 | @import 'foo.scss'; |
然后,@import同样可以嵌套使用:
假设a.scss文件有以下内容:
1 | .test { |
在b.scss文件中使用:
1 | .box { |
@extend
使用公共样式, 继承效果。
1 | .btn { |
@root
让某个选择器跳出根元素
1 | .a { |