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 );
}