Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Less 重写其他变量使用的变量_Less - Fatal编程技术网

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代码中重写变量的情况下,我真的很难调试。结构是这样的:

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文件。我说得对吗?