Sass中具有可变参数列表的一个属性的多个值

boo*_*sey 6 sass

我希望有一个像+stacktextshadow(blue, red, green)吐出来的混合物text-shadow: 1px 1px 0 blue, 2px 2px 0 red, 3px 3px 0 green;

目前这就是我所拥有的:

=stacktextshadow($shadows...)
  @for $i from 1 through length($shadows)
    $shadow1: append(1px 1px 0, nth($shadows,1))
    $shadow2: append(2px 2px 0, nth($shadows,2))
    $shadow3: append(3px 3px 0, nth($shadows,3))
    text-shadow: $shadow1, $shadow2, $shadow3

h1
  +stacktextshadow(blue, red, green)
Run Code Online (Sandbox Code Playgroud)

这给了我:

h1 {
  text-shadow: 1px 1px 0 blue, 2px 2px 0 red, 3px 3px 0 green;
  text-shadow: 1px 1px 0 blue, 2px 2px 0 red, 3px 3px 0 green;
  text-shadow: 1px 1px 0 blue, 2px 2px 0 red, 3px 3px 0 green; }
Run Code Online (Sandbox Code Playgroud)

三倍.我知道为什么,因为它text-shadow@for循环中运行了三次属性声明.我希望它只做一次.然而,当我走text-shadow了福尔循环,它没有进入$shadow1,$shadow2等等.

另外,我不想用以下内容重复自己:( $shadow($i): append($i*1px $i*1px 0, nth($shadows,$i))这显然不起作用)所以它都是动态完成的 - 无论我将一个参数传递给mixin,还是20.

hop*_*per 6

您可以在循环外创建一个变量来"收集"阴影值,然后在您的text-shadow属性中使用该变量.例:

=stacktextshadow($shadows...)
  $all: ()
  @for $i from 1 through length($shadows)
    $all: append($all, append($i*1px $i*1px 0, nth($shadows, $i)), comma)

  text-shadow: $all

h1
  +stacktextshadow(blue, red, green)
Run Code Online (Sandbox Code Playgroud)

输出:

h1 {
  text-shadow: 1px 1px 0 blue, 2px 2px 0 red, 3px 3px 0 green; }
Run Code Online (Sandbox Code Playgroud)