@each
@each
规则可以轻松地为 列表 的每个元素或 映射 中的每对元素发出样式或评估代码。它非常适合仅在它们之间有少量变化的重复样式。它通常写为 @each <variable> in <expression> { ... }
,其中 表达式 返回一个列表。该块依次针对列表的每个元素进行评估,该元素被分配给给定的变量名称。
SCSS 语法
$sizes: 40px, 50px, 80px;
@each $size in $sizes {
.icon-#{$size} {
font-size: $size;
height: $size;
width: $size;
}
}
Sass 语法
$sizes: 40px, 50px, 80px
@each $size in $sizes
.icon-#{$size}
font-size: $size
height: $size
width: $size
CSS 输出
.icon-40px {
font-size: 40px;
height: 40px;
width: 40px;
}
.icon-50px {
font-size: 50px;
height: 50px;
width: 50px;
}
.icon-80px {
font-size: 80px;
height: 80px;
width: 80px;
}
使用映射带有映射的永久链接
您还可以使用 @each
遍历映射中的每个键/值对,方法是编写 @each <variable>, <variable> in <expression> { ... }
。键分配给第一个变量名,元素分配给 第二个变量名。
SCSS 语法
$icons: ("eye": "\f112", "start": "\f12e", "stop": "\f12f");
@each $name, $glyph in $icons {
.icon-#{$name}:before {
display: inline-block;
font-family: "Icon Font";
content: $glyph;
}
}
Sass 语法
$icons: ("eye": "\f112", "start": "\f12e", "stop": "\f12f")
@each $name, $glyph in $icons
.icon-#{$name}:before
display: inline-block
font-family: "Icon Font"
content: $glyph
CSS 输出
.icon-eye:before {
display: inline-block;
font-family: "Icon Font";
content: "\f112";
}
.icon-start:before {
display: inline-block;
font-family: "Icon Font";
content: "\f12e";
}
.icon-stop:before {
display: inline-block;
font-family: "Icon Font";
content: "\f12f";
}
解构解构永久链接
如果您有一个列表列表,您可以使用 @each
通过编写 @each <variable...> in <expression> { ... }
自动将变量分配给内部列表中的每个值。这称为解构,因为变量与内部列表的结构匹配。每个变量名都分配给列表中对应位置的值,或者如果列表没有足够 值,则分配给 null
。
SCSS 语法
$icons:
"eye" "\f112" 12px,
"start" "\f12e" 16px,
"stop" "\f12f" 10px;
@each $name, $glyph, $size in $icons {
.icon-#{$name}:before {
display: inline-block;
font-family: "Icon Font";
content: $glyph;
font-size: $size;
}
}
Sass 语法
$icons: "eye" "\f112" 12px, "start" "\f12e" 16px, "stop" "\f12f" 10px
@each $name, $glyph, $size in $icons
.icon-#{$name}:before
display: inline-block
font-family: "Icon Font"
content: $glyph
font-size: $size
CSS 输出
.icon-eye:before {
display: inline-block;
font-family: "Icon Font";
content: "\f112";
font-size: 12px;
}
.icon-start:before {
display: inline-block;
font-family: "Icon Font";
content: "\f12e";
font-size: 16px;
}
.icon-stop:before {
display: inline-block;
font-family: "Icon Font";
content: "\f12f";
font-size: 10px;
}
💡 有趣的事实
由于 @each
支持解构和 映射被视为列表列表,因此 @each
的映射支持无需特别支持映射 即可工作。