全局变量/局部变量
创建变量用$
符号开头。
创建变量的条件:
该值至少重复出现了两次;
该值至少可能会被更新一次;
该值所有的表现都与变量有关(非巧合)。
注意:当在局部范围(选择器内、函数内、混合宏内…)声明一个已经存在于全局范围内的变量时,局部变量只会在局部范围内覆盖全局变量。
1 | /** SCSS **/ |
嵌套
嵌套的三种类型
选择器嵌套
属性嵌套
伪类嵌套
选择器嵌套
1 | /** scss **/ |
编译出来之后:
1 | /** css **/ |
属性嵌套
1 | /** scss **/ |
编译出来之后:
1 | /** css **/ |
伪类嵌套
1 | /** scss **/ |
编译出来之后:
1 | /** css **/ |
混合宏@mixin
声明混合宏
@mixin
是用来声明混合宏的关键词。
不带参数混合宏:
1 | @mixin border-radius{ |
带参数混合宏:
1 | @mixin border-radius($radius:5px){ |
复杂的混合宏:
1 | @mixin box-shadow($shadow...) { // 带有多个参数,可以使用“ … ”来替代。 |
调用混合宏
匹配了一个关键词@include
来调用声明好的混合宏。
- 不传参数
1 | /** scss **/ |
1 | /** css **/ |
- 传一个不带值的参数
1 | /** scss **/ |
- 传一个带值的参数
1 | /** scss **/ |
- 传多个带值的参数
1 | /** scss **/ |
有一个特别的参数…
。当混合宏传的参数过多之时,可以使用一个参数来替代所有参数。——box-shadow:0px 3px 1px #000
混合宏在实际编码中给我们带来很多方便之处,特别是对于复用重复代码块。但其最大的不足之处是会生成冗余的代码块。
扩展/继承 @extend
在 Sass 中是通过关键词 @extend
来继承已存在的类样式块,从而实现代码的继承。
1 | /** scss **/ |
编译出来之后:
1 | /** css **/ |
占位符 %placeholder
取代以前 CSS 中的基类造成的代码冗余的情形。因为 %placeholder
声明的代码,如果不被 @extend
调用的话,不会产生任何代码。
1 | /** scss **/ |
编译出来的CSS
1 | /** css **/ |
混合宏 VS 继承 VS 占位符
Sass 中的混合宏使用
总结:编译出来的 CSS 清晰告诉了大家,他不会自动合并相同的样式代码,如果在样式文件中调用同一个混合宏,会产生多个对应的样式代码,造成代码的冗余,但是@mixin
可以传参数。
个人建议:如果你的代码块中涉及到变量,建议使用混合宏来创建相同的代码块。
Sass 中继承
总结:使用继承后,编译出来的 CSS 会将使用继承的代码块合并到一起,通过组合选择器的方式向大家展现,比如 .mt, .block, .block span, .header, .header span。这样编译出来的代码相对于混合宏来说要干净的多,但是他不能传变量参数。
个人建议:如果你的代码块不需要专任何变量参数,而且有一个基类已在文件中存在,那么建议使用 Sass 的继承。
占位符
总结:编译出来的 CSS 代码和使用继承基本上是相同,只是不会在代码中生成占位符 mt 的选择器。那么占位符和继承的主要区别的。
“占位符是独立定义,不调用的时候是不会在 CSS 中产生任何代码;继承是首先有一个基类存在,不管调用与不调用,基类的样式都将会出现在编译出来的 CSS 代码中。”
来看一个表格:
关注 web翎云阁,定时推送,互动精彩多,若你有更好的见解,欢迎留言探讨!