Следующий пример использует карту, чтобы определить различные значения темы. Mixin будет обертывать каждый селектор в классе (ключ карты) и создавать глобальные переменные, которые будут использоваться внутри каждого селектора.
$theme-map:(
'.australia': (color: blue, font-family: Roboto),
'.denmark' : (color: red, font-family: Arial)
);
@mixin theme {
@each $class, $map in $theme-map {
#{$class} & {
$color: map-get($map, color) !global;
$font-family: map-get($map, font-family) !global;
@content;
}
}
}
.foo {
@include theme {
color: $color;
font-family: $font-family;
}
}
.bar{
@include theme {
background-color: $color;
}
}
Выход:
.australia .foo {
color: blue;
font-family: Roboto;
}
.denmark .foo {
color: red;
font-family: Arial;
}
.australia .bar {
background-color: blue;
}
.denmark .bar {
background-color: red;
}
PS. в ближайшем будущем переменные CSS облегчат этот тип работы с использованием наследования переменных.
.australia {
--color: red;
--font-family : Arial;
}
.denmark {
--color: blue;
--font-family : Roboto;
}
.foo {
color: var(--color);
font-family: var(--font-family);
}
.bar {
backgound-color: var(--color);
}
Так почти так же, как и в этом вопросе, который был задан на час раньше? http://stackoverflow.com/questions/42249085/sass-group-elements-for-reuse – CBroe
Я проверил этот вопрос, но не помог. это упоминается для определенной группы элементов. но для меня это нужно для всего веб-сайта. Эти переменные используются несколько раз в нескольких классах. –