Что такое специфичность CSS-селекторов и как она работает?
Браузер определяет, какие стили отображать для элемента, в зависимости от специфичности правил CSS. Мы предполагаем, что браузер уже определил правила, соответствующие конкретному элементу. Среди соответствующих правил для каждого правила рассчитывается специфичность, состоящая из четырех значений, разделенных запятыми: a, b, c, d
, на основе следующего:
a
указывает, используются ли встроенные стили. Если объявление свойства является встроенным стилем элемента,a
равно 1, иначе 0.b
— это количество селекторов ID.c
— это количество селекторов классов, атрибутов и псевдоклассов.d
— это количество селекторов тегов и псевдоэлементов.
Полученная специфичность — это не оценка, а матрица значений, которые можно сравнивать по столбцам. При сравнении селекторов для определения того, какой из них имеет наивысшую специфичность, смотрите слева направо и сравнивайте наибольшее значение в каждом столбце. Таким образом, значение в столбце b
будет переопределять значения в столбцах c
и d
, независимо от того, какими они могут быть. В таком случае специфичность 0,1,0,0
будет больше, чем 0,0,10,10
.
В случаях равной специфичности: последнее правило является тем, которое учитывается. Если вы написали одно и то же правило в вашей таблице стилей (независимо от того, внутренняя она или внешняя) дважды, то нижнее правило в вашей таблице стилей ближе к стилизуемому элементу, оно считается более специфичным и, следовательно, будет применено.
Я бы писал правила CSS с низкой специфичностью, чтобы их можно было легко переопределить при необходимости. При написании кода библиотеки компонентов пользовательского интерфейса CSS важно, чтобы они имели низкую специфичность, чтобы пользователи библиотеки могли переопределять их, не используя слишком сложные правила CSS только ради увеличения специфичности или прибегая к !important
.