
Шрифт в CSS – это не только выбор гарнитуры, но и точное управление тем, как текст отображается на разных устройствах, экранах и браузерах. Неправильно заданный font-family может привести к подмене шрифта системным аналогом, а отсутствие резервного списка – к визуальным сбоям при загрузке страницы. Поэтому работа со шрифтами всегда начинается с понимания каскада, приоритетов и поведения браузера при отсутствии нужного файла.
CSS позволяет задавать шрифты тремя основными способами: через системные гарнитуры, подключаемые веб-шрифты и локальные файлы. Каждый вариант имеет свои ограничения по поддержке форматов (woff, woff2, ttf) и скорости загрузки. Например, современные браузеры отдают приоритет woff2, а устаревшие версии могут игнорировать его без корректного fallback-описания.
Помимо выбора самого шрифта, важную роль играют параметры font-weight, font-style, font-size и line-height. Ошибка в числовых значениях или попытка использовать несуществующее начертание приводит к автоматической подстановке, что меняет толщину и пропорции текста. Это особенно заметно в интерфейсах, где типографика влияет на читаемость кнопок, форм и навигации.
Отдельного внимания требует управление загрузкой шрифтов. Свойство font-display определяет, будет ли текст скрыт до загрузки файла или показан с временной заменой. Неправильная настройка может вызвать резкие скачки макета при подгрузке шрифта, что ухудшает восприятие страницы и поведение элементов.
Как указать font-family и задать запасные шрифты

Свойство font-family определяет приоритетный список шрифтов, из которого браузер выбирает первый доступный вариант. Значения указываются через запятую, начиная с предпочтительной гарнитуры и заканчивая обобщённым семейством. Если браузер не находит первый шрифт, он последовательно проверяет следующие.
Имена шрифтов, состоящие из нескольких слов, обязательно заключаются в кавычки. Однословные названия и обобщённые семейства (serif, sans-serif, monospace, cursive, fantasy) указываются без кавычек. Обобщённое семейство всегда должно стоять последним, чтобы браузер мог подобрать системный аналог.
Запасные шрифты подбираются по сходству метрик: высоте строки, ширине символов и пропорциям. Это снижает визуальные сдвиги текста при подмене. Для интерфейсов чаще используют цепочки из системных шрифтов, так как они загружаются мгновенно и адаптированы под конкретную платформу.
| Тип сайта | Пример font-family |
|---|---|
| Контентный сайт | «Roboto», «Arial», sans-serif |
| Интерфейс приложения | -apple-system, BlinkMacSystemFont, «Segoe UI», sans-serif |
| Код и технические блоки | «Fira Code», «Courier New», monospace |
Не рекомендуется указывать слишком длинные списки без необходимости. Оптимально использовать 2–3 конкретных шрифта и одно обобщённое семейство. Это упрощает поддержку стилей и снижает риск некорректного отображения текста на редких конфигурациях.
Как подключить шрифты Google Fonts через CSS

