【问题标题】:less css avoid globalized variableless css 避免全局变量
【发布时间】:2019-02-21 15:37:59
【问题描述】:

我正在寻找避免全局扩散变量的最佳方法。

我用这个配置做了一个测试:

_import.less

@test: #FFF;

_import2.less

@test: #000;

test.less

@import (reference) "_import";

body {
    background: @test;
}

test2.less

@import (reference) "_import2";

div {
    background: @test;
}

index.less

@import "test";
@import "test2";

lessc index.less test.css 的输出看起来仍然像

body {
  background: #000;
}
div {
  background: #000;
}

但我正在寻找的是:

body {
  background: #FFF;
}
div {
  background: #000;
}

使用 less 2.7 或 3.9 会产生相同的行为。
有人知道解决方案吗?
谢谢

【问题讨论】:

  • 这是设计使然:两次定义变量时,使用最后一次定义的变量,从当前范围向上搜索。 ref 如果要避免它,使用不同的变量,或动态导入文件(基于条件)

标签: css less


【解决方案1】:

您始终可以使用“未命名的命名空间”,即& {},块来隔离任何内容(包括导入的文件)的范围。

例如:

test.less

@import "_import";

body {
    background: @test;
}

test2.less

@import "_import2";

div {
    background: @test;
}

index.less

& {@import "test";}
& {@import "test2";}

根据您的目标,这些 & {} 块可以直接移动到 test 文件本身中。

---

参考:Local Variable Scoping in Import Files

【讨论】:

  • 这很有趣。不知道这件事。什么是使用它的充分理由的例子?我发现 OP 甚至都不会受益,因为如果您要扩大范围,为什么还要导入它?
  • @soulshined 我猜一个典型的用例是将不相关的库/组件(使用相同的变量名)合并为一个。和/或类似this.
  • 谢谢,太棒了。 Doc应该改进,因为没有办法很容易找到
猜你喜欢
  • 2012-12-19
  • 2012-02-25
  • 1970-01-01
  • 2016-03-19
  • 2012-02-02
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多