减少变量范围/上下文

时间:2012-08-07 12:40:42

标签: css css3 less

我的代码更少:

body {
  @var: white;

  &.blue { @var: blue; }
  &.red { @var: red; }
  &.abc { @var: #badass; }

  background-color: @var;
}

我希望,如果body具有类.abc,则变量@var的值为#badass,如果您有类.blue值为blue,依此类推。但事实并非如此,变量的值不会独立于其遗留类而改变。

1 个答案:

答案 0 :(得分:2)

您需要为此创建参数化mixin:

.bg(@color){
  background-color:@color;
}

然后以下代码将起作用:

body {
  .bg("white");

  &.blue{ .bg("blue");  }
  &.red { .bg("red");   }
  &.abc { .bg(#bada55); }

}

你正在做的事情不起作用,因为你正在重新分配变量 - 它完美地工作,但不是将新值写入类。 (每当你重新分配变量时,LESS创建新规则绝对没有意义。)此外,与任何其他编程语言一样,LESS具有范围,因此当它达到background-color: @var; {{1}时已为其分配值@var并相应地创建规则。以下内容可行(但当然没有意义):

white