使用 SASS 为 linear-gradient 动态添加色标

Use SASS to dynamically add color stops to linear-gradient

使用 SASS,我正在尝试创建一个动态线性渐变,所以如果我有一个颜色数组,我想遍历它并将每种颜色添加到渐变中。

@import "compass";

$colors: red green blue;
$numColors: length($colors);

div {
  $g: nth($colors, 1);
  @for $h from 2 to ($numColors + 1) {
    $g: $g , nth($colors, $h);
  }
  border: $g;
  background: linear-gradient($g);
}

这会导致以下错误

At least two color stops are required for a linear-gradient

去掉后台参数会编译,看起来像这样

border: red, green, blue;

(我知道这不是一个有效的边界,我只是想 "trace" 出 $g)

如何动态循环访问数组并创建线性渐变?

这里有 2 个问题。

  1. linear-gradient 是一个自定义的 Compass 函数,这就是产生该错误的原因。因此,它需要特定数量的参数。

  2. 您不是在创建一个包含 3 个元素的列表,而是在创建一个包含单个元素的列表,看起来像这样:[[red, green], blue]。列表的第一个元素是一个包含 2 个元素的列表。

您在这里需要的是 append() 函数:

div {
  $g: nth($colors, 1);
  @for $h from 2 to ($numColors + 1) {
    $g: append($g , nth($colors, $h));
  }
  border: $g;
  background: linear-gradient($g);
}

这将为您提供预期的输出:

div {
  border: red green blue;
  background: linear-gradient(#ff0000, #008000, #0000ff);
}