Специфичность в CSS

Специфичность CSS определяет какой селектор будет применён к тегу, если у тега несколько правил.
Например, какого цвета будет абзац из кода ниже?
<style>
#abzac { color: red; }
.abzac { color: blue; }
p { color: orange; }
</style>
<p id="abzac" class="abzac">
Изучаем понятие специфичности в языке CSS.
</p>
Ответ: Красным. Почему именно красный, а не синий или оранжевый и отвечает понятие «специфичности в CSS».
Какой именно селектор применить к конкретному тегу, браузер определяет по «весу» селектора.
Самый большой вес у идентификаторов (id), затем у классов (class), потом у тегов (tag). Вот как это выглядит в таблице:
| tag, ::псевдоэлемент | .класс, :псевдокласс, селектор атрибута | #идентификатор | |
| Специфичность: | 0 | 1 | 2 |
По таблице мы видим что наивысший приоритет у идентификаторов. В современной CSS-верстке обычно используют псевдоэлементы, классы и псевдоклассы.
Важные замечания о специфичности в CSS
Если у селекторов одинаковый вес, то применяется тот который располагается в коде ниже.
Атрибут style=" " внутри тега, перебивает любые селекторы, в коде ниже, абзац будет зелёного цвета.
<style>
#abzac { color: red; }
.abzac { color: blue; }
p { color: orange; }
</style>
<p id="abzac" class="abzac" style="color: green;">
Изучаем понятие специфичности в языке CSS.
</p>
Самый наивысший приоритет у модификатора !important, в коде ниже, абзац будет синего цвета.
<style>
#abzac { color: red; }
.abzac { color: blue !important; }
p { color: orange; }
</style>
<p id="abzac" class="abzac" style="color: green;">
Изучаем понятие специфичности в языке CSS.
</p>
Два класса перекрывают один класс, но тысяча классов не сможет перекрыть один идентификатор.
Универсальный селектор * и комбинаторы ( , >, +, ~), не влияют на специфичность.
Псевдокласс :not() в специфичности не участвует, но селекторы расположенные внутри этого псевдокласса участвуют.