在LESS CSS中,是否可以在调用另一个mixin时使用命名空间变量,或者在另一个mixin中使用默认值?使用正常的语法,它似乎没有,但有一个转义序列或其他语法,我可以用来实现我正在寻找的效果?
我正在考虑这样的代码:
#namespace {
@nsColor: #333;
}
.testMixin1(@mixinColor) {
background-color: @mixinColor;
}
.selector { .testMixin1(#namespace > @nsColor); }
或者......
.testMixin2(@anotherMixinColor: #myNamespace > @myColor) {
background-color: @anotherMixinColor;
}
如果没有,这严重限制了名称空间的效用。这就像能够将变量放在对象范围中,但只能将全局范围中的变量作为参数传递给函数。基本上,这似乎消除了名称空间的90%的效用。
答案 0 :(得分:7)
据我了解,您希望命名空间能够用作默认值,但不能将其用于所有的全局范围。我认为你需要扩展你的mixin定义:
#namespace {
@nsColor: #333;
}
.testMixin1(@mixinColor: 'null') {
.mixin (@a) when (iscolor(@a)) {
background-color: @a;
}
.mixin (@a) when not (iscolor(@a)) {
#namespace;
background-color: @nsColor;
}
.mixin (@mixinColor);
}
然后在没有或带有值的情况下打电话:
.testMixin1();
.testMixin1(red);
输出(根据您是否设置值):
background-color: #333333;
background-color: #ff0000;
或强> 的
您仍然可以像我最初提到的那样在命名空间中使用“getter”mixin,如下所示:
#namespace {
.getNsColor(){@nsColor: #333;} <-- changed here
}
.testMixin1(@mixinColor: 'null') {
.mixin (@a) when (iscolor(@a)) {
background-color: @a;
}
.mixin (@a) when not (iscolor(@a)) {
#namespace > .getNsColor(); <-- changed here
background-color: @nsColor;
}
.mixin (@mixinColor);
}
如果将变量捆绑到mixin本身,则可以访问它。所以......
#namespace {
.getNsColor() {@nsColor: #333;}
}
.testMixin1(@mixinColor) {
background-color: @mixinColor;
}
然后包含它......
一: 全球
#namespace > .getNsColor;
.selector {
.testMixin1(@nsColor);
}
或两个: 本地
.selector {
#namespace > .getNsColor;
.testMixin1(@nsColor);
}
两者都会输出......
.selector {
background-color: #333333;
}