Less 重写其他变量使用的变量
在我的Less代码中重写变量的情况下,我真的很难调试。结构是这样的:Less 重写其他变量使用的变量,less,Less,在我的Less代码中重写变量的情况下,我真的很难调试。结构是这样的: less |- theme.less |- theme-high-contrast.less |- styles.less |- variables.less |- variables-high-contrast.less 无主题: @import('variables'); @import('styles'); 无变量: @brand-blue: <blue>; @brand-primary: @brand-
less
|- theme.less
|- theme-high-contrast.less
|- styles.less
|- variables.less
|- variables-high-contrast.less
无主题:
@import('variables');
@import('styles');
无变量:
@brand-blue: <blue>;
@brand-primary: @brand-blue;
变量-高对比度
@import('variables-high-contrast');
@import('styles')
@import('variables');
@brand-blue: <some other blue>;
两个theme
less文件生成不同的css输出,这些输出根据活动的主题进行交换。我得到的输出与此类似:
theme.css和theme-high-contrast.css
.foo {
color: <blue>
}
.foo{
颜色:
}
这两个文件对该变量都有相同的值,尽管它被显式重写,但我始终无法找出原因。非常感谢您的帮助。看看
less
文档中关于变量惰性计算的内容。看看这两个例子:
.lazy-eval {
width: @var;
}
@var: @a;
@a: 9%;
还有一个:
.lazy-eval {
width: @var;
@a: 9%;
}
@var: @a;
@a: 100%;
两者都将编译为:
.lazy-eval {
width: 9%;
}
.foo {
color: <blue>;
}
定义变量两次时,将使用变量的最后一次定义,从当前范围向上搜索。这类似于css本身,定义中的最后一个属性用于确定值
因此,在变量较少的文件中:
@brand-blue: <blue>;
@brand-primary: @brand-blue;
@brand-blue: <some other blue>;
.foo {
color: @brand-primary;
}
@品牌蓝:;
@品牌一级:@品牌蓝;
稍后在无主题文件中:
@brand-blue: <blue>;
@brand-primary: @brand-blue;
@brand-blue: <some other blue>;
.foo {
color: @brand-primary;
}
@品牌蓝:;
傅先生{
颜色:@品牌初级;
}
将编译为:
.lazy-eval {
width: 9%;
}
.foo {
color: <blue>;
}
.foo{
颜色:;
}
包括文件时,变量的最后定义将获胜。因此,将使用上次定义的@brand primary
值(
)
要实现您想要做的事情,您必须在主题文件中更改@brand primary
。另一种方法是不在变量中定义@brand blue
。减少,以便稍后在主题文件中分配值
你可以在它的官方网站上找到关于更少变量的信息
希望有帮助。我不确定我是否理解这个问题。也就是说,您确定在样式中没有定义@brand blue:…
变量。大约少了?无论哪种方式,最典型的问题通常出现在人们少错过的时候。除此之外。。。这真的很奇怪-现在当你简单地注释任何@import“whatever variables”时会发生什么代码>行?您更改了@brand blue
,@brand primary
的值,因为您之前已经分配了它。-事实上,你应该阅读官方文件,因为它与你所认为的完全相反。@seven Phase max-like在我发布的关于文档的链接中提到,关于变量延迟加载部分,if@:9%@var:@a代码>随后@a:100%代码>,编译时@var
仍将为9%。所以如果@品牌蓝:@品牌一级:@品牌蓝代码>然后@品牌蓝:代码>,在编译时,品牌主版仍将是。你可以像我以前一样,在几个简单的文件中测试这个问题的例子。@seven Phase max回顾我对你评论的回答并再次阅读我的帖子答案,我发现了你的观点。我做对了,但在我编辑的las段落中写错了。谢谢你让我再次思考:——)好多了,但你还是弄错了一点。在惰性评估示例中,第二个示例的结果是9%
,这不是因为您首先将9%
分配给了@a
,而是因为.lazy eval
范围内的@a
值就是这个范围(示例是关于范围)。你的第二个例子.foo
仍然不正确@最多七个阶段,所以在我的foo示例中,它将编译为。原始问题中的用户正在将foo编译为,这是因为@brand primary
的范围是include文件。我说得对吗?