2015-11-10 22 views
1

我有一个div的循环,我想要说24个div的顺序如下:如何将SASS换成第四个孩子的循环?

red> orange> yellow> green> green> yellow> orange> red ...并重复。

因此,基本上它可以在8种颜色中工作,而4种颜色可以反转颜色。在网上搜索后,我发现这个代码可以完成前半部分的工作,但是我很难理解我将如何反转序列。

我知道你可以写......

$colors: red, orange, yellow, green, green, yellow, orange, red; 

不过,我认为有可能是写它比更短的方式吗?

HTML:

<ul> 
    <li>a</li> 
    <li>b</li> 
    <li>c</li> 
    <li>d</li> 
    <li>e</li> 
    <li>f</li> 
    <li>g</li> 
    <li>h</li> 
</ul> 

SCSS:

$colors: red, orange, yellow, green; 

@for $i from 1 through length($colors) { 
    li:nth-child(#{length($colors)}n+#{$i}) { 
    background: lighten(nth($colors, $i), 20%); 
    } 
} 

继承人什么,我至今一demo,希望我想达到什么是有道理的,有人也许能解释我是如何走关于实现它?

在此先感谢!

回答

2

你会很乐意与这样的解决方案:

$colors: red, orange, yellow, green, green, yellow, orange, red; 

@for $i from 1 through length($colors) { 
    li:nth-child(#{length($colors)}n+#{$i}) { 
     background: lighten(nth($colors, $i), 20%); 
    } 
} 

fiddle

+0

谢谢您的回答,我已经想到这一点和作品,但我想也许有写它的一个更好的办法?较短的版本? – user2498890

+0

@ user2498890会很好,然后说,在原来的职位之前,人们浪费时间给你正确的答案,在错误的问题上...... –

+0

确定感谢您的建议,我会更新我的问题。 – user2498890

1

这样做是让你列表中的最短路径恰好包含您想通过循环的值。举个简单的例子,用手写出来是最简单的方法。如果它是一个很长的列表,那么滚动您自己的列表反向函数并加入列表可能更可取。

@function list-reverse($xs) { 
    $collector:(); 

    @for $i from length($xs) through 1 { 
     $collector: append($collector, nth($xs, $i)); 
    } 
    @return $collector; 
} 

$colors: red, orange, yellow, green; 
$color-list: join($colors, list-reverse($colors)); 

@for $i from 1 through length($color-list) { 
    li:nth-child(#{length($color-list)}n+#{$i}) { 
    background: lighten(nth($color-list, $i), 20%); 
    } 
} 
+0

你好,谢谢你的回答,所以只是为了确认你是否说在我的情况下,最好只是将颜色反向写入,就像我在我的问题中所述的一样,或者您是否说过您建议的代码更好?我试着实现你的代码,但似乎无法让它工作。不知道我哪里错了。 – user2498890

+0

“更好”在这里是主观的。避免重复有时可能会迫使你编写更多的代码。演示:http://sassmeister.com/gist/942c43ce50daedf34000 – cimmanon

1

或者使用条件:

$colors: red, orange, yellow, green; 
$n : 0; 
@for $i from 1 through 2*length($colors) { 
    @if $i > length($colors) { 
    $n : $n - 1; 
    } @else { 
    $n : $i; 
    } 
    @if $i == length($colors)+1 { $n : $n+1;} 

    li:nth-child(#{length($colors)}n+#{$i}) { 
    background: lighten(nth($colors, $n), 20%); 
    } 
} 
+0

感谢您的回答,这已完美运作。作为SASS条件的新手,你会介意评论以帮助我完全理解代码的作用吗? – user2498890

+0

另外我把它放在这jsfiddle来测试它的工作 - http://jsfiddle.net/b1sLdmnj/1/ – user2498890

+0

好吧,我只是注意到它的作品的第8个,但然后不继续序列此后任何想法,为什么这可能是? – user2498890