1、声明混合宏
不带参数混合宏:
在 Sass 中,使用“@mixin”来声明一个混合宏。如:
1 | @mixin border-radius{ |
其中 @mixin 是用来声明混合宏的关键词,有点类似 CSS 中的 @media、@font-face 一样。border-radius 是混合宏的名称。大括号里面是复用的样式代码。
带参数混合宏:
除了声明一个不带参数的混合宏之外,还可以在定义混合宏时带有参数,如:
1 | @mixin border-radius($radius:5px){ |
复杂的混合宏:
上面是一个简单的定义混合宏的方法,当然, Sass 中的混合宏还提供更为复杂的,你可以在大括号里面写上带有逻辑关系,帮助更好的做你想做的事情,如:
1 | @mixin box-shadow($shadow...) { |
这个 box-shadow 的混合宏,带有多个参数,这个时候可以使用“ … ”来替代。简单的解释一下,当 $shadow 的参数数量值大于或等于“ 1 ”时,表示有多个阴影值,反之调用默认的参数值“ 0 0 4px rgba(0,0,0,.3) ”。
2.混合宏-调用混合宏
在 Sass 中通过 @mixin 关键词声明了一个混合宏,那么在实际调用中,其匹配了一个关键词“@include”来调用声明好的混合宏。例如在你的样式中定义了一个圆角的混合宏“border-radius”:
1 | @mixin border-radius{ |
在一个按钮中要调用定义好的混合宏“border-radius”,可以这样使用:
1 | button { |
这个时候编译出来的 CSS:
1 | button { |
3.混合宏的参数–传一个不带值的参数
Sass 的混合宏有一个强大的功能,可以传参,那么在 Sass 中传参主要有以下几种情形:
A) 传一个不带值的参数
在混合宏中,可以传一个不带任何值的参数,比如:
1 | @mixin border-radius($radius){ |
Sass 的混合宏有一个强大的功能,可以传参,那么在 Sass 中传参主要有以下几种情形:
A) 传一个不带值的参数
在混合宏中,可以传一个不带任何值的参数,比如:
1 | @mixin border-radius($radius){ |
在混合宏“border-radius”中定义了一个不带任何值的参数“$radius”。
在调用的时候可以给这个混合宏传一个参数值:
1 | .box { |
混合宏的参数–传一个带值的参数
在 Sass 的混合宏中,还可以给混合宏的参数传一个默认值,例如:
@mixin border-radius($radius:3px){
1 | -webkit-border-radius: $radius; |
在混合宏“border-radius”传了一个参数“$radius”,而且给这个参数赋予了一个默认值“3px”。
在调用类似这样的混合宏时,会多有一个机会,假设你的页面中的圆角很多地方都是“3px”的圆角,那么这个时候只需要调用默认的混合宏“border-radius”:
1 | .btn { |
编译出来的 CSS:
1 | .btn { |
但有的时候,页面中有些元素的圆角值不一样,那么可以随机给混合宏传值,如:
1 | .box { |
编译出来的 CSS:
1 | .box { |
混合宏的参数–传多个参数
Sass 混合宏除了能传一个参数之外,还可以传多个参数,如:
1 | @mixin center($width,$height){ |
在混合宏“center”就传了多个参数。在实际调用和其调用其他混合宏是一样的:
1 | .box-center { |
编译出来 CSS:
1 | .box-center { |
有一个特别的参数“…”。当混合宏传的参数过多之时,可以使用参数来替代,如:
1 | @mixin box-shadow($shadows...){ |
编译出来的CSS:
1 | .box { |
混合宏的参数–混合宏的不足
混合宏在实际编码中给我们带来很多方便之处,特别是对于复用重复代码块。但其最大的不足之处是会生成冗余的代码块。比如在不同的地方调用一个相同的混合宏时。如:
1 | @mixin border-radius{ |
示例在“.box”和“.btn”中都调用了定义好的“border-radius”混合宏。先来看编译出来的 CSS:
1 | .box { |
上例明显可以看出,Sass 在调用相同的混合宏时,并不能智能的将相同的样式代码块合并在一起。这也是 Sass 的混合宏最不足之处。