Наследование — это когда дочерний элемент автоматически берёт стиль у родителя, если сам не задаёт своё значение. Не все свойства так умеют: одни передаются, другие — строго «только для себя».
Какие свойства наследуются (и что это значит на практике)
К наследуемым относятся в основном свойства, которые про «как выглядит текст» и «в каком направлении идёт поток».
Примеры:
body { font-family: Arial, sans-serif; color: #333; line-height: 1.6; text-align: left; }
HTML:
<body> <h1>Заголовок</h1> <p>Абзац с текстом.</p> <ul> <li>Пункт списка</li> </ul> </body>

Что произойдёт:
font-family,color,line-height,text-alignприменятся ко всем вложенным элементам: заголовкам, абзацам, пунктам списка.- То есть ты один раз задаёшь стиль для
body— и весь текст на странице сразу становится единообразным.
Типичные наследуемые свойства:
colorfont-*(family, size, weight, style, variant, etc.)line-heighttext-align,text-indent,text-transformletter-spacing,word-spacingdirection,unicode-bidi- некоторые редко используемые вроде
cursor,visibility
Какие свойства НЕ наследуются (почему приходится задавать явно)
Большинство свойств, которые про «размеры, рамки, отступы и позиционирование», не передаются детям. Иначе верстка бы «разъезжалась»: например, если родитель задаст margin, все дети тоже получили бы такие же внешние отступы — и страница выглядела бы странно.
Пример:
.box { border: 2px solid blue; padding: 20px; margin: 40px; width: 300px; }
<div class="box"> <div class="inner">Внутренний блок</div> </div>

Что будет:
.innerне получитborder,padding,margin,width.- У него будут свои дефолтные значения (или те, что ты явно пропишешь).
Типичные ненаследуемые свойства:
margin-*,padding-*border-*,outline-*width,height,min-width,max-widthи аналогиposition,top,right,bottom,leftdisplay,float,clearbackground-*(цвет, картинка, позиция и т.п.)box-shadowoverflow
Как проверить, наследуется ли свойство
В спецификации CSS у каждого свойства есть строка Inherited: yes или Inherited: no. В жизни проще запомнить группы:
- «про текст» — чаще наследуется.
- «про коробку/размеры/позицию» — почти никогда.
Ключевое слово inherit: принудительно включить наследование
Если свойство по умолчанию не наследуется, можно явно сказать: «возьми значение у родителя».
.parent { border-color: red; } .child { border-color: inherit; /* возьмёт red от родителя */ }
Или для всех границ сразу:
.child { border: inherit; }
Это удобно, когда хочешь, чтобы дочерний элемент повторял какое‑то значение родителя, но не копировать его вручную.
Ключевое слово initial: сбросить до значения по умолчанию
Иногда нужно, чтобы элемент не брал стиль от родителя и не применял своё, а использовал браузерное «по умолчанию».
.special-text { color: initial; /* будет не цвет родителя, а дефолтный цвет браузера */ }
Для color это обычно чёрный. Для margin — 0, для border — none и т.д.
Ключевое слово unset: умное поведение
unset работает по-разному:
- если свойство наследуемое (например,
color) → ведёт себя какinherit; - если ненаследуемое (например,
margin) → ведёт себя какinitial.
.reset-all { color: unset; /* возьмёт цвет у родителя */ margin: unset; /* станет как у браузера по умолчанию (обычно 0) */ }
Практический пример: типичная ловушка
Ты хочешь, чтобы все ссылки внутри .content были красными:
.content { color: red; }
HTML:
<div class="content"> <a href="#">Ссылка</a> </div>
Ссылка не станет красной, потому что у <a> в браузере есть свои стили (часто синий цвет и подчёркивание). color наследуется, но браузерный стиль ссылки перебивает наследование за счёт своей специфичности.
Как сделать правильно:
.content a { color: red; text-decoration: none; }
Теперь явно сказано: «для ссылок внутри .content — красный цвет».
Ещё один пример: фон и цвет текста
.panel { background: #eee; color: #000; } .panel .inner { /* тут нет background и color — они не наследуются автоматически */ }
Результат:
- У
.innerфон будет не#eee, а тем, что задано выше по дереву или дефолтным (часто белый). - Цвет текста останется чёрным, потому что
colorнаследуется.
Если нужен такой же фон — надо задать явно:
.panel .inner { background: inherit; /* или background: #eee; */ }
Шпаргалка: быстрый ориентир
| Группа свойств | Наследуется? | Пример |
|---|---|---|
| Цвет и текст | Да | color, font-family, line-height |
| Отступы и рамки | Нет | margin, padding, border |
| Размеры и позиция | Нет | width, height, position, top |
| Фон и тени | Нет | background, box-shadow |
| Отображение | Нет | display, float |
Практические советы
- Не рассчитывай, что
paddingилиborder«спустится» к детям. Если нужно — задавай явно или используйinherit. - Если хочешь единый цвет текста на всей странице — ставь
colorнаbody. Это сработает почти везде. - Для ссылок, кнопок и форм часто приходится переопределять стили явно, потому что браузеры дают им свои правила.
- Избегай
!importantи длинных цепочек селекторов ради «победы» над наследованием — лучше явно задать нужное свойство там, где оно нужно.
