Почему em переопределяет p для семейства шрифтов?

Рассмотрим следующий CSS:

* {  font-family: Gill Sans, Verdana, Arial, Helvetica, Sans-Serif}

p {  font-family: Courier; }

И тогда эта разметка...

<p>Hi there. So <em>very</em> pleased to make your acquaintance.</p>

Почему <em> показывать в Gill Sans? Или, скорее, почему подстановочный знак отменяет <p>, Я думаю, что я вижу в этом некоторую логику, если каждый тег имеет одинаковый "вес", но он все равно кажется мне "ошибкой" интуитивно... и это приводит к большей разметке для меня, поскольку я могу не предполагаю, что <em> повлияет только на стиль шрифта определенным образом.

Короче говоря, есть ли способ иметь такие "модификаторы", как <em> работать только на конкретные функции?

3 ответа

Решение

* соответствует каждому элементу, включая <em> внутри <p>,
<em> унаследовал бы шрифт от <p>, но * переопределяет это.

Вы почти никогда не должны использовать *,
Если вы хотите применить глобальный шрифт, установите его на body, так что другие правила могут переопределять его для определенных элементов и каскадировать их потомкам.

Предполагая только представленный код, единственный font-family декларация, установленная на em элемент является одним для *так оно и есть. Тогда совершенно неважно, что font-family возможно, был установлен на его родителя.

Вопрос "есть ли способ иметь такие" модификаторы ", как <em> работать только на определенные особенности "не имеет смысла, потому что <em> не является модификатором и потому что CSS в целом работает с определенными функциями. Так что если вы установите свойство на em элемент, он будет применяться, если нет другой настройки для элемента, который переопределяет его. В данном примере нет конфликта настроек: применяется только одно правило.

Я полагаю, вы могли бы изменить свой CSS и исправить это:

p, p * {  font-family: Courier; }

или использовать body селектор вместо *

Другие вопросы по тегам