本节我们来学习带参混合,Sass 中混合可以接受参数,我们可以通过使用 @include
调用混合时给混合传参,来定义混合生成的精确样式。
给混合传参
混合可以用 SassScript
值作为参数,给定的参数被包括在混合中并且作为为变量提供给混合,既然是作为变量,那么定义参数时,参数名前面需要加一个 $
符号。
当我们定义一个带参混合时,混合的参数被作为变量名,写到混合名后面的小括号中,如果带有多个参数则通过逗号将参数分隔。下面我们来看一下如何给一个混合传参。
示例:
例如在混合中定义两个参数 $num
和 $color
,
@mixin my-text($num, $color) {
font-size: $num;
color: $color;
font-weight: bold;
}
.other{
@include my_text(14px, #fdef92);
}
编译成 CSS 代码:
.other {
font-size: 14px;
color: #fdef92;
font-weight: bold;
}
我们在通过 @include
指令调用混合时,需要给混合所带的参数赋值,例如上述代码中,给参数 $num
赋值为 14px
,给参数 $color
赋值为 #fdef92
。
默认值参数
像上面这个例子中,定义混合时带有两个参数,那么调用混合时必须给这个两个参数赋值,如果不给参数赋值或者只给一个参数赋值则会报错。例如下面是不给 $num
参数赋值的报错信息:
Error: Mixin my-text is missing argument $num.
on line 8 of style.scss, in `my_text'
from line 8 of style.scss
Use --trace for backtrace.
而如果我们希望可以不给混合中的某个参数传参,可以在定义混合时使用普通变量的赋值语法为参数指定默认值,这样当调用混合时,如果不给参数赋值,则会使用默认值代替。
示例:
例如下面这个例子:
@mixin my-text($num, $color:pink) {
font-size: $num;
color: $color;
font-weight: bold;
}
.other{
@include my_text(14px);
}
编译成 CSS 代码:
.other {
font-size: 14px;
color: pink;
font-weight: bold;
}
我们在定义混合时,给参数 $color
指定了默认值 pink
,所以当我们没有给 $color
赋值时,会自动使用定义好的默认值。
关键字参数
混合中除了可以使用上面讲到的默认值参数,还可以使用关键字参数,关键字参数就是通过 $name:value
形式传参。使用这种方式来传参,参数的顺序并不重要,只要不漏掉参数就可以啦。
示例:
@mixin my-text($num, $color) {
font-size: $num;
color: $color;
font-weight: bold;
}
.other{
@include my_text($color:#000, $num:16px);
}
编译成 CSS 代码:
.other {
font-size: 16px;
color: #000;
font-weight: bold;
}
可变参数
当我们给混合定义参数时,有时可能不确定混合中参数的数量,这时我们就可以使用 ...
来设置可变参数。
示例:
例如我们给一个元素设置 box-shadow
时,可以使用任何数量的 box-shadow
作为参数:
@mixin my-text($shadow...) {
box-shadow: $shadow;
}
.other{
@include my_text(2px 5px 10px #ccc, 3px 6px 9px #aaa);
}
编译成 CSS 代码:
.other {
box-shadow: 2px 5px 10px #ccc, 3px 6px 9px #aaa;
}
可以看到,上述代码中,在调用混合时,给 my_text
指定了两个参数的值。当然我们也可以给它指定多个参数的值。
网友评论