Область видимости переменных Sass по умолчанию

У меня проблема с использованием значений переменных по умолчанию в 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; 

}

Он компилируется в:

.bar { 
  color: "red"; 

} 

.class1 .bar { 
  color: "red"; 
} 

.class1 .class11 .bar { 
  color: "red"; 
} 

.class2 .bar { 
  color: "black"; 
} 

.class3 .bar { 
  color: "blue"; 
} 

.class4 .bar { 
  color: "blue"; 

}

Как видите, переменная $ val определена как «красный»! default в миксине foo. Я ожидаю, что импорт миксина установит для $ val значение «красный», если он еще не определен. Однако в class1, где $ val локально определено как 'green', при импорте примеси foo он заменяется на 'red'. В других классах после глобального определения $ val как «черного» импорт миксина работает должным образом, и $ val сохраняет свое уже определенное значение.

Что я делаю не так?

15
задан Miloš Rašić 29 March 2011 в 08:43
поделиться