有条件地封装规则

时间:2015-08-25 19:59:12

标签: less

我们说我有以下内容:

@import 'hello.less'

基于变量值,我想将其嵌套在另一个类中。以下是我想要完成的事情,在伪代码

if(@someVar = true):
  .someClass {
    @import 'hello.less'
  }
else:
  @import 'hello.less'

我想我可以使用mixin警卫,但我不知道如何处理“其他”事件。情况下:

.someClass when (@someVar = true) {
  @import 'hello.less'
}

// Else?

2 个答案:

答案 0 :(得分:3)

使用not&&如果其父级是全局范围(e.g.),则展开为空:

@some-var: true;

.some-class when (@some-var) {
    @import (multiple) "hello";
}

& when not(@some-var) {
    @import (multiple) "hello";
}

请注意,在这种情况下需要multiple导入选项,因为始终会评估两个导入,并且仅在内容出现在输出中时,警卫才会控制。

<强> ---

虽然总的来说我想知道为什么你需要在同一个文件中保存不同项目的代码,并通过变量间接控制它的编译。相反,我建议只创建“命名空间的hello”文件:

.some-class {@import "hello";}

并在您想要的项目中无条件地导入它。

答案 1 :(得分:1)

我目前的解决方案如下:

@someVar: true;

.someClass when (@someVar = true) {
  .main(false);
}

.main(@someVar);

.main(@x) when not (@x) {
  @import 'hello.less'
}

除非有人有更好的答案,否则我会将此标记为答案。