试试这个:
@iterations: 5;
.span-loop (@i) when (@i > 0) {
.span-@{i} {
width: ~"@{i}%";
}
.span-loop(@i - 1);
}
.span-loop (@iterations);
输出:
.span-5 {
width: 5%;
}
.span-4 {
width: 4%;
}
.span-3 {
width: 3%;
}
.span-2 {
width: 2%;
}
.span-1 {
width: 1%;
}
你可以在less2css上试试。
编辑 2014 年 4 月 3 日
这是一个更灵活的版本,具有更多选项:
.custom-loop( @base-value:@n ; @n ; @unit : px; @j : 1 ;@_s:0 ; @step-size:1 ; @selector:~".span-"; @property : width)
when not(@n=0) {
@size : @base-value+@_s;
@{selector}@{j}{
@{property} : ~"@{size}@{unit}";
}
.custom-loop(@base-value , (@n - 1), @unit , (@j + 1) , (@_s+@step-size) , @step-size, @selector, @property);
}
您只能通过@n
which 是必需的参数来调用它:
.custom-loop(@n:3);
这将输出:
.span-1 {
width: 3px;
}
.span-2 {
width: 4px;
}
.span-3 {
width: 5px;
}
但是,如果您想控制每个参数,这里是一个使用所有自定义参数的示例:
.custom-loop( @n: 3 , @base-value:1, @unit: '%', @property:font-size, @selector: ~".fs-", @step-size: 2);
这将输出:
.fs-1 {
font-size: 1%;
}
.fs-2 {
font-size: 3%;
}
.fs-3 {
font-size: 5%;
}
参数说明
@n:整数,迭代次数。
@base-value(可选):整数,要分配给属性的循环的起始值。默认值与分配给迭代次数的值相同@n
。
@unit (可选): string , 属性的单位。默认值为px
。
@property(可选):非字符串或字符串CSS 属性。默认值为width
@selector(可选):转义字符串,用于循环的选择器。可以是任何东西,只要它作为转义字符串传入即可。
@step-size(可选):整数,循环递增的值。
笔记
注 1:自定义选择器作为转义字符串传入。如果它没有被转义,它就不会按预期工作。
注意 2: mixin 是通过显式使用参数名称来调用的。这有一些优点和缺点:
注 3:单位作为字符串传入。
好处
- 调用什么参数一目了然
- 您不必依赖参数的顺序并记住哪个参数先出现,第二个,......</li>
缺点
- 我想它看起来有点丑?
- (如果您知道更好的实现,请添加到列表和/或更改实现)