如何在LESS css中增加变量?
这是一个例子..
@counter: 1;
.someSelector("nameOfClass", @counter);
@counter: @counter + 1;
.someSelector("nameOfClass", @counter);
Run Code Online (Sandbox Code Playgroud)
上面的代码片段会导致此"语法错误"
SyntaxError: Recursive variable definition for @counter
Run Code Online (Sandbox Code Playgroud)
是否有解决此错误的方法?例如,有一个像@ counter ++这样的符号吗?
谢谢..
请参阅有关LESS变量的文档.从本质上讲,LESS变量是其创建范围内的常量.它们是懒惰的,并且不能以这种方式"改变".最后一个定义将是该范围内所有人使用的定义.在您的情况下,将发生错误,因为变量不能引用自己.
考虑这个例子:
@counter: 1;
.someSelector("nameOfClass", @counter);
@counter: 2;
.someSelector("nameOfClass1", @counter);
.someSelector(@name; @count) {
@className: ~"@{name}";
.@{className} {
test: @count;
}
}
Run Code Online (Sandbox Code Playgroud)
输出将2适用于:
.nameOfClass {
test: 2;
}
.nameOfClass1 {
test: 2;
}
Run Code Online (Sandbox Code Playgroud)
这是因为LESS定义了@counter该范围内变量的最后一个定义.它没有注意使用调用的顺序@counter,而是像CSS一样行动并考虑变量的"级联".
有关在LESS中进一步讨论的内容,您可以跟踪在此LESS功能请求中发生的讨论.
Seven-phase-max 与他认为是LESS中的一个bug有关,但我认为不是.相反,在我看来,创造性地使用递归重置计数器来获得所需的效果.这允许您实现您想要的(使用我的示例代码):
// counter
.init() {
.inc-impl(1); // set initial value
} .init();
.inc-impl(@new) {
.redefine() {
@counter: @new;
}
}
.someSelector(@name) {
.redefine(); // this sets the value of counter for this call only
.inc-impl((@counter + 1)); // this sets the value of counter for the next call
@className: ~"@{name}";
.@{className} {
test: @counter;
}
}
.someSelector("nameOfClass");
.someSelector("nameOfClass1");
Run Code Online (Sandbox Code Playgroud)
这是CSS输出:
.nameOfClass {
test: 1;
}
.nameOfClass1 {
test: 2;
}
Run Code Online (Sandbox Code Playgroud)
注意:我相信您并未严格更改全局值,而是在每次调用时设置新的本地值.someSelector.这是否基于有缺陷的行为是值得怀疑的,但如果是这样,这个解决方案将来可能会消失.有关此方法的局限性的进一步评论,请参阅此处的讨论.