@each
@each 规则使得为列表中的每个元素或映射中的每对发出样式或评估代码变得容易。它非常适合那些只有少量变化的重复样式。它的通常写法是 @each <variable> in <expression> { ... },其中 expression 返回一个列表。该代码块依次为列表中的每个元素进行评估,该元素被分配给给定的变量名。
$sizes: 40px, 50px, 80px;
@each $size in $sizes {
.icon-#{$size} {
font-size: $size;
height: $size;
width: $size;
}
}
$sizes: 40px, 50px, 80px
@each $size in $sizes
.icon-#{$size}
font-size: $size
height: $size
width: $size
.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> { ... }。键被分配给第一个变量名,值被分配给第二个变量名。
$icons: ("eye": "\f112", "start": "\f12e", "stop": "\f12f");
@each $name, $glyph in $icons {
.icon-#{$name}:before {
display: inline-block;
font-family: "Icon Font";
content: $glyph;
}
}
$icons: ("eye": "\f112", "start": "\f12e", "stop": "\f12f")
@each $name, $glyph in $icons
.icon-#{$name}:before
display: inline-block
font-family: "Icon Font"
content: $glyph
.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。
$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;
}
}
$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
.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 的映射支持无需为映射提供特殊支持即可工作。@if 和 @else
@if 规则的写法是 @if <expression> { ... },它控制其代码块是否被评估(包括是否将任何样式作为 CSS 发出)。该表达式通常返回 true 或 false——如果表达式返回 true,则评估代码块;如果表达式返回 false,则不评估。
@for
@for 规则,其写法为 @for <variable> from <expression> to <expression> { ... } 或 @for <variable> from <expression> through <expression> { ... },它从一个数字(第一个表达式的结果)数到另一个数字(第二个表达式的结果),并为中间的每个数字评估一个代码块。沿途的每个数字都被分配给给定的变量名。如果使用 to,则不包括最后一个数字;如果使用 through,则包括它。