我不熟悉Less
。根据我的理解,我认为Less
可以将less
格式文件转换为标准css
文件(如果我错了,请纠正我)。现在我有一个问题。
假设您在单个CSS文件中生成100个CSS类,如下所示(从.span1
到.span100
)。我想知道less
是否可以生成类似的CSS文件?
...
.span5 {
width: 5%;
}
.span4 {
width: 4%;
}
.span3 {
width: 3%;
}
.span2 {
width: 2%;
}
.span1 {
width: 1%;
}
答案 0 :(得分:44)
如果您使用的是最新版本的LESS,请尝试此操作:
@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上试用。
.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 (可选): integer ,要分配给属性的循环的起始值。默认值与为迭代次数@n
指定的值相同。
@unit (可选): string ,属性的单位。默认值为px
。
@property (可选):非字符串或字符串 CSS属性。默认值为width
@selector (可选):转义字符串,用于循环的选择器。只要它作为转义字符串传入,就可以是任何东西。
@ step-size (可选):整数,循环递增的值。
注1:自定义选择器作为转义字符串传入。如果它没有被转义,它将无法按预期工作。
注2:通过显式使用参数名调用mixin。这有一些优点和缺点:
注3:单位作为字符串传入。
<强>优点强>
<强>缺点强>
答案 1 :(得分:20)
所有,我找到了一种在循环中输出css的方法。请仔细阅读。谢谢。
@iterations: 100;
// helper class, will never show up in resulting css
// will be called as long the index is above 0
.loopingClass (@index) when (@index > 0) {
// create the actual css selector, example will result in
// .myclass_30, .myclass_28, .... , .myclass_1
(~".span@{index}") {
// your resulting css
width: percentage((@index - 1) *0.01);
}
// next iteration
.loopingClass(@index - 1);
}
// end the loop when index is 0
.loopingClass (0) {}
// "call" the loopingClass the first time with highest value
.loopingClass (@iterations);
答案 2 :(得分:3)
请注意,自3.7版起,Less具有each()函数,可以轻松与range()
函数结合使用以生成所需的代码-像这样:
each(range(100),{
.span@{value} { width: @value * 1%; }
});
答案 3 :(得分:2)
在给定的方法中不可能做到。
但可能是这样的:
.loopingClass (@index) when (@index > 0){
.span_@{index}{
width: @index px;
}
.loopingClass(@index - 1);
}
.loopingClass(5);
Resilt将是这样的:
.span_100 {
width: 100 px;
}
.span_99 {
width: 99 px;
}
.span_98 {
width: 98 px;
}
.span_97 {
width: 97 px;
}
.span_96 {
width: 96 px;
}
.span_95 {
width: 95 px;
}
and e.t.c.