Mixin 与变量参数

在 mixins 中有一些情况,在使用它时可以有单个或多个参数。让我们来看一个 border-radius 的情况,其中可以有像 border-radius:4px; 这样的单个参数或像 border-radius:4px 3px 2px 1px; 这样的多个参数。

传统的关键字参数混合将如下所示: -

@mixin radius($rad1, $rad2, $rad3, $rad4){
 -webkit-border-radius: $rad1 $rad2 $rad3 $rad4;
 -moz-border-radius: $rad1 $rad2 $rad3 $rad4;
 -ms-border-radius: $rad1 $rad2 $rad3 $rad4;
 -o-border-radius: $rad1 $rad2 $rad3 $rad4;
 border-radius: $rad1 $rad2 $rad3 $rad4;
}

并用作

.foo{
    @include radius(2px, 3px, 5px, 6px)
}

上面的例子很复杂(代码,读取和维护),如果你不能只传递一个值或两个值,它将抛出一个错误,并且要使用一个,两个或那些值,你必须定义另外三个 mixin。

通过使用变量 Argument,你不必担心可以传递多少个参数。可以通过定义变量名称后跟三个点(…) 来声明变量参数。以下是变量参数的示例。

@mixin radius($radius...)
{  
    -webkit-border-radius: $radius;
    -moz-border-radius: $radius;
    -ms-border-radius: $radius;
    -o-border-radius: $radius;
    border-radius: $radius;
}

并用作

.foo{
    @include radius(2px 3px 5px 6px)
}
.foo2{
    @include radius(2px 3px)
}
.foo3{
    @include radius(2px)
}

上面的例子更简单(代码,维护和读取),你不必担心将要提出多少参数 - 它是一个还是多个

如果有多个参数,并且在任何情况下你想要访问第二个参数,则可以通过编写 propertyname : nth(variable_name, 2) 来完成