更新,2022年3月28日:
需要使用Less v3.9.0
each(range(1%, 100%, 1), {
.span-@{index} {
width: @value;
}
});
输出
.span-1 {
width: 1%;
}
.span-2 {
width: 2%;
}
.span-3 {
width: 3%;
}
.
.
.
.span-98 {
width: 98%;
}
.span-99 {
width: 99%;
}
.span-100 {
width: 100%;
}
引用文档:
docs:
使用range
和each
创建一个for
循环
需要Less v3.9.0
你可以通过生成数字列表并使用each
将其扩展到规则集来模拟for
循环。
注意事项:
range(1%, 100%, 1)
:从1%到100%创建一个步长为1的列表,即:
1% 2% 3% ... 100%
each(list, rules)
:将规则集的计算绑定到列表的每个成员上。
@value
:列表中的每个值,即1%
,2%
,...
@index
:每个值的索引,从1开始(数值位置,从1开始)
原始答案:
尝试这个:
@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
来调用此函数:
.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(可选): 字符串,属性的单位。默认值为px
。
@property(可选): 非字符串或字符串,CSS属性。默认值为width
@selector(可选): 转义字符串,用于循环的选择器。只要传递为转义字符串即可使用任何内容。
@step-size(可选): 整数,循环递增的值。
注意事项
Note 1: 自定义选择器作为一个转义字符串传递。如果未经转义,则不会按预期工作。
Note 2: 调用mixin时需要显式使用参数名称。这有一些优点和缺点:
Note 3: 单位以字符串形式传递。
优点
- 清楚指定了调用的参数
- 您不必依赖参数的顺序,并记住哪个参数是第一个,第二个...
缺点
- 可能看起来有点丑?
- (如果您知道更好的方法,请增加到该列表并/或更改实现)