Специфичность CSS
Писать селекторы вы уже умеете. В реальных таблицах стилей правила сталкиваются: два правила целят в один элемент и одно свойство. Браузер не гадает — смотрит на специфичность, а при равном весе — на порядок в файле.
Что значит специфичность?
Специфичность — вес, который браузер даёт селектору. При конфликте для этого свойства побеждает более тяжёлый селектор. Для повседневной работы запомните лестницу: inline-стиль > id > class (и атрибут / псевдокласс) > element (и псевдоэлемент). Сами * и комбинаторы вес не добавляют.
Ранг одним взглядом
Сначала выучите этот порядок. Деталей больше, но большинство новичковых тупиков решает эта лестница.
📊 Ранг специфичности CSS (повседневный)
| Тип | Примеры | Обычно побеждает |
|---|---|---|
| Inline-стиль | style="color: red" |
Почти всё в таблице стилей |
| Id | #hero, #nav |
Классы и элементы |
| Class / атрибут / псевдокласс | .card, [type="email"], :hover |
Селекторы element |
| Element / псевдоэлемент | p, h1, ::before |
Только более слабые или равные правила (потом порядок источника) |
class сильнее element
Селектор тега широкий. Класс точнее — цвет класса побеждает. Порядок важен только при равном весе.
class побеждает element
cssp {
color: #334155;
}
.note {
color: #0f766e;
}
Как читать конфликт
Для <p class="note"> подходят оба правила. .note — class; p — element. Класс побеждает → бирюзовый текст.
id сильнее class
Id тяжелее class. Для повторно используемого вида предпочитайте class; id оставляйте для уникального крючка.
id побеждает class
css.note {
color: #0f766e;
}
#title {
color: #9f1239;
}
Почему это важно
Если <h1 id="title" class="note"> стал бордовым, победил id — не из «чувства важности», а из большего веса.
Равный вес → побеждает правило ниже
Когда у двух правил одинаковая специфичность, для этого свойства побеждает то, что стоит позже в CSS.
Одинаковый вес — решает порядок источника
css.card {
border-color: #cbd5e1;
}
.card {
border-color: #0f766e;
}
Привычка при ничьей
Оба селектора — один class. Второе правило .card побеждает → бирюзовая рамка. Хотели первый цвет — проверьте, не совпадает ли ещё более сильный селектор.
Комбинации селекторов на практике
Селекторы комбинируются: nav a.button:hover сильнее голого a, потому что добавлены class и псевдокласс. Не нужен калькулятор на каждой строке — спросите: «Есть id? Лишний class? Или только теги?»
Комбинированный селектор бьёт голый element
cssa {
color: #334155;
}
nav a.button {
color: #0f766e;
}
Про !important
!important может обойти обычную специфичность. Огнетушитель, не ежедневный инструмент. Злоупотребление усложняет поздние правки. Сначала структура и более ясные селекторы.
Практические привычки
- Для вида class; id для уникального крючка
- Застряли? На какой ступени лестницы каждый селектор?
- Равный вес → смотрите правило ниже в файле
- Не стройте длинные цепочки только чтобы «победить» — ломаются при смене HTML
!importantв конце, не в начале
Попробуйте сами
- Страница с
<p class="note">Привет</p>,<h1 id="title" class="note">Заголовок</h1>и<a class="button">Вперёд</a>внутри<nav>. - Пара element против class (
pсерый,.noteбирюзовый) — абзац note бирюзовый. - Добавьте
#title { color: #9f1239; }— заголовок станет бордовым несмотря на.note. - Два правила
.cardдляborder-color— побеждает второе. - По желанию: сравните
a { … }иnav a.button { … }на ссылке в nav.
Частые ошибки
- Думать, что «больше объявлений» поднимают специфичность — нет
- Считать, что последний файл всегда бьёт id — больший вес всё равно побеждает
- Делать
#всёили!importantрешением по умолчанию - Путать ступени (считать class как element)
- Забывать, что при равном весе решает порядок источника
Кратко
- Специфичность решает конфликты по одному свойству
- Повседневная лестница: inline > id > class/атрибут/псевдокласс > element/псевдоэлемент
- Равный вес → правило ниже
- Для вида class; id и
!importantредко - Сначала ступень, потом порядок
- Практикуйтесь с
p/.note/#title, пока победитель не станет очевиден
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху