Что такое специфичность в CSS?

Этот вопрос проверяет понимание механизма, с помощью которого CSS решает, какие стили применять к элементу, если на него воздействуют разные правила.

Короткий ответ

Специфичность в CSS — это способ определения приоритета CSS-правил, когда к одному элементу применяются несколько конфликтующих стилей. Она рассчитывается на основе количества селекторов разных типов в правиле:

  • Инлайн-стили (например, style="color: red;") имеют наивысший приоритет.

  • ID-селекторы (#id) более специфичны, чем классы (.class) или теги (div).

  • Универсальные селекторы (*) и каскадность имеют минимальный приоритет.

 Например:

#id { color: blue; } /* более специфично, чем */
.class { color: green; }

Длинный ответ

Специфичность — это числовое значение, которое CSS использует для определения приоритета правил, если они конфликтуют при применении к одному элементу. 

Как рассчитывается специфичность:

Каждое правило имеет "вес", который зависит от типов селекторов:

  • Инлайн-стили: Самые приоритетные, специфичность 1000.

<div style="color: red;">Текст</div>
  • ID-селекторы: Один ID добавляет 100 к специфичности.

#main { color: blue; }
  • Классы, атрибуты, псевдоклассы: Каждый добавляет 10.

.highlight { color: green; }
[type="text"] { color: gray; }
  •  Тег-селекторы и псевдоэлементы: Каждый добавляет 1.

p { color: black; }

Универсальный селектор (*) и каскадность имеют специфичность 0.

Пример расчета:

/* Специфичность: 0-0-1 (только тег) */
div { color: black; } 

/* Специфичность: 0-0-10 (только класс) */
.class { color: green; } 

/* Специфичность: 0-1-0 (ID-селектор) */
#id { color: blue; } 

Если все три правила применяются к одному элементу <div id="id" class="class">, то итоговый цвет будет синий, так как ID-селектор самый специфичный.

Влияние каскада и специфичности:

  • Если два правила имеют одинаковую специфичность, побеждает то, которое указано последним в CSS-файле.

  • !important может переопределить любое правило, но его следует использовать с осторожностью.

Полный пример:

HTML:

<div id="main" class="highlight">Текст</div>

CSS:

div { color: black; } /* специфичность: 0-0-1 */
.highlight { color: green; } /* специфичность: 0-0-10 */
#main { color: blue; } /* специфичность: 0-1-0 */

Результат: текст станет синим, так как стиль #main имеет наибольшую специфичность.

Практическое применение:

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

Уровень

  • Рейтинг:

    3

  • Сложность:

    3

Навыки

  • CSS

    CSS

Ключевые слова

Подпишись на React Developer в телеграм