2014-10-01 266 views
1

可以說我有n個div。通過base px * n第n個元素縮進每個第n個元素

<div class="indent">1</div> 
<div class="indent">2</div> 
<div class="indent">n</div> 

我要縮進的第一個10px的,另一本由10px的多個等..這怎麼能與CSS3(或更少)來完成?

.indent { 
    padding-left: 10px; 
} 

.indent :nth-of-type(2) { 
    padding-left: 20px; 
} 

.indent :nth-of-type(3) { 
    padding-left: 30px; 
} 

我想使上面的代碼爲1或兩個襯墊..

+1

你可以使用[循環在LESS](http://lesscss.org/features/#loops-feature),但會產生臃腫的CSS足夠的__great enough_ ... – FelipeAls 2014-10-01 17:19:07

+3

只是一個說明: '.indent:n-type-type(3){'將使它在'indent' div內查找子節點。僞選擇器必須放在一起:'.indent:n-type-type(3){' – LcSalazar 2014-10-01 17:19:24

+1

最簡單的就是讓這些元素的子元素不是兄弟元素,像這樣:http://jsfiddle.net/0ujbe572/ – 2014-10-01 17:19:58

回答

3

檢查this出來。

它描述瞭如何在Less中創建循環。

對於你的問題,這應該是訣竅,假設你知道你有多少個div。

.loop(@counter) when (@counter > 0) { 
    .loop((@counter - 1)); // next iteration 
    .indent :nth-of-type(@{counter}) { 
     padding-left: unit((10 * @counter), px); 
    } 
} .loop(3); 

這裏,這段代碼會產生3次迭代。 請注意,迭代是根據您要求的迭代次數1生成的。在此處,您將按照相反的順序提問。

+0

> in相反的順序。 - 實際上這個循環以正確的順序生成事物(因爲在當前迭代樣式之前調用下一個迭代,所以當循環展開時樣式被「打印出來」)。 – 2014-10-01 17:31:13

+0

還有'padding-left:unit((10 * @counter),px);'可以簡化爲'padding-left:(@counter * 10px);' – 2014-10-01 17:34:14

+0

非常感謝 – 2014-10-01 17:56:36