76

我想知道您是否可以获得@each 循环的元素索引。

我有以下代码,但我想知道$i变量是否是最好的方法。

当前代码:

$i: 0;
$refcolors: #55A46A, #9BD385, #D9EA79, #E4EE77, #F2E975, #F2D368, #F0AB55, #ED7943, #EA4E38, #E80D19;

@each $c in $refcolors {
    $i: $i + 1;
    #cr-#{$i} strong {
        background:$c;
    }   
}
4

3 回答 3

126

首先,@each函数不是来自 Compass,而是来自 Sass。


要回答您的问题,这不能通过 each 循环来完成,但很容易将其转换为@for循环,可以执行以下操作:

@for $i from 1 through length($refcolors) {
    $c: nth($refcolors, $i);

    // ... do something fancy with $c
}
于 2013-02-28T22:23:55.160 回答
66

要更新此答案:是的,您可以使用@each循环实现此目的:

$colors-list: #111 #222 #333 #444 #555;

@each $current-color in $colors-list {
    $i: index($colors-list, $current-color);
    .stuff-#{$i} { 
        color: $current-color;
    }
}

资料来源:http: //12devs.co.uk/articles/handy-advanced-sass/

于 2014-06-16T12:31:01.087 回答
21

有时您可能需要使用数组或地图。我有一个数组数组,即:

$list = (('sub1item1', 'sub1item2'), ('sub2item1', 'sub2item2'));

我发现将其转换为对象是最简单的:

$list: (
    'name': 'thao',
    'age': 25,
    'gender': 'f'
);

并使用以下内容获得$i

@each $property, $value in $list {
    $i: index(($list), ($property $value));

sass 团队还推荐了以下内容,尽管我不太喜欢:

[...] 上面的代码是我想解决的问题。通过添加像 range($n) 这样的 Sass 函数可以提高效率。所以 range(10) => (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)。那么枚举可以变成:

@function enumerate($list-or-map) {
    @return zip($list-or-map, range(length($list-or-map));
}

关联。

于 2017-08-06T15:49:43.293 回答