Коэффициент специфичности правил в CSS с примерами

Коэффициент специфичности в CSS — это система оценок, которая определяет, какие стили будут применены к элементу в случае конфликта правил. Каждый тип селектора имеет свой «вес», и при сравнении специфичности разных селекторов, применяемых к одному и тому же элементу, выигрывает селектор с наибольшей суммарной специфичностью. Специфичность измеряется четырьмя уровнями (значениями), которые часто записываются как четырехзначное число: (a, b, c, d).

  1. a (в стилях не используется) — предназначено для селекторов встроенного стиля, например, стилей, определенных в атрибуте style HTML-элемента. Стили, заданные через атрибут style, всегда имеют наивысшую специфичность.
  2. b — количество ID селекторов в правиле.
  3. c — количество классов, селекторов атрибутов и псевдоклассов в правиле.
  4. d — количество селекторов типов элементов и псевдоэлементов в правиле.

Примеры

Пример 1

#menu { ... } /* Специфичность = (0, 1, 0, 0) */

Этот селектор имеет один ID, поэтому его специфичность выше, чем у селекторов классов или тегов.

Пример 2

.menu .item { ... } /* Специфичность = (0, 0, 2, 0) */

Здесь два класса, поэтому специфичность составляет два уровня классов.

Пример 3

ul#menu li.active a { ... } /* Специфичность = (0, 1, 1, 3) */

В этом правиле один ID селектор (#menu), один класс селектор (.active) и три тега селектора (ul, li, a), что дает в сумме специфичность (0, 1, 1, 3).

Пример 4

a:hover { ... } /* Специфичность = (0, 0, 1, 1) */

Здесь один псевдокласс (:hover) и один селектор тега (a).

Пример 5

<a style="color: red;">Link</a> /* Специфичность = (1, 0, 0, 0) */

Стиль, заданный непосредственно через атрибут style, имеет наивысшую специфичность.

Как работает специфичность

Когда на один HTML-элемент применяются разные CSS правила, специфичность каждого правила вычисляется на основе вышеописанных правил. Правило с наибольшей специфичностью «побеждает» и применяется к элементу. Если два правила имеют одинаковую специфичность, применяется правило, которое последнее по порядку в CSS.

Понимание специфичности важно для эффективной работы с CSS, поскольку это помогает избегать конфликтов стилей и обеспечивает больший контроль над внешним видом веб-страниц.

Юрий Савченко

Привет, моё имя Юрий, и мне 39 лет. Родом из Грозного. Сейчас живу и работаю в Краснодаре, в одном из крупнейших маркетинговых агентств города. Я являюсь основным автором статей на проекте Code4web.

В основном пишу в такие категории как Javascript, HTML и Офтопик.

В свободное время я — лютый геймер. Обожаю игры серии Dark Souls и RPG. Это такой мой способ расслабиться и отдохнуть от повседневной рутины.

Code4Web