スコープ全体で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は、mixinfooでは'red'!defaultとして定義されています。ミックスインをインポートすると、すでに定義されていない限り、$valが「red」に設定されると思います。ただし、$valがローカルで「green」として定義されているclass1では、mixinfooをインポートすると「red」で上書きされます。他のクラスでは、$ valを「黒」としてグローバルに定義した後、ミックスインのインポートは期待どおりに機能し、$valはすでに定義された値を保持します。
私は何が間違っているのですか?