2012-01-31 6 views
3

からの複数のクラスセレクタ私はそうサス:変数

$multi: foo, bar, baz 

のようなクラスを使用して変数を作成したいと、私はそうのような組み合わせのセレクタを作成したい:

.foo, .bar, .baz {} 

私が使用していますインデントされた構文(それが重要かどうかはわかりません)。私は変数から生成された結合されたセレクタを必要とする理由:そこに定義されているクラスの数に基づいて計算を行う必要があります。私は別のクラスを作る必要があるので、(use extend!)のような提案はしないでください。私は、通常の結合セレクタ出力に近いか正確に得ることができる必要があります。

+1

それは、より参考になる場合:元のコードは、のように簡潔にすることができます

@function unite($list, $glue: ", ") { @if length($list) == 1 { @return $list; } @else { $string: ""; @each $item in $list { @if $string != "" { $string: $string + $glue; } $string: $string + $item; } @return $string; } } 

た時点で、あなたはあなたがする必要がある "計算"を指定しました。 「通常の結合セレクタ出力に近づくか正確にする必要がある」理由を説明してください – maxbeatty

+0

クラスはスプライトのためのものなので、画像のfoo、bar、およびbaz部分を持つスプライトがあります。私は特定の背景に最初のクラスを設定するループを持っていますし、最後のループは最初に中断されたところで続けられ、基本的には手動でスプライトを処理する必要はありません。今では、変数の設定を定義してから組み合わせたセレクタを手動で指定する必要があります。なぜなら、Sassは私がやりたいことをさせないからです。 – xckpd7

答えて

2

私は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 
+0

あなたの答えを編集して申し訳ありません、あなたのコピーを自分の変更に合わせて作成すると思いました。本当に有益な答えの最初の部分をカットしたので、変更を拒否してください。 – Able

0

(前の回答からコード)ここでは一つの可能​​な実装です!便利です。私はちょうどそれを使用する人々に機会を与えるために、いくつかのSCSS構文を追加したい:

$multi: ".foo", ".bar", ".baz" 

#{unite($multi)} 
    //CSS properties go here