关于覆盖!default
个变量 - 我有两个.sass
个文件:
main.sass
$variable: black
@import "_another_import.sass"
@import "_import.sass"
_import.sass
$variable: blue !default
body
background: $variable
$variable
在已编译的CSS中解析为blue
:
body {
background: blue;
}
但是,如果我在导入_import.sass
样式表之前指定了覆盖变量值,则Sass会将其编译为black
:
main.sass
@import "_another_import.sass"
$variable: black
@import "_import.sass"
这种行为是否有意?有没有办法在!default
变量值之前声明覆盖,而不是在导入中声明!default
值(甚至可能在单独的文件中)?
我的实际设置比这复杂一点。我使用Myg(NPM组件)与myg-rails(生成文件结构来自定义变量)和Webpack。所以我有一个myg.sass
文件加载_variables.sass
和_myg.sass
。 _variables.sass
加载了一些定义变量的其他文件。 _myg.sass
导入Myg(NPM)组件。我验证了当我在_variables.sass
中定义变量并使用它+在Myg组件中设置默认值时,默认值将覆盖已设置的值。
答案 0 :(得分:4)
否,你在做什么应该有用。您遇到的结果是不规则的,不意图。
如果尚未通过将!default标志添加到值的末尾来分配变量,则可以将其分配给变量。这意味着如果已经分配了变量,则不会重新分配,但如果它还没有值,则会给出一个。
我怀疑我们需要调查一些其他的东西。
我已经使用这些文件验证了正确的行为:
<强> _t1.sass 强>
div
margin: 0
<强> _t2.sass 强>
$c: blue !default
body
background: $c
<强> main.sass 强>
$c: black
@import '_t1.sass'
@import '_t2.sass'
div {
margin: 0;
}
body {
background: black;
}
它是预期的黑色。
答案 1 :(得分:0)
我的建议是: -
1)如果你想要黑色背景,那么你只需要这样做
// main.sass
@import "_another_import.sass";
@import "_import.sass";
// _import.sass
$variable: black;
body{
background-color: $variable !important;
}
但我的建议是你的文件结构如下
@import "_variable"; /*Define Variable in separate file & in that file declare $variable*/
@import "_another_import.sass";
@import "_import.sass";
body{
background-color: $variable !important;
}
答案 2 :(得分:0)
我认为你误解了!default
的作用。它是说如果未分配变量,请使用此值。
如果尚未通过将!default标志添加到值的末尾来分配变量,则可以将其分配给变量。这意味着如果已经为变量赋值,则不会重新赋值,但如果它还没有值,则会给它一个。