variables - scss - Alcance predeterminado variable de Sass
scss documentation (1)
Definir $val: ''green''
localmente en class1 no altera $val: ''red'' !default
en mixin, porque busca global $ val. En este punto, no se ha definido ningún $ val global.
Entonces global $ val se define como ''negro''. Después de $ val en mixin, busque $ val global. En este punto, $ val global se ha definido como ''negro''.
La definición de $ val de nuevo localmente alterará global $ val que se ha definido.
@mixin foo
$val: ''red'' !default // defined locally
.bar
color: $val
@include foo // $val in mixin foo look for global $val. no global $val found, then ''red''
.class1
$val: ''green''
@include foo // $val in mixin foo look for global $val. no global $val found, then ''red''
color: $val // local $val ''green''
.class11
@include foo // $val in mixin foo look for global $val. no global $val found, then ''red''
$val: ''black'' // defined globally at the first time
.class2
@include foo // $val in mixin foo look for global $val. $val found, ''black''
.class3
$val: ''blue'' // change the gobal $val
@include foo // $val in mixin foo look for global $val. $val found, ''blue''
.class4
@include foo // $val in mixin foo look for global $val. $val found, ''blue''
Tengo un problema con el uso de valores predeterminados de variables en Sass en todos los ámbitos. Mi ejemplo de prueba es:
@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 puede ver, la variable $ val se define como ''roja''. Por defecto en mixin foo. 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?