我不太熟悉Less。在我的理解中,我认为Less可以将较少的格式文件转换为标准的css文件(如果我错了,请更正我)。现在我有一个问题在下面。
假设您将在单个CSS文件中生成100个CSS类,如下所示(从.span1到.span100)。我想知道是否能够生成像这样的CSS文件?
... .span5 { width: 5%; } .span4 { width: 4%; } .span3 { width: 3%; } .span2 { width: 2%; } .span1 { width: 1%; }
解决方法
如果您使用最新版本的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%; }
编辑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:integer,迭代次数。
> @ base-value(可选):integer,要分配给该属性的循环的起始值。默认值是为迭代次数分配的值@n。
> @unit(可选):string,属性的单位。默认值为px。
> @property(可选):非字符串或字符串CSS属性。默认值为width
> @selector(可选):转义字符串,用于循环的选择器。只要它作为转义的字符串传入,就可以是任何东西。
> @ step-size(可选):integer,循环递增的值。
笔记
注1:自定义选择器作为转义字符串传入。如果没有逃脱,就不会像预期的那样工作。
注2:通过明确使用参数名称来调用mixin。这有一些优点和缺点:
注3:单位以字符串形式传入。
优点
清楚的是什么参数被调用
>您不必依赖于参数的顺序,并记住哪个参数来自第一,第二,…
缺点
>我想看起来有点丑陋吗?>(添加到列表和/或更改实现,如果你知道更好的一个)