2012-09-11 10 views
7

estoy en el proceso de convertir una hoja de estilo de MENOS a SCSS y estoy confundido acerca de algo que estoy viendo con alcance variable. Reproducido con un ejemplo sencillo:SCSS contextos de variables

$my-color: #000; 

#logo { 
    $my-color: #555; 
    color: $my-color; 
} 

a { 
    color: $my-color; 
} 

se convierte en la siguiente CSS:

#logo { 
    color: #555555; 
} 

a { 
    color: #555555; 
} 

La construcción equivalente en MENOS resultaría en el valor a color ser #000 como la declaración de variables dentro del alcance #logo haría anula el más general pero solo dentro de ese alcance. ¿Los ámbitos de variables no funcionan así en SCSS? ¿Hay alguna manera de lograr lo mismo?

+0

duplicado de http://stackoverflow.com/questions/5469931/sass-variable-default-scope? – moopet

Respuesta

10

lectura a través de las respuestas a Sass variable default scope, parece que las variables funcionan de forma diferente en SCSS a MENOS.

En este caso la definición de $my-color en #logo cambia el valor de la variable global mientras que en MENOS que sería tratado como un bloque de anulación local de esa variable global.

Supongo que tendré que estructurar las cosas un poco diferente para lograr el mismo resultado.

+5

En mi opinión, esto es malo, porque estás contaminando el espacio global. Tienes que inventar un nuevo nombre de variable cada vez que ingresas al nuevo bloque, esto lleva a los nombres de las variables: '$ color',' $ color1', '$ color2' .... –

+2

Muy pronto Sass tendrá alcance léxico apropiado, y usted podrá anular las variables globales como esta: '$ var: newvalue! global;' - Sass 3.3 ya da una advertencia de desaprobación al anular un global sin '! global'. –

+2

Advertencia: este ya no es el caso. Ver la respuesta a continuación. – justinsAccount

16

Esto ya no es el caso, al menos a partir del v3.4.12 SCSS:

Ahora Scopes correctamente las variables:

de entrada:

$my-color: #000; 

#logo { 
    $my-color: #555; 
    color: $my-color; 
} 

a { 
    color: $my-color; 
} 

Salida:

#logo { 
    color: #555; 
} 

a { 
    color: #000; 
} 

Puede probarse en: http://sassmeister.com/

Cuestiones relacionadas