Sassと結合された子セレクター


125

私はちょうどサスを発見しました、そして私はそれについてとても興奮しています。

私のウェブサイトでは、子コンビネーター(E > F)を使用してスタイル設定されたツリーのようなナビゲーションメニューを実装しています。

Sassでこのコードをより単純な(またはより良い)構文で書き換える方法はありますか?

#foo > ul > li > ul > li > a {
  color: red;
}

OPは「よりシンプル/より良い」とは、「空白を使用して階層を示す」という意味だと思います
jsejcksn

回答:


222

組み合わせた子セレクターがない場合は、おそらく次のようなことを行います。

foo {
  bar {
    baz {
      color: red;
    }
  }
}

同じ構文を>で再現する場合は、次のようにします。

foo {
  > bar {
    > baz {
      color: red;
    }
  }
}

これはこれにコンパイルされます:

foo > bar > baz {
  color: red;
}

またはsassで:

foo
  > bar
    > baz
      color: red

2
これは長くなるだけですよね?
BoltClock

1
私はこれがOPが望んでいるものです
Arnaud Le Blanc

1
よかった、ありがとう。ところで、BoltClockが述べたように、もっと長い(そして私にとってはどういうわけか醜い)。昔のスタイリングのままでいなければならないようです。
フレリー

1
「より良い構文」を定義する必要があります;)
Arnaud Le Blanc

18

あなたが持っているその単一のルールについては、それを行うためのより短い方法はありません。子コンビネーターはCSSとSass / SCSSで同じであり、それに代わるものはありません。

ただし、次のような複数のルールがある場合:

#foo > ul > li > ul > li > a:nth-child(3n+1) {
    color: red;
}

#foo > ul > li > ul > li > a:nth-child(3n+2) {
    color: green;
}

#foo > ul > li > ul > li > a:nth-child(3n+3) {
    color: blue;
}

次のいずれかに凝縮できます。

/* Sass */
#foo > ul > li > ul > li
    > a:nth-child(3n+1)
        color: red
    > a:nth-child(3n+2)
        color: green
    > a:nth-child(3n+3)
        color: blue

/* SCSS */
#foo > ul > li > ul > li {
    > a:nth-child(3n+1) { color: red; }
    > a:nth-child(3n+2) { color: green; }
    > a:nth-child(3n+3) { color: blue; }
}

したがって、結合された子セレクターには変換はありません。
フレリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.