2012-09-11 14 views
7

Jestem w trakcie przekształcania arkusza stylów z MNIEJ na SCSS i jestem zdezorientowany co do tego, co widzę ze zmiennym zakresem. Powielana z prostym przykładzie:SCSS zmienny zakres

$my-color: #000; 

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

a { 
    color: $my-color; 
} 

przekształca się w następujący CSS:

#logo { 
    color: #555555; 
} 

a { 
    color: #555555; 
} 

Równoważnik budowlanych w MNIEJ spowodowałoby wartości a color będącego #000 jako zmienna zgłoszenia w zakresie #logo byłoby zastąpić bardziej ogólny, ale tylko w tym zakresie. Czy zmienne zakresy nie działają w ten sposób w SCSS? Czy istnieje sposób na osiągnięcie tego samego?

+0

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

Odpowiedz

10

Czytając odpowiedzi na Sass variable default scope Wydaje się, że zmienne działają inaczej w SCSS do MNIEJ.

W tym przypadku definicja $my-color w #logo zmienia wartość zmiennej globalnej, natomiast w MNIEJ byłoby traktowane jako blok miejscowym ręcznym tej zmiennej globalnej.

Sądzę, że będę musiał uporządkować różne rzeczy, aby osiągnąć ten sam rezultat.

+5

Moim zdaniem jest to złe, ponieważ zanieczyszczasz przestrzeń globalną. Musisz wymyślić nową nazwę zmiennej za każdym razem, gdy wchodzisz do nowego bloku, to prowadzi do nazw zmiennych: '$ color',' $ color1', '$ color2' .... –

+2

Niedługo Sass będzie miał odpowiednie zakresy leksykalne, a będziesz w stanie zastąpić zmienne globalne w ten sposób: '$ var: newvalue! global;' - Sass 3.3 już daje ostrzeżenie o przestarzałości, gdy nadpisujesz globalnie bez '! global '. –

+2

Ostrzeżenie: To już nie jest tak. Zobacz odpowiedź poniżej. – justinsAccount

16

To już nie jest sprawa co najmniej od SCSS v3.4.12:

Teraz celownicze poprawnie zmienne:

Wejście:

$my-color: #000; 

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

a { 
    color: $my-color; 
} 

wyjściowa:

#logo { 
    color: #555; 
} 

a { 
    color: #000; 
} 

Można wypróbować w: http://sassmeister.com/