Google Fonts предоставляет готовые к использованию веб-шрифты, которые подключаются напрямую через CSS без загрузки файлов на сервер. Для этого используется директива @import или ссылка link в HTML, после чего шрифт становится доступен через font-family. При работе именно с CSS чаще применяют @import, так как он не требует правок разметки.
Адрес подключения формируется на основе выбранного семейства, начертаний и поддерживаемых языков. Чем больше вариантов указано, тем выше объём загружаемых данных. Для текстовых блоков обычно достаточно 2–3 значений font-weight, например 400 и 700, вместо полного диапазона.
По умолчанию Google Fonts использует формат woff2, который поддерживается всеми современными браузерами и обеспечивает минимальный размер файлов. Дополнительные форматы подгружаются автоматически только при необходимости, поэтому ручная настройка fallback-форматов не требуется.
Для управления поведением текста при загрузке шрифта рекомендуется добавлять параметр display=swap. Он позволяет сразу отобразить текст системным шрифтом, а затем заменить его после загрузки веб-шрифта, снижая вероятность пустых блоков на странице.
После подключения шрифта его имя указывается в font-family строго так, как оно задано в Google Fonts, с учётом регистра и пробелов. Всегда следует добавлять запасное семейство, например sans-serif, чтобы избежать проблем при сетевых сбоях или блокировке внешних ресурсов.
Как подключить локальные файлы шрифтов с помощью @font-face
Директива @font-face позволяет использовать шрифты, размещённые на сервере сайта, без зависимости от внешних сервисов. Такой подход даёт полный контроль над версиями файлов, лицензией и доступностью ресурса, а также снижает риски блокировки шрифтов на стороне пользователя.
Для подключения необходимо указать имя шрифта и путь к файлам в разных форматах. Основным форматом для современных браузеров считается woff2, его рекомендуется указывать первым. При поддержке старых браузеров дополнительно подключают woff и реже ttf. Формат eot используется только при необходимости поддержки устаревших версий Internet Explorer.
Каждое начертание и стиль шрифта подключается отдельным правилом @font-face. Значения font-weight и font-style должны точно соответствовать реальным параметрам файла. Если указать неверные значения, браузер будет подменять начертание, что приведёт к искажению толщины или наклона текста.
Файлы шрифтов следует хранить в отдельной директории, например /fonts, и использовать относительные пути. Это упрощает перенос проекта между средами и предотвращает ошибки загрузки при смене домена. Имена файлов желательно стандартизировать, включая вес и стиль в названии.
После объявления @font-face шрифт используется через font-family так же, как системный. Всегда следует добавлять запасное семейство, чтобы текст корректно отображался при проблемах с загрузкой файлов или ограничениях браузера.
Как управлять начертаниями через font-weight и font-style
Свойство font-weight отвечает за толщину символов и принимает как ключевые значения (normal, bold), так и числовые диапазоны от 100 до 900 с шагом 100. При использовании веб-шрифтов важно задавать только те значения, которые реально присутствуют в подключённых файлах, иначе браузер выполнит программное утолщение или замену.
Числовые значения font-weight позволяют точнее контролировать иерархию текста. Например, для основного контента часто используют 400, для акцентов – 600, а для заголовков – 700. При работе с variable-шрифтами диапазон может быть непрерывным, но это требует поддержки со стороны браузера и корректного подключения файла.
Свойство font-style управляет наклоном текста и обычно принимает значения normal и italic. Если курсивный файл не подключён отдельно, браузер создаёт наклон искусственно, что снижает читаемость и меняет форму символов. Поэтому для каждого используемого стиля рекомендуется подключать отдельный файл шрифта.
При комбинировании font-weight и font-style браузер ищет точное совпадение объявленных параметров. Отсутствие нужной комбинации приводит к подстановке ближайшего варианта. Это особенно заметно в кнопках и навигации, где разница в толщине влияет на визуальный баланс элементов.
Для упрощения поддержки стилей начертания лучше задавать через классы, а не переопределять их на уровне отдельных элементов. Такой подход снижает риск несогласованности и упрощает контроль типографики на больших страницах.
Как задать размер текста и межстрочный интервал с font-size и line-height

Свойство font-size определяет базовый размер шрифта и может задаваться в абсолютных и относительных единицах. Для веб-интерфейсов предпочтительны rem и em, так как они масштабируются вместе с пользовательскими настройками браузера. Значение 1rem соответствует размеру шрифта корневого элемента и часто используется как отправная точка для всей типографики.
Использование пикселей оправдано в отдельных случаях, например для иконок или элементов с жёсткой сеткой, но для основного текста они ограничивают адаптивность. Для контентных блоков распространены значения в диапазоне 1–1.125rem, что обеспечивает стабильную читаемость на экранах разной плотности.
Свойство line-height управляет расстоянием между строками и напрямую влияет на восприятие длинных текстов. На практике чаще всего используют безразмерные значения, например 1.4 или 1.6, чтобы межстрочный интервал масштабировался вместе с размером шрифта. Фиксированные единицы могут приводить к наложению строк при изменении font-size.
Для абзацев рекомендуется задавать line-height на уровне контейнера, а не каждого элемента отдельно. Это снижает количество переопределений и упрощает поддержку стилей. Для заголовков межстрочный интервал обычно делают меньше, чем для основного текста, чтобы сохранить компактность блоков.
Связка font-size и line-height должна проверяться на разных ширинах экрана. При узких колонках слишком маленький интервал ухудшает восприятие, а слишком большой создаёт разрывы визуального ритма текста.
Как контролировать загрузку шрифтов с помощью font-display

