CSS Особенности
Что такое специфика?
Если есть два или более правил CSS, которые указывают на один и тот же элемент, селектор с наивысшим значением специфичности "выиграет", и его объявление стиля будет применено к этому HTML-элементу.
Думайте о специфичности как о балле/ранге, который определяет, какое объявление стиля в конечном итоге применяется к элементу.
Посмотрите следующие примеры:
Пример 1
В этом примере мы использовали элемент "p" в качестве селектора и указали красный цвет для этого элемента. Текст будет выделен красным цветом:
<html>
<head>
<style>
p {color: red;}
</style>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
Теперь посмотрите пример 2:
Пример 2
В этом примере мы добавили селектор класса (с именем "test") и указали зеленый цвет для этого класса. Текст теперь будет зеленым (несмотря на то, что мы указали красный цвет для селектора элементов "p"). Это происходит потому, что селектору класса присвоен более высокий приоритет:
<html>
<head>
<style>
.test {color: green;}
p {color: red;}
</style>
</head>
<body>
<p class="test">Hello World!</p>
</body>
</html>
Теперь посмотрите пример 3:
Пример 3
В этом примере мы добавили селектор идентификаторов (с именем "demo"). Текст теперь будет синим, потому что селектору идентификатора присвоен более высокий приоритет:
<html>
<head>
<style>
#demo {color: blue;}
.test {color: green;}
p {color: red;}
</style>
</head>
<body>
<p id="demo" class="test">Hello
World!</p>
</body>
</html>
Теперь посмотрите пример 4:
Пример 4
В этом примере мы добавили встроенный стиль для элемента "p". Текст теперь будет розовым, потому что встроенному стилю присвоен наивысший приоритет:
<html>
<head>
<style>
#demo {color: blue;}
.test {color: green;}
p {color: red;}
</style>
</head>
<body>
<p id="demo" class="test"
style="color: pink;">Hello World!</p>
</body>
</html>
Иерархия специфичности
Каждый CSS-селектор имеет свое место в иерархии специфичности.
Существует четыре категории, которые определяют уровень специфичности селектора:
- Встроенные стили - Пример: <h1 style="color: pink;">
- IDs - Пример: #navbar
- Классы, псевдо-классы, селекторы атрибутов - Пример: .test, :hover, [href]
- Элементы и псевдо-элементы - Пример: h1, ::before
Как рассчитать специфичность?
Запомните, как вычислять специфичность!
Начните с 0, добавьте 100 для каждого значения идентификатора, добавьте 10 для каждого значения класса (или селектора псевдокласса или атрибута), добавьте 1 для каждого селектора элемента или псевдоэлемента.
Примечание: Встроенный стиль получает значение специфичности 1000, и ему всегда присваивается наивысший приоритет!< / p>
Примечание 2: Из этого правила есть одно исключение: если вы используете !important
, оно даже переопределит встроенное стили!
В таблице ниже приведены некоторые примеры того, как рассчитать значения специфичности:
Селектор | Значение специфичности | Расчет |
---|---|---|
p | 1 | 1 |
p.test | 11 | 1 + 10 |
p#demo | 101 | 1 + 100 |
<p style="color: pink;"> | 1000 | 1000 |
#demo | 100 | 100 |
.test | 10 | 10 |
p.test1.test2 | 21 | 1 + 10 + 10 |
#navbar p#demo | 201 | 100 + 1 + 100 |
* | 0 | 0 (универсальный селектор игнорируется) |
Селектор с наивысшим значением специфичности победит и вступит в силу!
Рассмотрим следующие три фрагмента кода:
Пример
A: h1
B: #content h1
C: <div id="content"><h1 style="color: #ffffff">Заголовок</h1></div>
Специфичность A равна 1 (один селектор элементов)
Специфичность B равна
101 (одна ссылка на идентификатор + один селектор элементов)
Специфичность C равна 1000 (встроенный стиль)
Поскольку третье правило (C) имеет наибольшее значение специфичности (1000),будет применено это объявление стиля.
Дополнительные примеры правил конкретизации
Равная специфичность: выигрывает последнее правило - Если одно и то же правило дважды записывается во внешнюю таблицу стилей, то выигрывает последнее правило:
Последнее правило применяется всегда.
ID селекторы имеют более высокую специфичность, чем селекторы атрибутов - Посмотрите на следующие три строки кода:
Пример
div#a {background-color: green;}
#a {background-color: yellow;}
div[id=a] {background-color: blue;}
Первое правило является более конкретным, чем два других, оно будет применяться.
Контекстные селекторы являются более конкретными, чем селектор одного элемента - Внедренная таблица стилей расположена ближе к элементу, для которого требуется применить стиль:
Пример
Из внешнего файла CSS:
#content h1 {background-color: red;}
В HTML файле:
<style>
#content h1 {
background-color:
yellow;
}
</style>
Будет применяться последнее правило.
Селектор класс превосходит любое количество селекторов элементов - селектор класса,
например: .intro
выигрывает у h1
, p
,
div
и т.д.:
Универсальный селектор и наследуемые значения имеют спецификацию 0 - *
,
body*
и подобное имеют нулевую специфичность.
Унаследованные значения также имеют спецификацию 0
.