2015-05-28 74 views
2

所以基本上我有一個顏色列表,我想要改變html中列表的邊框顏色,這取決於它在DOM中的深度。以編程方式嵌套sass的規則

這是我此刻的SASS:

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


.list { 
    border-color:nth($C-subList-borders,1); 
    .list { 
     border-color:nth($C-subList-borders,2); 
     .list { 
      border-color:nth($C-subList-borders,3); 
      .list { 
       border-color:nth($C-subList-borders,4); 
      } 
     } 
    } 
} 

產生這個CSS:

.list { border-color: green; } 
.list .list { border-color: red; } 
.list .list .list { border-color: blue; } 
.list .list .list .list { border-color: orange; } 

我想要做的是能夠做的是基於該.LIST規則關於我在$ colors變量中的顏色數量,而不是手動完成。我無法弄清楚如何。

我知道它將有一個@each或@for循環,但我無法弄清楚它的工作原理。我不確定這是否可能。

----- UPDATE:我自己的答案-----

由於這個問題被標記爲重複我不能張貼此作爲一個實際的答案,所以這將不得不做。感謝Hobbes隱藏你的答案。這給了我一個語法應該如何工作的想法。你在你的答案有一個多餘的@each雖然所以我寫了這個,而不是(雖然我會接受你的,因爲你的回答給了我靈感)

$colors: green red blue orange; 

$class: '.list'; 
$selector: $class; 

@for $i from 1 through length($colors) { 
    $color: nth($colors,$i); 
    #{$selector} { 
     border-color: $color; 
    } 
    $selector: $selector $class; 
} 
+0

並不完全相信,這是一個重複的。儘管到目前爲止,這兩個問題在循環和嵌套列表方面有相似之處,但我認爲使用'$ colours'變量作爲循環的源代碼使得這個問題有所不同,不能被認爲是重複的。例如,我的回答在相關問題中將不相關。 –

+0

事實上,你使用的顏色,而不是利潤率是沒有足夠的理由,這是「不是重複」。你如何得到步驟的數量是不相關的:還有很多其他問題涉及如何循環列表項目。 – cimmanon

+0

也有關:http://stackoverflow.com/questions/15469974/cycling-through-a-list-of-colors-with-sass – cimmanon

回答

1

以下SASS代碼應該讓你的結果你後。 @each語句將遍歷每種顏色。 @for循環基於列表中顏色的索引,並將正確數量的.list附加到選擇器。

$colors: green red blue orange; 

@each $color in $colors { 
    $i: index($colors, $color); 
    @for $c from 1 through $i { 
     @if $c == 1 { 
      $selector: '.list'; 
     } @else { 
      $selector: $selector '.list'; 
     } 
    } 
    #{$selector} { 
     border-color: #{$color}; 
    } 
} 

SASS梅斯特:http://sassmeister.com/gist/106687cca4d2a8ce5fc4

+0

很高興我能幫上忙。你的回答肯定比我的建議更好看! –