我在跨范围使用 Sass 中的变量默认值时遇到问题。我的测试示例是:
@mixin foo {
$val: 'red' !default;
.bar {
color: $val;
}
}
@include foo;
.class1 {
$val: 'green';
@include foo;
.class11 {
@include foo;
}
}
$val: 'black';
.class2 {
@include foo;
}
.class3 {
$val: 'blue';
@include foo;
}
.class4 {
@include foo;
}
它编译为:
.bar {
color: "red";
}
.class1 .bar {
color: "red";
}
.class1 .class11 .bar {
color: "red";
}
.class2 .bar {
color: "black";
}
.class3 .bar {
color: "blue";
}
.class4 .bar {
color: "blue";
}
如您所见,变量 $val 在 mixin foo 中被定义为 'red' !default。我希望导入 mixin 会将 $val 设置为“红色”,除非它已经定义。但是,在 class1 中,$val 在本地定义为“green”,导入 mixin foo 会用“red”覆盖它。在其他类中,在将 $val 全局定义为“黑色”之后,导入 mixin 会按预期工作,并且 $val 保留其已定义的值。
我究竟做错了什么?