J'ai un problème avec l'utilisation de valeurs par défaut variables dans Sass sur des étendues. Mon exemple de test est:Portée variable par défaut 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;
}
Il est compilé en:
.bar {
color: "red";
}
.class1 .bar {
color: "red";
}
.class1 .class11 .bar {
color: "red";
}
.class2 .bar {
color: "black";
}
.class3 .bar {
color: "blue";
}
.class4 .bar {
color: "blue";
}
Comme vous pouvez le voir, la variable $ val est définie par défaut 'rouge' dans le mixin foo!. Je m'attends à ce que l'importation du mixin mette $ val à "rouge" à moins qu'il ne soit déjà défini. Cependant, dans class1, où $ val est localement défini comme 'green', l'importation de la fonction mixin foo l'écrase avec 'red'. Dans d'autres classes, après la définition globale de $ val en tant que 'noir', l'importation du mixin fonctionne comme prévu et $ val conserve sa valeur déjà définie.
Qu'est-ce que je fais mal?
Tout comme JavaScript sans l'instruction 'var'! ... putain. – iono
Comportement très ennuyeux et une décision étrange de l'équipe SASS d'emprunter cette portée de JS, à mon humble avis. – MoMolog