我可以将变量用于选择器吗?

时间:2012-10-05 09:56:31

标签: css variables sass css-selectors

我有这个变量:

$gutter: 10;

我想在像SCSS这样的选择器中使用它:

.grid+$gutter {
    background: red;
}

所以输出变为CSS:

.grid10 {
    background: red;
}

但这不起作用。有可能吗?

4 个答案:

答案 0 :(得分:98)

$gutter: 10;

.grid#{$gutter} {
    background: red;
}

如果在字符串中使用,例如在url中使用:

background: url('/ui/all/fonts/#{$filename}.woff')

答案 1 :(得分:38)

来自Sass Reference on "Interpolation"

  

您还可以使用#{}插值语法在选择器和属性名称中使用SassScript变量:

$gutter: 10;

.grid#{$gutter} {
    background: red;
}

此外,插值工作不需要@each指令,并且由于$gutter只包含一个值,因此不需要循环。

如果您有多个值来创建规则,则可以使用Sass list@each

$grid: 10, 40, 120, 240;

@each $i in $grid {
  .g#{$i}{
    width: #{$i}px;
  }
}

...生成以下输出:

.g10  { width: 10px; }
.g40  { width: 40px; }
.g120 { width: 120px; }
.g240 { width: 240px; }

Here are some more examples.

答案 2 :(得分:2)

这是解决方案

$gutter: 10;

@each $i in $gutter {
  .g#{$i}{
     background: red;
  }
}

答案 3 :(得分:0)

如果它是供应商前缀,那么在我的情况下,mixin无法编译。所以我用这个例子

@mixin range-thumb()
  -webkit-appearance: none;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
  margin-top: -14px; 
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;

input[type=range]
  &::-webkit-slider-thumb
    @include range-thumb()
  &::-moz-range-thumb
    @include range-thumb()
  &::-ms-thumb
    @include range-thumb()