#css #fonts #webfonts
Вопрос:
Я пишу крошечный веб-сайт для книги, которая в настоящее время печатается, и хочу соответствовать слегка эксцентричному шрифту под названием Cronos Pro, который он использует для своих заголовков. В настоящее время я делаю это со следующим CSS:
header, h1, h2, h3 {
font-family: cronos-pro, sans-serif;
}
Cronos Pro поставляется с использованием нашей подписки Adobe Creative Cloud, и в соответствии с условиями их лицензии она должна быть загружена следующим образом:
<link rel="stylesheet" href="https://use.typekit.net/xxxxxxx.css"/>
Это просто создает набор @font-face
правил, определяющих шрифт, и все это прекрасно работает. Тем не менее, я чувствую, что должен сохранить резерв sans-serif
на случай, если шрифт временно недоступен или для старого браузера, который его не поддерживает.
Однако Cronos Pro-это очень компактный шрифт. Если я знаю, что браузер использует его, я хочу, чтобы он отображался больше, как если бы я добавил font-size: 125%
его в CSS. Но если браузер вернется к своему шрифту без засечек по умолчанию, я хочу, чтобы он был размером 100%.
Я думал, что смогу сделать это следующим образом, но Firefox сообщает мне, что это недопустимое значение свойства:
font: cronos-pro 125%, sans-serif;
Есть ли хороший способ добиться этого, имея в виду @font-face
, что правило находится вне моего контроля?
Комментарии:
1. Вы могли бы добавить несколько других резервных шрифтов, которые более сжаты, а затем имеют идеальный размер…
font-family: cronos-pro, Tahoma, Arial, sans-serif;
с без засечек вы не знаете, какой шрифт будет выбран, поэтому вы не можете придумать реалистичный размер.2. Да, в реальном коде уже есть несколько более конкретных резервных вариантов, но все они похожи по размерам друг на друга и на шрифты без засечек по умолчанию в системах, которые я тестировал. Это шрифт Cronos-Pro, который особенно мал.
Ответ №1:
Вы можете использовать JavaScript для добавления таблицы стилей с вашим font-size: 125%
тегом, если и когда Chronos Pro успешно загрузится:
<script>
{
let font = "cronos-pro";
let styleSheet = document.createElement('style');
document.head.appendChild(styleSheet);
document.fonts.ready.then(function () {
if( document.fonts.check(`1em ${font}`) ){
styleSheet.sheet.insertRule('header, h1, h2, h3 { font-size: 125%; }')
}
});
}
</script>
Не уверен, что это «хороший способ» сделать это, но в крайнем случае он должен сработать. Я все еще немного новичок в веб — разработке.
Комментарии:
1. Спасибо. Это гениальное решение, которое работает, хотя я разделяю ваши сомнения относительно того, хорошее ли это решение. Давайте посмотрим, не придумает ли кто-нибудь более элегантное решение, прежде чем я приму это.