Sass:用@for循环改变颜色

时间:2013-05-16 08:06:04

标签: css for-loop sass

我尝试将可变数量的div变暗,例如enter image description here 使用以下代码:

@mixin color-divs ($count, $baseName, $startcolor) {
    $color:  $startcolor;
    @for $i from 0 through $count {
        $color: darken($color, 9%);
        ##{$baseName}_#{$i} { background-color:$color; }
    }
}

使用我期望的代码,变量$ color会随着每次迭代而改变,但是这并没有按预期工作。在第一次初始化后,该值将被修复,并且每个元素都具有相同的颜色。

有没有办法解决这个问题,还是有另一种方法可以解决混合问题?

3 个答案:

答案 0 :(得分:8)

你可以在@for中使用$ i使颜色变暗,并将相应的类应用于div。希望这会有所帮助。

<强> SCSS

@mixin color-divs ($count, $baseName, $startcolor) {
    @for $i from 0 through $count {
        $background-color: darken($startcolor, $i * $i); 
    .colored-div#{$i} {
      background: $background-color;
      height:100px;
      width:200px;
      float: left;
      margin-right: 5px;
    }
   }

}
 @include color-divs(5,'a',#ffd8b1);

<强> HTML

<div class="colored-div1">a</div>
<div class="colored-div2">b</div>
<div class="colored-div3">c</div>
<div class="colored-div4">d</div>
<div class="colored-div5">e</div>

<强>演示

请参阅demo

答案 1 :(得分:3)

我根据你的mixin创建了这个例子:

@mixin color-divs ($count, $baseName, $startcolor) {
    $loop_color: $startcolor;
    @for $i from 0 through $count {
        $loop_color: darken($loop_color, 9%);
        .#{$baseName}-#{$i} { background-color: $loop_color; }
    }
}

div {
    width: 100px;
    height: 100px;
    float: left;
}

@include color-divs(6,'div',#faa)

与以下标记一起使用:

<div class="div-1"></div>
<div class="div-2"></div>
<div class="div-3"></div>
<div class="div-4"></div>
<div class="div-5"></div>
<div class="div-6"></div>

输出:http://jsfiddle.net/jdtvF/

http://uk.omg.li/P0dF/by%20default%202013-05-16%20at%2010.10.43.png

div {
  width: 100px;
  height: 100px;
  float: left; }

.div-0 {
  background-color: #ff7c7c; }

.div-1 {
  background-color: #ff4e4e; }

.div-2 {
  background-color: #ff2020; }

.div-3 {
  background-color: #f10000; }

.div-4 {
  background-color: #c30000; }

.div-5 {
  background-color: #960000; }

.div-6 {
  background-color: #680000; }

答案 2 :(得分:0)

要从一种颜色变为另一种颜色,例如连续多个<div>

    @for $i from 0 through 11
        &:nth-child(#{$i})
            transform: rotate(#{30*$i}deg)
            background-color: mix($gray1, $gray2, $i / 12 * 100% )

注释

  • 请注意,#{…}内不需要任何mix(),因为它是一个sass函数,因此很明显,内部使用的所有变量和计算都必须在将其转换为CSS之前进行解析。 。
  • 转换只是我的用例(用于演示)。在这里,确实需要#{…}
  • 并注意+/-1 issue(就像每个for循环中的任何语言一样):从0/12到11/12
  • 最后,将其转换为百分比以取悦混音功能
  • 如您所见:可以在mixin中完成,但不必这样做!