Sass Mixin将变量传递给每个/For

Sass Mixin将变量传递给每个/For,sass,mixins,Sass,Mixins,而不是像这样做(这显然是低效的): 我可以做类似的事情吗 @mixin padding($top:"", $right:"", $bottom:"", $left:"") { $params: $top, $right, $bottom, $left; $output: ""; @each $var in $params { $var: $var * $spacer; $output: $output + $var; }

而不是像这样做(这显然是低效的):

我可以做类似的事情吗

@mixin padding($top:"", $right:"", $bottom:"", $left:"") {

    $params: $top, $right, $bottom, $left;
    $output: "";

    @each $var in $params {
        $var: $var * $spacer;
        $output: $output + $var;
    }

    padding: $output;

}

你可以=)

在这种情况下,您还可以跳过第一步,使用
$params…
作为参数(变量参数列表),然后可以使用
填充
1、2、3或4个值

@mixin padding($params...) {
    $output: ();
    @each $var in $params {
        $var: $var * $spacer;
        $output: join( $output, $var );
    }
    padding: $output;
}
如果您使用
join
函数而不是字符串串联,那么在打印输出时,将不会遇到用空格分隔值的问题(列表会自动编译为CSS,作为空格分隔的元素)


如果要确保将参数限制为4 max,可以执行类似操作,而不是执行
@each
循环:

$n: length($params);
@for $i from 1 through if( $n < 4, $n , 4) {
    $var: nth($params,$i) * $spacer;
    $output: join( $output, $var );
}
$n:长度($params);
@从1到if的$i($n<4,$n,4){
$var:n($params,$i)*$spacer;
$output:join($output,$var);
}

但是,如果您想坚持使用字符串和串联而不是列表,则需要在循环内部的串联中使用额外的空间(例如
$output++++$var
),然后使用字符串插值
{$output}
或使用
unquote($output>)返回
$output
。但是你会在字符串上附加一个额外的空格。。。并且需要应用一些额外的逻辑,以防你想要摆脱它

$n: length($params);
@for $i from 1 through if( $n < 4, $n , 4) {
    $var: nth($params,$i) * $spacer;
    $output: join( $output, $var );
}