Краткий ответ: нет, предотвратить наследование CSS невозможно. Вы можете только переопределить стили, которые установлены на родителях. Смотрите спецификацию:
Каждый элемент в документе HTML будет наследовать все наследуемые свойства от своего родителя, кроме корневого элемента (html
), у которого нет родителя. - W3C
Помимо переопределения каждого унаследованного свойства. Вы также можете использовать ключевое слово initial
, например, color: initial;
. Его также можно использовать вместе с all
, например, all: initial;
, это сбросит все свойства сразу. Пример: * +1022 *
.container {
color: blue;
font-style: italic;
}
.initial {
all: initial;
}
<div class="container">
The quick brown <span class="initial">fox</span> jumps over the lazy dog
</div>
Таблицы поддержки браузера в соответствии с Можно ли использовать ...
all
(В настоящее время нет поддержки ни в IE, ни в Edge, другие хороши)
initial
(в настоящее время нет поддержки в IE, другие хороши)
Вы можете найти это полезным, используя прямой дочерний селектор >
в некоторых случаях. Пример:
.list > li {
border: 1px solid red;
color: blue;
}
<ul class="list">
<li>
<span>HEADING 1</span>
<ul>
<li>sub-heading A</li>
<li>sub-heading B</li>
</ul>
</li>
<li>
<span>HEADING 2</span>
<ul>
<li>sub-heading A</li>
<li>sub-heading B</li>
</ul>
</li>
</ul>
Стиль границы был применен только к прямым потомкам <li>
s, так как border
не является наследуемым свойством. Но цвет текста был применен ко всем дочерним элементам, так как color
является унаследованным свойством.
Следовательно, селектор >
будет полезен только с ненаследуемыми свойствами, когда речь идет о предотвращении наследования.