本文へ移動

selector-max-compound-selectors

セレクター内の複合セレクターの数を制限します。

   div .bar[data-val] > a.baz + .boom > #lorem {}
/* ↑ ↑ ↑ ↑ ↑
↑ ↑ ↑ ↑ ↑
Lv1 Lv2 Lv3 Lv4 Lv5 -- these are compound selectors */

複合セレクターとは、1つ以上の単純セレクター(タグ、クラス、ID、ユニバーサル、属性)の連鎖です。複合セレクター 完全なセレクターに2つ以上の複合セレクターがある場合、それらはコンバイナー(例: ` `、`+`、`>`)で区切られます。複合セレクターの数を制限したい理由の1つは、SMACSS の書籍に記載されています。

このルールは、セレクターの深さをカウントする前に、ネストされたセレクターを解決します。セレクターリスト内の各セレクターは個別に評価されます。

警告

`:not()`擬似クラスは、内部のセレクターの複雑さに関係なく、1つの複合セレクターとみなされます。このルールは内部のセレクターも処理しますが、メインセレクターとは独立して個別に処理します。

`message` セカンダリオプション は、このルールの引数を受け入れることができます。

オプション

`int`:許可される複合セレクターの最大数。

例:`3`

次のパターンは問題とみなされます。

.foo .bar .baz .lorem {}
.foo .baz {
& > .bar .lorem {}
}

次のパターンは問題とみなされません。

div {}
.foo div {}
#foo #bar > #baz {}
.foo + div :not (a b ~ c) {} /* `a b ~ c` is inside `:not()`, so it is evaluated separately */

オプションのセカンダリオプション

`ignoreSelectors: ["/regex/", /regex/, "non-regex"]`

一部の複合セレクターを無視します。これは、Vueの`::v-deep`やAngularの`::ng-deep`など、コンバイナーよりも複合セレクターのように振る舞う深いセレクターに役立つ場合があります。

例:`2`。

["::v-deep", "/ignored/", ":not"]

次のパターンは問題とみなされます。

.foo .bar ::v-deep .baz {}
p a :not(.foo .bar .baz) {}
.foo .bar > .baz.ignored {}
.foo .bar > .ignored.baz {}

次のパターンは問題とみなされません。

.foo::v-deep .bar {}
.foo ::v-deep .baz {}
p a :not(.foo .bar) {}
.foo {
&.some-ignored-class ::v-deep > .bar {}
}
.foo .bar > .ignored.ignored {}
.foo .bar > .ignored .ignored {}