Почему 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
селектор вместо *