即使导入了“variables.less”,variables名称错误“未定义”

我今天开始使用LESS。 但有点奇怪 此代码不起作用。 我收到一个错误:

! Variable Name Error: @linkColor in a is undefined. 

我的引导:

 @import "variables.less"; @import "normalize.less"; 

variables.less:

 @linkColor: #08c; @linkColorHover: darken(@linkColor, 15%); 

normalize.less:

 a { color: @linkColor; } a:visited { color: @linkColor; } a:hover { color: @linkColorHover; } 

当我做一个

@import“variables.less”

在normalize.less文件中,一切工作正常。

谢谢你的帮助 :)

这个其他的问题最终导致了我的正确答案。

如果文件使用BOM进行编码,那么LESS编译器看起来就会失败。 (对于那些不熟悉该术语的用户,这是一个字节顺序标记 )。这是某些编辑器(如Visual Studio)中的默认设置。

如果编译器在你的根文件中,编译器会在BOM中发现一个错误,但是对于@ import-ed文件来说似乎是无声的失败。

尝试将文件保存为没有BOM的UTF-8,并查看是否解决了您的问题。

可能有另一个可能的根本原因。

这是我的原始Gruntfile.js:

 less: { compile: { files: { 'css/less.css': 'less/**/*.less' } } }, 

通配符使LESS编译器编译该文件夹下的所有无文件,并将所有结果合并到一个CSS中。 我得到的错误运行grunt less:compile

NameError:.transition在第38行第3列的less / core / html.less中未定义

一旦我将'less/**/*.less' 'less/css.less'更改为'less/css.less' ,编译成功。

我遇到了使用Winless编译器的同样的问题。

一些我inputmaster.less的.less文件是空的。 当我从导入的文件列表中删除这些我的variables被识别!

此错误也可能通过导入文件中的错误导入而发生。

我也遇到过这个问题,当使用多层导入时,Node.js中的'lessc'编译器:

  • 原始文件导入一个文件(我们将称之为“孩子”)
  • 子文件导入了一个文件(我们称之为“孙子”)
  • 孙子是import的

我试图编译原始文件,并收到相同的“未定义variables”的行为。 我可以看到variables是在子中定义的,而且语法看起来很正确。

没有事先显示的错误。

问题结果是孩子没有正确地import孙子。 也就是说,

 @import grandchild.less 

而不是:

 @import "grandchild.less"; 

修复导入孙子的孩子使原来的孩子看到定义的variables。

这看起来像是一个小问题 – 也就是说,坏的input应该显示在“lessc”输出中,所以有一天它可能会被修复。 在此之前,我希望这有助于。

为了帮助其他可能遇到的问题,不想从多个导入生成重复的CSS,您有两个select。

  1. 要么@导入 – 一旦您需要在每个文件中使用它们所需的variables/混入文件。

    使用@import-once "filename.less"; 以防止重复。

  2. 当它到达时升级到LESS> 1.4.0; 从较less的网站:

    "The statement @import acts differently before and after 1.4.0. It acts as @import-multiple in all older versions and as @import-once in all less.js versions after 1.4.0."

你也可以得到这个错误,如果你试图导入文件两次(不是一个好主意),并且第一次导入是在你的.less文件中引用的variables被加载之前

注意:我正在使用django压缩

在index.html我有:

 {% compress css %} <link href="{{ STATIC_URL }}less/timepicker.less" rel="stylesheet" type="text/less"> <link href="{{ STATIC_URL }}less/style.less" rel="stylesheet" type="text/less"> {% endcompress %} 

然后在style.less我有

 ... @import "timepick.less"; 

我想这是因为你正在编译的主文件较less。 同样

如果你有Less / Project_name / project.less,并且在这个project.less中,你可以导入variablesless和目录中的所有其他文件。

你只需要编译project.less到你的css中,而不是所有less的文件。 如果你一次尝试编译project.less和variables.less,你将会遇到这个错误。 你可以避免多余的声明导入variablesless的文件

我将使用normalize.less中的嵌套规则:

 a { color: @linkColor; &:visited {color: @linkColor;} &:hover {color: @linkColorHover;} } 

而在@import中,你不需要使用“.less”,它是可选的:

 @import "variables"; @import "normalize"; 

我不知道这是否可以帮助…

另外一个奇怪的具体情况就是这种情况:如果你使用.NET并且是无点的,那么编译器会用variables说明符来阻塞嵌套的媒体查询。 如果你有这样的代码:

 @media (min-width: @aVariable) { .some-class{ margin: 10px; @media (min-width: @anotherVariable) { margin: 20px; } } 

…然后无点会告诉你,它找不到@anotherVariable的定义,即使它使用三行以上。

对我来说,它发生在使用@导入一次,没有任何帮助。 但@Import工作。

正如我在最近的版本中读入的那样,导入将以导入一次的方式工作。