即使导入了“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。
-
要么@导入 – 一旦您需要在每个文件中使用它们所需的variables/混入文件。
使用
@import-once "filename.less";
以防止重复。 -
当它到达时升级到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工作。
正如我在最近的版本中读入的那样,导入将以导入一次的方式工作。