Я пишу HTML-документ с сочетанием английского и китайского текста. Китайский не мой первый язык, поэтому я предпочитаю, чтобы китайский текст был немного больше обычного, чтобы я мог ясно видеть штрихи. Я пытаюсь создать документ для достижения этого.
Очевидное решение CSS:
:lang(zh-Hans) {font-size: 1.2em;}
имеет менее очевидную проблему. На каждом вложенном элементе (любого вида) размер шрифта умножается на еще 20%. В следующем примере каждое китайское предложение больше предыдущего.
<html>
<head>
<style type="text/css">
:lang(zh-Hans) {font-size: 1.2em;}
</style>
</head>
<body>
<div lang="zh-Hans">
我不懂。
<span>我不懂。</span>
<span><span>我不懂。</span></span>
</div>
</body>
</html>
Я могу переключиться на абсолютный размер:
:lang(zh-Hans) {font-size: 20px;}
но это делает все китайские тексты одинакового размера, так что, например, заголовки больше не больше основного текста.
Возможны обходные пути. Я мог бы реструктурировать свой документ, чтобы языковые метки всегда применялись к самому вложенному элементу. Или я мог бы добавить множество правил CSS для всех контекстов, в которых может отображаться китайский текст. Но это работа, которую я бы хотел избежать.
Можно ли применить относительный размер шрифта к тексту с тегами, не добавляя добавление к вложенным элементам?
Каскадирование em
- довольно раздражающая проблема, которая, к счастью, имеет простое современное решение: root em (rem
).
Одна из проблем с использованием "em" в качестве размеров шрифта заключается в том, что они каскадируются, поэтому вы навсегда пишете правила, которые выбирают вложенные элементы, чтобы вернуть их обратно в 1em; В CSS3 теперь есть rem ("root em"), чтобы предотвратить эту проблему. Просто объявляйте px backback, и вы можете использовать его сегодня.
Для деталей gory ознакомьтесь с спецификацией CSS3.
font-size:1.2rem
(обратите внимание на «r»)? Больше о root em здесь .