2012-09-11 15 views
7

io sono nel processo di conversione di un foglio di stile da MENO-SCSS e io sono confuso su una cosa che sto vedendo con portata variabile. Riprodotto con un semplice esempio:SCSS portata variabile

$my-color: #000; 

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

a { 
    color: $my-color; 
} 

Converte al seguente CSS:

#logo { 
    color: #555555; 
} 

a { 
    color: #555555; 
} 

La costruzione equivalente in MENO comporterebbe il valore a color essendo #000 come dichiarazione variabile nell'ambito #logo sarebbe scavalcare il più generale, ma solo all'interno di tale ambito. Gli ambiti variabili non funzionano in questo modo in SCSS? C'è un modo per ottenere la stessa cosa?

+0

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

risposta

10

Leggendo le risposte alle Sass variable default scope sembra che le variabili funzionano in modo diverso in SCSS-MENO.

In questo caso la definizione di $my-color in #logo cambia il valore della variabile globale mentre in MENO sarebbe stata trattata come un blocco di override locale di tale variabile globale.

Immagino che dovrò strutturare le cose in modo un po 'diverso per ottenere lo stesso risultato.

+5

Secondo me questo è male, perché stai inquinando lo spazio globale. Devi pensare un nuovo nome di variabile ogni volta che stai entrando nel nuovo blocco, questo porta ai nomi delle variabili: '$ colore',' $ colore1', '$ colore2' .... –

+2

Molto presto Sass avrà uno scope lessicale corretto, e sarete in grado di sovrascrivere variabili globali come: '$ var: newvalue! global;' - Sass 3.3 fornisce già un avviso di deprecazione quando si esegue l'override di un global senza '! global'. –

+2

Avviso: non è più il caso. Vedi la risposta qui sotto. – justinsAccount

16

Questo non è più il caso, almeno a partire dal SCSS v3.4.12:

Ora Scopes correttamente le variabili:

ingresso:

$my-color: #000; 

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

a { 
    color: $my-color; 
} 

uscita:

#logo { 
    color: #555; 
} 

a { 
    color: #000; 
} 

Può essere provato in: http://sassmeister.com/