Tengo un problema con el uso de valores predeterminados de variables en Sass en todos los ámbitos. Mi ejemplo de prueba es:Alcance predeterminado variable de 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;
}
Es compila a:
.bar {
color: "red";
}
.class1 .bar {
color: "red";
}
.class1 .class11 .bar {
color: "red";
}
.class2 .bar {
color: "black";
}
.class3 .bar {
color: "blue";
}
.class4 .bar {
color: "blue";
}
Como se puede ver, $ val variable se define como 'rojo' por defecto en el foo mixin!. Espero que la importación de mixin establezca $ val en 'rojo' a menos que ya esté definido. Sin embargo, en la clase 1, donde $ val se define localmente como 'verde', al importar el mixin foo se sobrescribe con 'rojo'. En otras clases, después de la definición global de $ val como 'negro', la importación de la mezcla funciona como se espera y $ val conserva su valor ya definido.
¿Qué estoy haciendo mal?
Al igual que JavaScript sin la declaración 'var'! ... maldición. – iono
Comportamiento muy molesto y una decisión extraña del equipo de SASS para tomar prestado este alcance de JS, en mi humilde opinión. – MoMolog