覆盖 LESS 变量是一种不好的做法吗?

41
我目前在一个项目中使用Twitter Bootstrap,包括LESS文件,并编译了一些我们编写的额外LESS代码。
最新版本意味着我们需要覆盖一些Bootstrap LESS变量。其中一个选项是维护修改后的Bootstrap副本,并在每个版本发布时打补丁。
但我注意到可以通过在导入语句之后重新声明变量来覆盖定义在@import LESS文件中的变量。

E.g.:

@import "twitter-bootstrap/bootstrap.less";
// Restore base font size to pre 2.1.1 defaults
@baseFontSize:          13px;
// Add some custom LESS code here

这是一个不好的做法吗?这是 LESS 编译器工作方式的产物,还是其意图之一?我没有找到太多关于此的信息,但我找到了以下两个参考:

由于 Less 编译器中的一个 bug,您可以通过在初始声明后更改变量来覆盖“常量”值。

http://rubysource.com/how-to-customize-twitter-bootstrap%E2%80%99s-design-in-a-rails-app

在 grid.less 导入被声明之后,通过覆盖这三个变量(列和间距)进行自定义。

http://semantic.gs/

LESS 网站本身表示变量是“常量”:

http://lesscss.org/

请注意,LESS中的变量实际上是“常量”,因为它们只能定义一次。
但是我看到其他网站也使用了这种方法。这肯定比维护供应商分支更容易,并且似乎与less.js很好地配合使用。
希望您能提出任何关于是否这样做是不好的想法!

1
这里有一些问题单:https://github.com/cloudhead/less.js/issues/297 和 https://github.com/cloudhead/less.js/issues/905。 - Christoph Leiter
谢谢,应该去那里看看 - 很有用。虽然我的问题仍然存在,因为这些问题都没有解决方案。 - sync
2个回答

46

好的!上述问题之一引发了有关预期行为的讨论,结果发现覆盖LESS变量是可行的。

在CSS中,声明在同一作用域内会相互覆盖;同样适用于LESS。

https://github.com/cloudhead/less.js/issues/297

与CSS类似,在同一作用域内进行覆盖是使用LESS的一种预期方式。


6

没问题!

我通常会创建一个包含“组件”和默认值变量的less文件。然后导入一个带有相同变量但是覆盖默认值的“客户端”值的文件。这样,我只需要更改一些变量值就可以为每个客户端创建新的设计。

这样做很好很有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接