我想要实现的目标是简单地循环并根据变量的列数创建一个选择器。
$numberOfColumns: 16;
.gridContainer {
@for $i from 1 through $numberOfColumns {
.grid_#{$i} @if $i != $numberOfColumns {,}
{position:relative;}
}
}
这显然不起作用。
我正在尝试输出这样的内容:
.grid_1,.grid_2,.grid_3,.grid_4,.grid_5,.grid_6,.grid_7,.grid_8,.grid_9,.grid_10,.grid_11,.grid_12,.grid_13,.grid_14,.grid_15,.grid_16 {position:relative;}
任何帮助都会很棒。
答案 0 :(得分:4)
您只需使用join
创建一个包含所有逗号分隔类的变量,然后再使用它。方法如下:
$numberOfColumns: 16;
$classes: ();
@for $i from 1 through $numberOfColumns {
$classes: join($classes, unquote(".grid_#{$i} "), comma);
}
.gridContainer {
#{$classes} { position:relative; }
}
产生输出:
.gridContainer .grid_1, .gridContainer .grid_2, .gridContainer .grid_3, .gridContainer .grid_4, .gridContainer .grid_5, .gridContainer .grid_6, .gridContainer .grid_7, .gridContainer .grid_8, .gridContainer .grid_9, .gridContainer .grid_10, .gridContainer .grid_11, .gridContainer .grid_12, .gridContainer .grid_13, .gridContainer .grid_14, .gridContainer .grid_15, .gridContainer .grid_16 {
position:relative;
}
以下是对同一概念的更全面的解释:http://portfolio.miphe.com/showcase/sass-dry-selectors/
答案 1 :(得分:4)
这种情况通常要求使用占位符选择器:
有时你会为一个你只想要
@extend
的课程编写样式,而不想直接在你的HTML中使用。在编写Sass库时尤其如此,如果需要,可以为用户提供@extend
样式,如果不需要则忽略。[...]
占位符选择器看起来像是类和ID选择器,除了
#
或.
被%
替换。它们可以在类或id可以使用的任何地方使用,并且它们本身可以防止将规则集呈现给CSS。
使用占位符选择器,您可以在单个规则中收集所有网格列通用的所有属性:
%grid-column {
// common column properties...
}
然后使用@extend
指令将.grid-container .grid-i
选择器添加到占位符规则中:
$num-grid-cols: 2;
.grid-container {
@for $i from 1 through $num-grid-cols {
.grid-#{$i} {
@extend %grid-column;
// grid-$i specific properties...
}
}
}
生成的CSS将如下所示:
.grid-container .grid-1, .grid-container .grid-2 {
// common column properties...
}
.grid-container .grid-1 {
// grid-1 specific properties...
}
.grid-container .grid-2 {
// grid-2 specific properties...
}