私はOPと同じ問題を抱えていましたが、これは私が見つけた最初の検索結果でしたので、私はそれを理解したので、問題は1.5歳ですが解決策を投稿します。
ここで私が知ったのは、セレクタとして変数を使用するには、カンマ区切りの文字列で完全に機能するSASS interpolationを使用します。ただし、セレクタを保持する変数を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
関数はこれを実行せず、2つのリストを新しいものに結合します)。元のコードを、その時点で
@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
それは、より参考になる場合:元のコードは、のように簡潔にすることができます
た時点で、あなたはあなたがする必要がある "計算"を指定しました。 「通常の結合セレクタ出力に近づくか正確にする必要がある」理由を説明してください – maxbeatty
クラスはスプライトのためのものなので、画像のfoo、bar、およびbaz部分を持つスプライトがあります。私は特定の背景に最初のクラスを設定するループを持っていますし、最後のループは最初に中断されたところで続けられ、基本的には手動でスプライトを処理する必要はありません。今では、変数の設定を定義してから組み合わせたセレクタを手動で指定する必要があります。なぜなら、Sassは私がやりたいことをさせないからです。 – xckpd7