萨斯:改变色彩搭配@for环(Sass: Change color with @for loop)

2019-09-03 14:15发布

我尝试变暗可变数量的像的div 用下面的代码:

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

与该代码我期待,预期变量$颜色改变与每次迭代但这并没有工作。 该值拳头初始化后修复环节都具有相同的颜色。

有没有一种方法来workarround这个问题或有另一种方式解决与混合这个问题?

Answer 1:

你可以在里面@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>

演示

见演示



Answer 2:

我创建了一个基于你的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; }


Answer 3:

只是从一种颜色到另一种,对于比如说,大量的连续<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来完成,但没有要!


文章来源: Sass: Change color with @for loop