Получить доступ

Как работают каскад и специфичность в CSS?

JuniorВёрстка и CSS
Ещё спрашивают так:
  • Почему мой стиль не применяется?
  • Когда можно использовать !important?
Коротко

При конфликте правил побеждает: !important → более высокая специфичность → более позднее правило. Специфичность считается тройкой (id, классы/атрибуты/псевдоклассы, теги/псевдоэлементы): #nav .item a = (1, 1, 1). Инлайн-стиль сильнее любых селекторов.

  • Специфичность сравнивается по разрядам: один id сильнее любого числа классов
  • !important ломает предсказуемость — только для утилит и переопределения чужих стилей
  • :where() обнуляет специфичность, :is() берёт максимальную из аргументов

А ещё Каскадные слои @layer задают приоритет независимо от специфичности

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Порядок каскада (упрощённо): происхождение и важность (стили браузера, автора, !important), слои @layer, специфичность, порядок в коде.

Примеры специфичности:

селекторспецифичность
p(0, 0, 1)
.btn(0, 1, 0)
nav .btn:hover(0, 2, 1)
#header .btn(1, 1, 0)
style="..."сильнее любого селектора

Наследование — отдельный механизм: color, font наследуются от родителя, margin и border — нет; наследованное значение слабее любого правила, нацеленного на сам элемент.

Практика: держать специфичность низкой и ровной (методология БЭМ — один класс на элемент, CSS Modules, утилитарные классы); id для стилей не использовать.

Что хотят услышать

  • Порядок разрешения конфликтов.
  • Подсчёт специфичности.
  • Почему избегают !important и id.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем