← Назад к вопросам
Какой из двух классов со свойством отработает в CSS?
2.2 Middle🔥 221 комментариев
#HTML и CSS
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Специфичность CSS (Specificity)
Вопрос о том, какой класс отработает, зависит от специфичности селекторов — это механизм определения приоритета CSS правил.
Основные правила специфичности
Каждый селектор имеет вес, рассчитываемый по формуле:
Специфичность = (Inline styles, IDs, Classes/Attributes/Pseudo-classes, Elements)
a b c d
Примеры расчёта:
/* Элемент: 0,0,0,1 */
p { color: blue; }
/* Класс: 0,0,1,0 */
.highlight { color: red; }
/* ID: 0,1,0,0 */
#main { color: green; }
/* Несколько классов: 0,0,2,0 */
.container.active { color: orange; }
/* Класс + элемент: 0,0,1,1 */
p.highlight { color: purple; }
/* ID + класс + элемент: 0,1,1,1 */
#main .highlight p { color: black; }
/* Встроенный стиль: 1,0,0,0 */
<p style="color: yellow;">Текст</p>
/* !important: переопределяет всё */
p { color: red !important; } /* Победит всё */
Пример из вопроса
<div class="class1 class2">Текст</div>
.class1 {
color: red;
}
.class2 {
color: blue;
}
Оба селектора имеют одинаковую специфичность: 0,0,1,0
В этом случае отработает последний в коде: .class2 с цветом blue.
Каскадность (Cascading)
Если две правила имеют одинаковую специфичность, используется правило "последний написанный побеждает":
.button { background: red; }
.button { background: blue; } /* Это отработает */
Более сложный пример
<p class="highlight" id="main">Текст</p>
p { color: blue; } /* 0,0,0,1 */
.highlight { color: red; } /* 0,0,1,0 */
#main { color: green; } /* 0,1,0,0 */
Отработает ID селектор (color: green) потому что ID имеет вес 0,1,0,0, что больше чем класс 0,0,1,0 и элемент 0,0,0,1.
Иерархия приоритета
- !important — высший приоритет (злоупотреблять нельзя)
- Встроенные стили (атрибут style) — 1,0,0,0
- ID селекторы — 0,1,0,0
- Классы, атрибуты, псевдо-классы — 0,0,1,0
- Элементы и псевдо-элементы — 0,0,0,1
- Наследование — самый низкий приоритет
Примеры с атрибутами и псевдо-классами
/* Атрибут: 0,0,1,0 */
input[type="text"] { border: 1px solid blue; }
/* Псевдо-класс: 0,0,1,0 */
a:hover { color: red; }
/* Псевдо-элемент: 0,0,0,1 */
p::first-line { font-weight: bold; }
/* Комбинирование: класс + элемент + псевдо-класс: 0,0,2,1 */
p.active:hover { color: red; }
Best Practices
- Избегайте ID селекторов в CSS (очень высокая специфичность)
- Используйте классы для стилизации (0,0,1,0)
- Ограничивайте цепочки селекторов (не делайте их слишком глубокими)
- Не используйте !important без крайней необходимости
- Применяйте методологию BEM для предсказуемой специфичности
- Проверяйте инструменты разработчика (DevTools), чтобы увидеть какой селектор отработал
/* ✅ Хорошо — низкая специфичность, легко переопределить */
.button { background: blue; }
/* ❌ Плохо — высокая специфичность, сложно переопределить */
#header .navigation div.menu-item a { color: red; }
Понимание специфичности — это основа для написания масштабируемого и поддерживаемого CSS кода.