我想使用SASS在样式表中创建以下内容:
.dC1, .dC2, .dC3 {
color: white;
}
.dC4, .dC5 {
color: black;
}
在SASS中使用@while循环,如下所示(我知道它有点关闭,一旦我弄清楚如何设置它,我会改进它):
$i: 1;
$whiteLevel: 3;
$blackLevel: 5;
$val: nil;
@while $i <= $whiteLevel {
$val: $val + .dC#{$i};
$i: $i + 1;
}
$val {
color: white;
}
$val: nil;
@while $i > $whiteLevel and $i <= $blackLevel {
$val: $val + .dC#{$i};
$i: $i + 1;
}
$val {
color: black;
}
是的,我知道它像罪一样丑陋,但我认为它符合我的要求。最终$ whiteLevel和$ blackLevel(或者我最终调用它们)将在_base.scss文件中,这样我就可以“动态地”更改不同级别和类别的数量。“
是否可以这样做,有人能指出我正确的方向吗?
提前致谢,期待听到任何建议!
编辑:为了澄清我可以使用以下代码来获得相同的结果:
$whiteLevel: 3;
.cW {
color: white;
}
.cB {
color: black;
}
@for $i from 1 through 5{
.dC#{$i} {
@if $i <= $whiteLevel {
@extend .cW;
} @else {
@extend .cB;
}
}
}
这会产生:
.cW, .dC1, .dC2, .dC3 {
color: white;
}
.cB, .dC4, .dC5 {
color: black;
}
这是99%的解决方案,但这意味着我必须已经构建了一个特定的类来容纳@extend。我的目标是使这个完全动态,并依赖于$ whiteLevel和$ blackLevel的值。如果我将它们设置为0,我想创建它,这样就不会创建任何类。
希望这有助于澄清一点。
修改编辑!
感谢cimmanon这里是我将使用的解决方案(基于提供的解决方案,必须爱%标志):
$whiteLevel: 3;
%cW {
color: white;
}
%cB {
color: black;
}
@for $i from 1 through 5{
.dC#{$i} {
@if $i <= $whiteLevel {
@extend %cW;
} @else {
@extend %cB;
}
}
}
非常感谢cimmanon!
答案 0 :(得分:15)
要正确地写出这个表达式是这样的:
$val: $val + '.dC#{$i}';
但是您忘记了逗号,因此您的选择器最终看起来像这样:
.dC4.dC5 {
color: black;
}
即使你确实添加了逗号,你也会得到以逗号开头的所有3个类。有更有效的方法来执行您正在寻找的正确说明逗号的内容:
$minLevel: 1;
$whiteLevel: 3;
$blackLevel: 5;
%white {
color: white;
}
@for $i from $minLevel through $whiteLevel {
.dC#{$i} {
@extend %white;
}
}
$blackSelectors: ();
@for $i from $whiteLevel + 1 through $blackLevel {
$blackSelectors: append($blackSelectors, unquote('.dC#{$i}'), comma);
}
#{$blackSelectors} {
color: black;
}
输出:
.dC1, .dC2, .dC3 {
color: white;
}
.dC4, .dC5 {
color: black;
}