在LESS CSS中,是否可以在调用另一个mixin时使用命名空间变量?

时间:2012-10-28 05:55:58

标签: css namespaces less mixins

在LESS CSS中,是否可以在调用另一个mixin时使用命名空间变量,或者在另一个mixin中使用默认值?使用正常的语法,它似乎没有,但有一个转义序列或其他语法,我可以用来实现我正在寻找的效果?

我正在考虑这样的代码:

#namespace {
    @nsColor: #333;
}

.testMixin1(@mixinColor) {
    background-color: @mixinColor;
}

.selector { .testMixin1(#namespace > @nsColor); } 

或者......

.testMixin2(@anotherMixinColor: #myNamespace > @myColor) {
    background-color: @anotherMixinColor;
}

如果没有,这严重限制了名称空间的效用。这就像能够将变量放在对象范围中,但只能将全局范围中的变量作为参数传递给函数。基本上,这似乎消除了名称空间的90%的效用。

1 个答案:

答案 0 :(得分:7)

新答案:使用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;
}