Это, как вы делаете это в SASS:
.some-element
$main-color: black
color: $main-color
.red > &
$main-color: red
color: $main-color
Результирующая CSS:
.some-element {
color: black;
}
.red > .some-element {
color: red;
}
Но, похоже, что вы пытаетесь применить плохое решение. Опишите, что вы пытаетесь достичь, а не как реализовать решение неизвестной задачи. См. XY problem.
UPD
Я думал, что я пытался достичь было довольно ясно ... а дальше объяснять, я хочу 2 цветовые схемы для страницы. Один из них по умолчанию & один, только если класс «.red» присутствует в теге body. То, что вы представляете, похоже на то, что мне пришлось бы устанавливать переменные для каждого класса, а затем дублировать для класса .red. Я искал, в основном, 1 переменную (в данном случае $ main-color), которая задана по умолчанию, а затем перезагружается внутри класса .red. Имеют смысл?
В SASS нет способа установить переменную на основе того, был ли текущий код завернут в класс или нет. Вы можете объявить переменную вручную.
Вы также должны понимать, что то, что SASS делает, генерирует CSS, не более того. Итак, давайте начнем с CSS, который вы хотели бы иметь. Я предполагаю, что это что-то вроде этого:
header {
background-color: black; }
#main {
background-color: black; }
body.red header {
background-color: red; }
body.red #main {
background-color: red; }
Вы должны были обеспечить такой код, в первую очередь, и это позор, что я должен сделать слепые догадки.
Этот код может отображаться как это (с той же функциональностью):
header {
background-color: black; }
body.red header {
background-color: red; }
#main {
background-color: black; }
body.red #main {
background-color: red; }
Теперь мы можем видеть картину.
Этот код может быть легко создан с SASS использованием подмешать:
=main-color()
background-color: black
body.red &
background-color: red
Затем вы примените его, как это:
header
+main-color
#main
+main-color
Другой вариант заключается в создании подмешать, содержащий все стили. Это, вероятно, оптимальное решение, поскольку оно содержит наименьшее дублирование.
=theme-styles($main-color: black)
header
background-color: $main-color
#main
background-color: $main-color
Затем вы примените его, как это:
+theme-styles
body.red
+theme-styles(red)
В самом деле, вы можете создать несколько тем:
+theme-styles
@each $color in red blue green
body.#{$color}
+theme-styles($color)
Демо: http://sassbin.com/gist/5812941/
Вы неправильное использование флага '! default'. Этот флаг означает «установить значение переменной только в том случае, если оно не имеет значения». –
Ах, вы абсолютно правы. Исправлена. –
Также обратите внимание, что плакат просит «если родительский класс красный», а не «если другой цвет переменной красный». : P –