Специфичность селектора - это показатель, определяющий приоритет применения CSS-правил к элементам на веб-странице. Специфичность селектора определяется на основе количества и типа селекторов, которые используются в CSS-правиле.

Специфичность селектора
Inline selector1000
id100
Class, Attribute, Pseudo-class10
Element / Pseudo-element1
Inline selectoridClass, Attribute, Pseudo-classElement / Pseudo-element
Inline selecto1000
id0100
Class, Attribute, Pseudo-class0010
Element / Pseudo-element0001

Каждый тип селектора имеет свой вес, который используется для вычисления общей специфичности селектора. Вес селектора вычисляется следующим образом:

  1. Для каждого типа селектора определяется его вес:
    • Идентификаторный селектор (#header): 100
    • Селектор класса, селектор атрибута, селектор псевдокласса (.red-text[href="https://example.com"]:hover): 10
    • Типовой селектор, селектор псевдоэлемента (p::first-line): 1
    • Универсальный селектор (*): 0
  2. Для каждого селектора в CSS-правиле вычисляется его общий вес, который определяется суммой весов его типов селекторов.
  3. Если два или более селектора имеют одинаковый общий вес, то селектор, который был указан последним, будет иметь более высокий приоритет.

Например, в CSS-правиле #header .red-text и в CSS-правиле p.red-text первый селектор имеет общий вес 110 (100 для идентификаторного селектора и 10 для класса), а второй селектор имеет общий вес 11 (1 для типового селектора и 10 для класса). Поэтому первый селектор имеет более высокий приоритет и будет применяться к элементам с идентификатором header, которые имеют класс red-text.

Специфичность селектора важна для правильного выбора приоритета CSS-правил, особенно в случае конфликта между несколькими правилами.

Практическая задача

1.  li //
2.  #main.item //
3.  h1 + [href = "test"] //
4.  #test p //
5.  li.item.main //
6.  #test //
7.  ul ol li.item //
8.  ul li //
9.  #test:not(.main) //
10. ul ol+li //
11. a:hover //
12. p::first-line //
13. h2 strong //
14. span.test ul li //
1.  li // 1
2.  #main.item //110
3.  h1 + [href = "test"] // 11
4.  #test p // 101
5.  li.item.main // 21
6.  #test // 100
7.  ul ol li.item // 13
8.  ul li // 2
9.  #test:not(.main) // 110
10. ul ol+li // 3
11. a:hover // 11
12. p::first-line // 2
13. h2 strong // 2
14. span.test ul li // 13

Назад