【问题标题】:Override LESS variables覆盖 LESS 变量
【发布时间】:2025-12-05 12:05:01
【问题描述】:

我有以下堆栈:

  1. Symfony2
  2. 安装了 lessphp 过滤器的 Twig。
  3. Twitter Boostrap

在 base.css 我有:

// base.less
@import '/path/to/bootstrap.less'
@linkColor: 13px;

变量名根本不重要。它可以是引导程序中使用的任何其他变量。它只是不会被覆盖。但是,如果我将变量放入单独的 .less 文件中并将其导入 base.less ,一切都会按预期工作:

// base.less
@import '/path/to/bootstrap.less'
@import '/path/to/variables.less'

// variables.less
@linkColor: 13px;

为什么这个有效而另一个无效?查找文档(less/lessphp),但找不到与此相关的任何内容。 (或者我不知道去哪里找)。

有人能解释一下为什么会这样吗?

【问题讨论】:

    标签: symfony twitter-bootstrap less lessphp


    【解决方案1】:

    看起来这是 lessphp 编译器中的错误。看看github issue。您的解决方法是将变量声明放入另一个文件并导入它就可以了。顺便谢谢 ;)

    【讨论】:

    • 谢谢!无论如何都不要使用它。太坑爹了!使用 nodejs 模块。
    【解决方案2】:

    发生这种情况是因为您在 用于定义所有 Bootstrap 样式之后覆盖了变量。

    我是这样解决这个问题的:

    1. 创建我自己的main.less,导入我自己的bootstrap.less
    2. 我自己的 bootstrap.less 只是将 Bootstrap 的 bootstrap.less 文件复制到我自己的文件夹中,并相应更改了导入路径,但有一个例外:它由自己的 variables.less 导入,而不是 Bootstrap 的。
    3. 我自己的 variables.less 导入 Bootstrap 的 variables.less,然后覆盖我需要的那些。

    【讨论】:

    • 感谢埃尔努尔!但我也解决了这个问题。我的问题是为什么会发生这种情况而不是如何解决它。已经知道了!您的解决方案似乎过于复杂,不推荐。似乎所有 @import 都被处理到它们自己的上下文中,而 base.less 将它们导入到不同的上下文中。否则我无法解释。
    • 你没有回答我的问题。您提供了一个不是我想要的替代方案。我已经有了解决问题的方法。即便如此,从我的角度来看,不推荐您的解决方案。真的......不要认为这是扩展引导程序的正确方法......仅仅因为你是唯一发布的人并不意味着我会接受你的答案,这实际上不是我的问题的答案。我再次询问是否有人可以解释为什么覆盖在这种情况下不起作用,而不是如何使它起作用。已经知道了!时期!感谢您的宝贵时间!
    • 这就是我写«或提供您自己的答案并接受它»的原因。 ;)