通过base px * n第n个元素缩进每个第n个元素

问题描述:

可以说我有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

检查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