新答案:使用 Guard Expression Check 扩展你的 Mixin
所以据我了解,您希望命名空间能够用作默认值,但根本不进入全局范围。我认为你需要像这样扩展你的 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 本身
如果将变量捆绑到 mixin 本身,则可以访问它。所以...
#namespace {
.getNsColor() {@nsColor: #333;}
}
.testMixin1(@mixinColor) {
background-color: @mixinColor;
}
然后要么包括它...
一:全球
#namespace > .getNsColor;
.selector {
.testMixin1(@nsColor);
}
或两个:本地
.selector {
#namespace > .getNsColor;
.testMixin1(@nsColor);
}
两者都会输出...
.selector {
background-color: #333333;
}