在html中未定义变量,css-即使导入了“ variables.less”,“变量名错误”仍未定义...

css-即使导入了“ variables.less”,“变量名错误”仍未定义

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

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

我的引导程序:

@import "variables.less";

@import "normalize.less";

无变量:

@linkColor: #08c;

@linkColorHover: darken(@linkColor, 15%);

标准化:

a {

color: @linkColor;

}

a:visited {

color: @linkColor;

}

a:hover {

color: @linkColorHover;

}

当我做一个

@import“ variables.less”

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

谢谢你的帮助 :)

conradkdotcom asked 2020-06-20T10:24:52Z

10个解决方案

31 votes

另一个问题最终使我找到了正确的答案。

如果文件是用BOM编码的,则LESS编译器似乎无声地失败了。 (对于不熟悉该术语的人来说,这是一个字节顺序标记。)这是某些编辑器(例如Visual Studio)中的默认设置。

编译器阻止BOM表上的错误(如果它在您的根文件中),但对于@ import-ed文件似乎无提示地失败。

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

Chris Jaynes answered 2020-06-20T10:25:20Z

6 votes

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

这是我原始的Gruntfile.js:

less: {

compile: {

files: {

'css/less.css': 'less/**/*.less'

}

}

},

通配符使LESS编译器可以编译该文件夹下的所有.less文件,并将所有结果合并为一个CSS。 我在运行'less/**/*.less'时遇到错误:

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

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

Evi Song answered 2020-06-20T10:25:58Z

5 votes

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

我导入到master.less中的某些.less文件为空。 当我从导入文件列表中删除这些文件时,我的变量被识别了!

Adam answered 2020-06-20T10:26:23Z

5 votes

导入文件中的错误导入也可能导致此错误。

当使用多层导入以及来自Node.js的“ lessc”编译器时,我也遇到了这个问题:

原始文件导入了一个文件(我们将其称为“子”)

子文件导入了一个文件(我们将其称为“孙子”)

孙子是进口的

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

没有显示先前的错误。

问题原来是孩子没有正确导入孙子。 即

@import grandchild.less

而不是:

@import "grandchild.less";

修复导入孙子代的子代后,原件将看到子代中定义的变量。

这似乎少了一个错误-即错误的导入应该出现在“ lessc”输出中,因此有一天它可能会得到修复。 在此之前,我希望这会有所帮助。

mikemaccana answered 2020-06-20T10:27:27Z

1 votes

为了帮助可能遇到的其他问题,不希望从多个导入中生成重复的CSS,您有两种选择。

@ import-once在需要使用它们的每个文件中添加一次所需的变量/ mixins文件。

使用"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> 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."

Austen Cameron answered 2020-06-20T10:28:05Z

1 votes

如果您尝试两次导入文件(这不是一个好主意),并且第一次导入是在您的.less文件中引用的变量已加载之前,则也会出现此错误。

注意:我正在使用Django压缩

在index.html中,我有:

{% compress css %}

{% endcompress %}

然后在styles.less我有

...

@import "timepick.less";

lukeaus answered 2020-06-20T10:28:38Z

1 votes

我认为这是因为您正在编译哪个主文件较少。 同样地

如果您具有Less / Project_name / project.less,并且在此project.less中,则导入变量less以及该目录中所有其他文件。

您只需要将project.less编译到您的CSS中,而不是全部编译成更少的文件。 如果您尝试一次编译project.less和variables.less,则会出现此错误。 而且您可以避免多余的声明来导入较少的变量文件

Saurabh Kalantri answered 2020-06-20T10:29:07Z

0 votes

我会在normalize.less中使用嵌套规则:

a {

color: @linkColor;

&:visited {color: @linkColor;}

&:hover {color: @linkColorHover;}

}

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

@import "variables";

@import "normalize";

我不知道这是否有帮助...

Stef answered 2020-06-20T10:29:36Z

0 votes

发生这种情况的另一种奇怪的特殊情况:如果您使用.NET和dotless,则编译器将阻塞带有变量说明符的嵌套媒体查询。 如果您有这样的代码:

@media (min-width: @aVariable) {

.some-class{

margin: 10px;

@media (min-width: @anotherVariable) {

margin: 20px;

}

}

...然后,无点将告诉您,即使使用了以上三行,也无法找到@anotherVariable的定义。

The Digital Gabeg answered 2020-06-20T10:30:01Z

0 votes

对我来说,它发生在使用@ Import-once时,没有任何帮助。但是使用@Import可以正常工作。

正如我在Less导入的最新版本中所读到的那样,可以一次导入。

amichai answered 2020-06-20T10:30:25Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值