2015-11-10 23 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