跳至主要内容

selector-max-compound-selectors

限制选择器中的复合选择器数量。

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

一个复合选择器是包含一个或多个简单(标签、类、ID、通配符、属性)选择器的链。如果一个完整的选择器中包含多个复合选择器,它们将由组合器(例如 +>)分隔。您可能想要限制复合选择器数量的原因之一在SMACSS 书籍中有所描述。

此规则在计算选择器深度之前解析嵌套选择器。选择器列表中的每个选择器都将单独评估。

警告

:not() 伪类被视为一个复合选择器,无论其内部选择器的复杂程度如何。该规则确实会处理该内部选择器,但会单独处理,独立于主选择器。

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 {}