У меня была та же проблема, что и у ОП, и это был первый результат поиска, который я нашел, так что теперь, когда я понял это, я опубликую свое решение, даже если этому вопросу 1,5 года.
Вот что я обнаружил: чтобы использовать переменную в качестве селектора, вы используете SASS интерполяция , которая отлично работает со строками, разделенными запятыми. Однако, если вы хотите, чтобы переменная, которая содержит ваши селекторы, была list
(чтобы вы могли использовать в ней функции списка, например, length($multi)
), интерполяция сгенерирует некорректный селектор.
Итак, простое решение - сначала определить вашу переменную как список, а затем, когда вам нужно использовать ее как селектор, преобразовать этот список в строку через запятую:
$multi: ".foo", ".bar", ".baz"
$multi-selector: ""
@each $selector in $multi
@if $multi-selector != ""
$multi-selector: $multi-selector + ", "
$multi-selector: $multi-selector + $selector
#{$multi-selector}
//CSS properties go here
Возможно, вы захотите абстрагировать функцию со списком через запятую в функцию (примечание: функция SASS join
не делает этого; она объединяет два списка в новый). ). Вот одна из возможных реализаций:
@function unite($list, $glue: ", ")
@if length($list) == 1
@return $list
$string: ""
@each $item in $list
@if $string != ""
$string: $string + $glue
$string: $string + $item
@return $string
В этот момент исходный код может быть таким же кратким, как:
$multi: ".foo", ".bar", ".baz"
#{unite($multi)}
//CSS properties go here