PassFront
  1. PassFront
  2. База знаний
  3. Селекторы и специфичность

Какие нестандартные случаи специфичности в CSS важны на практике и как их применять?

Селекторы и специфичность

Есть случаи, где специфичность ведёт себя неочевидно — их полезно знать, чтобы не удивляться при отладке.

Нестандартные случаи

  • `:where()` обнуляет специфичность — удобно для базовых стилей библиотек, которые легко переопределить:
:where(.btn) { padding: 8px; }   /* (0,0,0) */
.btn { padding: 4px; }           /* победит */
  • `:is()`, `:not()`, `:has()` берут максимум аргументов — :is(#id, .a) весит как id, даже если сработал .a.
  • Повтор класса — .btn.btn даёт (0,2,0); приём для повышения веса без зависимости от разметки.
  • Атрибут по id — [id="header"] весит как класс (0,1,0), а не как id.
  • `` и комбинаторы** не добавляют веса.
  • Слои `@layer` важнее специфичности — правило в позднем слое побеждает более специфичное в раннем; стили вне слоёв сильнее любых слоёв.
  • `!important` в слоях работает наоборот — важные стили раннего слоя сильнее важных стилей позднего.
  • Наследованное значение проигрывает любому правилу для элемента, даже *.

Коротко для собеседования

:where() обнуляет вес, :is()/:not() берут максимум, [id=…] весит как класс, слои важнее специфичности, а !important в слоях инвертирует порядок.

Подробнее: MDN — Специфичность

Другие вопросы раздела