Sass 带参混合

Posted 书和咖啡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sass 带参混合相关的知识,希望对你有一定的参考价值。

本节我们来学习带参混合,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 指定了两个参数的值。当然我们也可以给它指定多个参数的值。

以上是关于Sass 带参混合的主要内容,如果未能解决你的问题,请参考以下文章

less

sass学习笔记:混合宏VS继承VS占位符

CSS属性作为SASS混合值[重复]

Sass学习笔记 -- 混合器

Sass混合的使用

[Sass]混合宏