Свойство font-display управляет тем, как браузер показывает текст до и после загрузки веб-шрифта. Его правильная настройка снижает визуальные сдвиги, предотвращает «невидимый текст» и улучшает восприятие страницы пользователем.
Основные значения font-display:
- auto – поведение определяется браузером; текст может быть скрыт или показан с подстановкой.
- block – текст скрывается до полной загрузки шрифта, затем отображается сразу с нужным начертанием.
- swap – сначала отображается запасной шрифт, затем после загрузки веб-шрифта выполняется замена.
- fallback – короткая фаза скрытия, после которой используется запасной шрифт, а веб-шрифт подгружается параллельно.
- optional – браузер может вообще отказаться загружать шрифт при медленном соединении.
Рекомендуется использовать swap для основного текста, чтобы избежать пустых блоков и улучшить показатели CLS (Cumulative Layout Shift). Для декоративных заголовков, где важно точное начертание, можно применять block или fallback, контролируя момент отображения.
Установка font-display производится внутри правила @font-face следующим образом:
- Объявляется имя шрифта через font-family.
- Указываются пути к файлам форматов woff2, woff или ttf.
- Добавляется font-display с выбранным значением.
Такой подход позволяет оптимизировать загрузку шрифтов, уменьшить визуальные скачки текста и улучшить восприятие страницы на любых устройствах и соединениях.
Вопрос-ответ:
Почему мой шрифт не отображается на сайте после подключения Google Fonts?
Если шрифт не отображается, проверьте несколько вещей. Во-первых, убедитесь, что имя шрифта в font-family точно совпадает с указанным в Google Fonts, включая пробелы и регистр. Во-вторых, проверьте подключение: используете ли вы @import в CSS или link в HTML, и правильный ли URL. Третье — убедитесь, что выбраны конкретные начертания и веса шрифта, которые реально загружаются. Без них браузер может использовать запасной шрифт или игнорировать файл.
Как правильно выбрать запасные шрифты для font-family?
Запасные шрифты выбираются по сходству с основным шрифтом. Это означает сопоставление толщины символов, пропорций и высоты строки. Например, если основной шрифт без засечек, стоит добавить в конце цепочки sans-serif. Для кода выбирают monospace, чтобы сохранить фиксированную ширину символов. Обычно достаточно 2–3 конкретных шрифта и одно обобщённое семейство, чтобы минимизировать визуальные сдвиги при подмене.
Как задать несколько начертаний для одного шрифта через @font-face?
Каждое начертание, например обычное, жирное или курсив, подключается отдельным правилом @font-face. Внутри указываются font-family с одним и тем же именем, путь к файлу и параметры font-weight и font-style, соответствующие конкретному файлу. Если задать неверные значения, браузер будет подставлять ближайшее начертание, что может изменить визуальную толщину или наклон текста.
Как font-display влияет на скорость отображения текста?
Свойство font-display определяет, будет ли текст показан сразу с запасным шрифтом или скрыт до загрузки веб-шрифта. Например, значение swap сначала показывает системный шрифт, а после подгрузки заменяет его на веб-шрифт. Это уменьшает время появления текста и предотвращает пустые блоки на странице, особенно при медленном соединении.
Как выбрать оптимальный font-size и line-height для абзацев на разных экранах?
Для абзацев обычно используют относительные единицы rem, чтобы текст масштабировался с настройками браузера. Размер в диапазоне 1–1.125rem обеспечивает читаемость на большинстве устройств. Межстрочный интервал задают через line-height без единиц, например 1.4–1.6, чтобы он масштабировался вместе с размером шрифта. Для узких колонок можно увеличить интервал, чтобы избежать слипания строк, а для заголовков уменьшить, чтобы сохранить компактность.
