Skip to main content

selector-max-specificity

Limit the specificity of selectors.

    .foo, #bar.baz span, #hoo { color: pink; }
/** ↑ ↑ ↑
* Each of these selectors */

Visit the Specificity Calculator for visual representation of selector specificity.

This rule ignores selectors with variable interpolation (#{$var}, @{var}, $(var)).

This rule adheres to the CSS Nesting specification when calculating specificity. The specificity of the nesting selector (&) is equal to the largest specificity among the complex selectors in the parent's selector list (identical to the behavior of :is()).

Each selector in a selector list is evaluated separately.

This rule is only appropriate for CSS. You should not turn it on for CSS-like languages, such as SCSS or Less.

Options

string

Specify a maximum specificity allowed.

The format is "id,class,type", as laid out in the W3C selector spec.

Given:

{
"selector-max-specificity": "0,2,0"
}

The following patterns are considered problems:

#foo {}
.foo .baz .bar {}
.foo .baz {
& .bar {}
}

The following patterns are not considered problems:

div {}
.foo div {}
.foo div {
& div a {}
}
.foo {
& .baz {}
}

Optional secondary options

ignoreSelectors

{ "ignoreSelectors": ["array", "of", "selectors", "/regex/"] }

Given:

{
"selector-max-specificity": [
"0,2,0",
{
"ignoreSelectors": [":host", ":host-context", "/^my-/"]
}
]
}

The following patterns are not considered problems:

:host(.foo) .bar {}
:host-context(.foo.bar) {}
:host-context(.foo, :host(.bar).baz) {}
my-element.foo.bar {}

The following patterns are considered problems:

:host(.foo) .bar.baz {}
:host-context(.foo.bar.baz) {}
:host-context(.foo, :host(.bar), .foo.bar.baz) {}
my-element.foo.bar.baz {}