Scss语法一嵌套语法和SassScript
最近在看Element UI的源码,发现源码中写的很多样式都用到了Scss的各种语法,虽然可读性不高但是看着是真帅啊。为了方便阅读Element的源码,花点时间把Scss文档上的常用语法大概过一遍吧。
嵌套规则
1 | // 嵌套规则 |
父选择器&
1 | // 嵌套规则 |
属性嵌套
1 | .text-box{ |
编译为:
1 | .text-box{ |
占位符选择器%foo
Sass 额外提供了一种特殊类型的选择器:占位符选择器 (placeholder selector)。与常用的 id 与 class 选择器写法相似,只是 # 或 . 替换成了 %。必须通过 @extend指令调用
当占位符选择器单独使用时(未通过 @extend 调用),不会编译到 CSS 文件中
有时,需要定义一套样式并不是给某个元素用,而是只通过 @extend 指令使用,尤其是在制作 Sass 样式库的时候,希望 Sass 能够忽略用不到的样式。
如果使用普通的 CSS 规则,最后会编译出很多用不到的样式,也容易与其他样式名冲突,所以,Sass 引入了“占位符选择器” (placeholder selectors),看起来很像普通的 id 或 class 选择器,只是 # 或 . 被替换成了 %。可以像 class 或者 id 选择器那样使用,当它们单独使用时,不会被编译到 CSS 文件中。
1 | // 单独使用不会被编译 |
占位符选择器需要通过延伸指令使用,用法与 class 或者 id 选择器一样,被延伸后,占位符选择器本身不会被编译。
1 | .notice { |
编译为
1 | #context a.notice { |
SassScript
在 CSS 属性的基础上 Sass 提供了一些名为 SassScript 的新功能。 SassScript 可作用于任何属性,允许属性使用变量、算数运算等额外功能。
通过 interpolation,SassScript 甚至可以生成选择器或属性名,这一点对编写 mixin 有很大帮助。
变量$
SassScript 最普遍的用法就是变量,变量以美元符号开头,赋值方法与 CSS 属性的写法一样:
1 | $width: 5em; |
直接使用即调用变量:
1 | #main { |
变量支持块级作用域,嵌套规则内定义的变量只能在嵌套规则内使用(局部变量),不在嵌套规则内定义的变量则可在任何地方使用(全局变量)。将局部变量转换为全局变量可以添加 !global 声明:
1 | #main { |
编译为
1 | #main { |
圆括号
圆括号可以用来影响运算的顺序:
1 | p { |
编译为
1 | p { |
插值语句#{}
通过 #{} 插值语句可以在选择器或属性名中使用变量:
1 | $name: foo; |
编译为
1 | p.foo { |
#{} 插值语句也可以在属性值中插入 SassScript,大多数情况下,这样可能还不如使用变量方便,但是使用 #{} 可以避免 Sass 运行运算表达式,直接编译 CSS。
1 | p { |
编译为
1 | p { |
插值语句在mixin中根据参数来动态的给标签设置样式会更常用,该用法在mixin中在标注。
Scss语法一嵌套语法和SassScript
https://zhaolei-hu.github.io/2022/06/30/Scss语法一嵌套语法和SassScript/