5

我想要实现的是简单地循环并根据变量的列数创建一个选择器。

$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;}

任何帮助都会很棒。

4

2 回答 2

5

您可以简单地使用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/

于 2013-06-26T23:25:20.250 回答
4

这种情况通常需要使用占位符选择器

@extend有时你会为一个你只想要并且不想直接在 HTML 中使用的类编写样式。在编写 Sass 库时尤其如此,您可以在用户@extend需要时为他们提供样式,如果不需要则忽略。

[...]

占位符选择器看起来像 class 和 id 选择器,除了#or.被替换为%. 它们可以在类或 id 可以使用的任何地方使用,并且它们本身可以防止规则集被呈现给 CSS。

占位符@sass-lang.com


使用占位符选择器,您可以在单个规则中收集所有网格列共有的所有属性:

%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... 
}
于 2013-06-27T00:01:09.617 回答