我写的mixin是这样的:
@mixin box-shadow($top, $left, $blur, $color, $inset:"") {
-webkit-box-shadow: $top $left $blur $color $inset;
-moz-box-shadow: $top $left $blur $color $inset;
box-shadow: $top $left $blur $color $inset;
}
当调用时,我真正想要的是,如果没有$inset值被传递,什么都不输出,而不是编译成这样:
-webkit-box-shadow: 2px 2px 5px #555555 "";
-moz-box-shadow: 2px 2px 5px #555555 "";
box-shadow: 2px 2px 5px #555555 "";
我如何重写mixin,以便如果没有$inset传递的值,没有输出?
干的方式好多了
是传递$args…到@mixin。
这样,不管你传递多少个$args。
在@input调用中,你可以传递所有需要的参数。
像这样:
@mixin box-shadow($args...) {
-webkit-box-shadow: $args;
-moz-box-shadow: $args;
box-shadow: $args;
}
现在你可以通过传递所有需要的参数在每个类中重用你的box-shadow:
.my-box-shadow {
@include box-shadow(2px 2px 5px #555, inset 0 0 0);
}
干的方法
一般来说,一个简单的技巧就是去掉引号。
@mixin box-shadow($top, $left, $blur, $color, $inset:"") {
-webkit-box-shadow: $top $left $blur $color #{$inset};
-moz-box-shadow: $top $left $blur $color #{$inset};
box-shadow: $top $left $blur $color #{$inset};
}
SASS版本3+,你可以使用unquote():
@mixin box-shadow($top, $left, $blur, $color, $inset:"") {
-webkit-box-shadow: $top $left $blur $color unquote($inset);
-moz-box-shadow: $top $left $blur $color unquote($inset);
box-shadow: $top $left $blur $color unquote($inset);
}
这里的例子:将一个列表作为SASS的单个参数传递给mixin