Кратко
СкопированоНаследование в CSS — это способность элементов-потомков перенимать правила форматирования (свойства CSS), которые присвоены их предкам.
Пример
Скопировано<p style="color: red"> Весь <span>текст</span> в <em>этом</em> абзаце будет <b>красным</b>.</p>
<p style="color: red"> Весь <span>текст</span> в <em>этом</em> абзаце будет <b>красным</b>. </p>
Как понять
СкопированоДля некоторых HTML-тегов предопределены особые CSS-свойства по умолчанию (их ещё называют user agent
-стили или стили от браузера), которые характерны только для конкретно этих элементов, например, margin
для <body>
, color
для ссылок или font
для <b>
. Их можно переопределить, но некоторые свойства (цвета текста, размера шрифта, внешнего вида курсора и другие) будут применяться для любых вложенных элементов, пока для них не будет указано иного значения. Такая наследуемость не случайна и обусловлена одним очень интересным CSS-значением у этих свойств — inherit
, что буквально и значит «наследуемое».
Если у какого-то свойства указать значение inherit
— оно будет взято у верхнего «родителя». Для некоторых CSS-свойств это значение указано по умолчанию.
Наследуемые свойства
Скопировано- Свойства шрифта:
font
и его «производных»:font
,- style font
,- variant font
,- weight font
,- stretch font
и- size font
;- family color
иline
.- height - Свойства межбуквенных и «межсловных» расстояний:
letter
,- spacing word
и- spacing white
.- space - Параметры текста:
text
,- align text
,- indent text
,- shadow text
;- transform - оформление пунктов списков:
list
,- style list
,- style - type list
.- style - position - Внешний вид курсора:
cursor
и отображение содержимого элементаvisibility
.
Например, в отличие от color
, который применится к подписи, ненаследуемое свойство border
не будет применено к вложенным элементам:
<figure> <img src="doggo-up.svg"> <figcaption>Дока Дог</figcaption></figure>
<figure> <img src="doggo-up.svg"> <figcaption>Дока Дог</figcaption> </figure>
figure { border: 3px solid #18191c; color: blue;}
figure { border: 3px solid #18191c; color: blue; }
Но если мы укажем у <img>
свойство border
как inherit
(т. е. наследуемое):
img { border: inherit;}
img { border: inherit; }
Подсказки
Скопировано💡 Другой пример наследования — использование вместо указания цвета значения current
, который равен цвету текста текущего элемента, т. е. значению свойства color
. Если color
текущего элемента равен inherit
(т. е. наследует значение «родителя»), то и current
также будет соответствовать текущему значению color
«родителя». Причём это ключевое слово можно указывать в качестве значения для любого свойства, где значением является цвет, не только для color
. См. раздел «На практике».
Значения rem
и em
— также частный случай наследования кратного размера текста («родителя», если указан em
и корневого тега в случае с rem
).
Полный список наследуемых по умолчанию CSS-свойств помечен в спецификации в колонке «Inherited?» значением yes
.
Значение любого CSS-свойства можно «позаимствовать» (унаследовать) у родителя. Если «родителя» нет, inherit
будет соответствовать значению по умолчанию для этого элемента.
На практике
Скопированосоветует Скопировано
🛠 Удобно делать всякие трюки, используя current
. Мы не меняем явно цвет рамки по наведению курсора, но он меняется вслед за color
.
<button class="magick-btn">Волшебная кнопка</button>
<button class="magick-btn">Волшебная кнопка</button>
.magick-btn { border: 2px solid; border-color: currentColor; border-radius: 6px; padding: 9px 15px; color: blue; background-color: transparent;}.magick-btn:hover { color: pink;}
.magick-btn { border: 2px solid; border-color: currentColor; border-radius: 6px; padding: 9px 15px; color: blue; background-color: transparent; } .magick-btn:hover { color: pink; }