Селекторы, специфичность
Специфичность селекторов в CSS — это механизм, который определяет, какие стили будут применены к элементу, если на него влияют несколько конфликтующих правил. Специфичность рассчитывается на основе типа селекторов, и чем выше специфичность, тем выше приоритет стиля.
Как работает специфичность?
Специфичность рассчитывается как числовое значение, состоящее из четырех частей: a, b, c, d, где:
a— стили, указанные в атрибутеstyle(инлайновые стили).b— количество ID-селекторов.c— количество классов, псевдоклассов и атрибутов.d— количество элементов и псевдоэлементов.
Чем больше значение в каждой части, тем выше специфичность. Например:
- Селектор
#idимеет специфичность0, 1, 0, 0. - Селектор
.classимеет специфичность0, 0, 1, 0. - Селектор
divимеет специфичность0, 0, 0, 1.
Правила расчета специфичности
- Инлайновые стили (в атрибуте
style) имеют наивысшую специфичность:1, 0, 0, 0. - ID-селекторы (
#id) имеют специфичность:0, 1, 0, 0. - Классы, псевдоклассы и атрибуты (
.class,:hover,[type="text"]) имеют специфичность:0, 0, 1, 0. - Элементы и псевдоэлементы (
div,::before) имеют специфичность:0, 0, 0, 1. - Универсальный селектор (
*) и комбинаторы (например,>,+,~) не увеличивают специфичность.
Приоритеты
- Инлайновые стили (
style="...") всегда имеют наивысший приоритет. - Селекторы с
!important:- Если к стилю добавлено !important, он переопределяет все остальные правила, независимо от специфичности.
- Пример:
color: red !important;.
- Специфичность:
- Если нет
!important, применяется правило с наибольшей специфичностью.
- Если нет
- Порядок в коде:
- Если специфичность одинакова, применяется последнее объявленное правило.
Как управлять специфичностью?
- Избегайте избыточных селекторов:
- Используйте минимально необходимую специфичность.
- Например, вместо div#content используйте #content.
- Используйте классы:
- Классы имеют умеренную специфичность и легко переопределяются.
- Осторожно с
!important:- Используйте !important только в крайних случаях, так как это усложняет поддержку кода.
- Порядок объявления:
- Если специфичность одинакова, последнее объявленное правило имеет приоритет.
Вывод
- Специфичность определяет приоритет CSS-правил.
- Инлайновые стили и !important имеют наивысший приоритет.
- Используйте классы и избегайте избыточной специфичности для поддержания чистоты кода.
🚀 Источник: DeepSeek