Шрифты в CSS: Полное руководство от основ до тонкостей веб-типографики
Оглавление
- Основы: Свойство font-family и веб-безопасные шрифты
- Подключение пользовательских шрифтов: @font-face
- Детальное управление отображением: основные CSS-свойства
- Комплексное свойство font (shorthand)
- Продвинутая типографика: OpenType-фичи в CSS
- Переменные шрифты (Variable Fonts)
- Оптимизация производительности и загрузки шрифтов
- Доступность (Accessibility) шрифтов
- Практические примеры и типовые сценарии
- Распространённые ошибки и лучшие практики
- Заключение
Визуальное восприятие веб-страницы на 95% состоит из текста — это делает типографику фундаментальным элементом дизайна. CSS-свойства для работы со шрифтами эволюционировали от примитивного font-family до сложной системы с поддержкой переменных шрифтов и оптимизацией производительности.
Современный разработчик должен не только знать синтаксис, но и понимать, как выбор шрифта влияет на скорость загрузки, доступность и пользовательский опыт. В этом руководстве мы пройдем путь от базовых свойств font css до продвинутых техник, которые помогут создавать быстрые, красивые и удобные интерфейсы.
Основы: Свойство font-family и веб-безопасные шрифты
Синтаксис font-family: каскад и резервные варианты
Свойство font-family работает по принципу каскада: браузер пытается загрузить первый шрифт в списке, и если он недоступен, переходит к следующему. Это создает важную стратегию «резервных вариантов».
body {
font-family: 'Roboto', Arial, Helvetica, sans-serif;
}
В этом примере:
- Браузер пытается загрузить
Roboto - Если
Robotoнедоступен, используетсяArial - Если и
Arialнет —Helvetica - В крайнем случае — любой
sans-serifшрифт системы
Важное правило: всегда завершайте стек общим семейством (serif, sans-serif, monospace, cursive, fantasy). Это гарантирует, что текст всегда будет отображен в нужной стилистике.
/* Правильно с кавычками для шрифтов с пробелами */
.heading {
font-family: 'Open Sans', 'Segoe UI', Tahoma, sans-serif;
}
/* Для моноширинных текстов */
.code-block {
font-family: 'Fira Code', 'Courier New', monospace;
}
Веб-безопасные шрифты (Web-Safe Fonts)
Веб-безопасные шрифты — это гарнитуры, доступные на большинстве операционных систем. Их использование гарантирует мгновенное отображение без загрузки внешних ресурсов.
Основные стеки веб-безопасных шрифтов:
/* Sans-serif (без засечек) */
.sans-example {
font-family: Arial, Helvetica, sans-serif;
/* Альтернатива: */
font-family: Tahoma, Verdana, sans-serif;
}
/* Serif (с засечками) */
.serif-example {
font-family: Georgia, 'Times New Roman', Times, serif;
}
/* Monospace (моноширинные) */
.mono-example {
font-family: 'Courier New', Courier, 'Lucida Console', monospace;
}
Когда использовать:
- Административные панели и внутренние инструменты
- Лендинги с критической важностью скорости
- Текст, который должен отображаться моментально (интерфейсные элементы)
- Резервные варианты при использовании кастомных шрифтов
Подключение пользовательских шрифтов: @font-face
Правило @font-face: синтаксис и ключевые дескрипторы
Правило @font-face — мост между вашим сервером и браузером. Оно сообщает браузеру, где найти файл шрифта и как его использовать.
@font-face {
font-family: 'MyCustomFont';
src: url('fonts/MyFont.woff2') format('woff2'),
url('fonts/MyFont.woff') format('woff');
font-weight: 400;
font-style: normal;
font-display: swap;
}
Ключевые параметры:
font-family— имя, которое вы будете использовать в CSSsrc— путь к файлу, может быть несколько источниковformat()— подсказка браузеру о формате файлаfont-weightиfont-style— указание начертания (особенно важно для правильного выбора italic/bold)
Форматы шрифтов: от EOT до WOFF2
Эволюция форматов отражает борьбу за совместимость и эффективность:
@font-face {
font-family: 'ModernFont';
/* Идеальный современный стек */
src: url('font.woff2') format('woff2'), /* Самый современный и сжатый */
url('font.woff') format('woff'), /* Хорошая поддержка */
url('font.ttf') format('truetype'); /* Максимальная совместимость */
}
Сравнение форматов:
- WOFF2 (Web Open Font Format 2) — сжатие на 30% лучше чем WOFF, поддержка всеми современными браузерами
- WOFF — широко поддерживается, хорошее сжатие
- TTF/OTF — универсальные, но тяжелые форматы
- EOT — устаревший, только для IE8-
- SVG — практически не используется
Дополнительные дескрипторы @font-face
Параметры font-display, unicode-range и size-adjust в правиле подключения шрифта позволяют тонко контролировать поведение при загрузке, оптимизировать объём передаваемых данных и корректировать метрики для визуальной стабильности.
Подключение разных начертаний:
/* Regular */
@font-face {
font-family: 'Inter';
src: url('Inter-Regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
}
/* Italic */
@font-face {
font-family: 'Inter';
src: url('Inter-Italic.woff2') format('woff2');
font-weight: 400;
font-style: italic;
}
/* Bold */
@font-face {
font-family: 'Inter';
src: url('Inter-Bold.woff2') format('woff2');
font-weight: 700;
font-style: normal;
}
/* Bold Italic */
@font-face {
font-family: 'Inter';
src: url('Inter-BoldItalic.woff2') format('woff2');
font-weight: 700;
font-style: italic;
}
font-display: стратегия отображения
@font-face {
font-family: 'BlogFont';
src: url('blogfont.woff2') format('woff2');
font-display: swap; /* Текст сразу отображается системным шрифтом, затем заменяется */
}
@font-face {
font-family: 'LogoFont';
src: url('logofont.woff2') format('woff2');
font-display: block; /* Текст невидим до загрузки (для критически важных шрифтов) */
}
Значения font-display:
auto— поведение по умолчанию браузера (обычно = block)block— короткий период невидимого текста, затем заменаswap— мгновенный показ резервного шрифта, затем заменаfallback— очень короткий block, затем swap только если шрифт загрузился быстроoptional— похоже на fallback, но браузер может вообще не показывать кастомный шрифт
unicode-range: оптимизация для кириллицы
@font-face {
font-family: 'OptimizedFont';
src: url('font-latin.woff2') format('woff2');
unicode-range: U+0000-00FF; /* Только базовая латиница */
}
@font-face {
font-family: 'OptimizedFont';
src: url('font-cyrillic.woff2') format('woff2');
unicode-range: U+0400-04FF; /* Кириллические символы */
}
Детальное управление отображением: основные CSS-свойства
Точный контроль над внешним видом текста достигается через комплекс свойств, задающих размер, насыщенность, высоту строки и межсимвольное расстояние, что формирует базис читаемости и визуальной иерархии.
Размер: свойство font-size
Выбор единиц измерения определяет адаптивность и доступность вашей типографики.
/* Плохо для адаптивности */
.old-school {
font-size: 16px; /* Фиксированный размер */
}
/* Хорошо для адаптивности */
.modern {
font-size: 1rem; /* Относительно корневого размера */
}
/* Отлично для сложных адаптивных систем */
.responsive-heading {
font-size: clamp(1.5rem, 3vw, 2.5rem);
/* Минимум 1.5rem, идеально 3% от ширины окна, максимум 2.5rem */
}
Сравнение единиц:
px— абсолютные пиксели, игнорируют настройки браузераem— относительно размера родителя (может вызвать каскадный эффект)rem— относительно размера корневого элемента (html)%— относительно родителя, как emvw/vh— относительно ширины/высоты окнаch— относительно ширины символа «0»
Лучшая практика — система на rem:
html {
font-size: 16px; /* Базовый размер для rem */
}
@media (min-width: 768px) {
html {
font-size: 18px; /* Увеличиваем базовый размер на планшетах */
}
}
@media (min-width: 1200px) {
html {
font-size: 20px; /* И еще на десктопах */
}
}
h1 {
font-size: 2.5rem; /* Всегда пропорционально базовому размеру */
}
p {
font-size: 1.125rem; /* 18px при базовом 16px */
}
Насыщенность и стиль: font-weight и font-style
font-weight: числовые значения против ключевых слов
/* Старый подход */
.bold-text {
font-weight: bold; /* Всегда 700, не гибко */
}
/* Современный подход */
.variable-weight {
font-weight: 650; /* Тонкая настройка с variable fonts */
}
/* Полный диапазон стандартных значений */
.thin { font-weight: 100; }
.extra-light { font-weight: 200; }
.light { font-weight: 300; }
.normal { font-weight: 400; }
.medium { font-weight: 500; }
.semi-bold { font-weight: 600; }
.bold { font-weight: 700; }
.extra-bold { font-weight: 800; }
.black { font-weight: 900; }
font-style: разница между italic и oblique
.real-italic {
font-style: italic; /* Использует специальный курсивный вариант шрифта */
}
.fake-slanted {
font-style: oblique 14deg; /* Наклоняет обычные глифы на указанный угол */
}
.mixed-example {
font-style: oblique 10deg italic; /* Браузер выберет italic если доступен */
}
Высота строки: свойство line-height
line-height критически важен для читаемости. Безразмерные значения — лучший выбор.
/* Плохо - наследуется фиксированное значение */
.problem {
line-height: 24px;
font-size: 20px; /* Высота строки 24px */
}
.problem small {
font-size: 14px; /* Высота строки все еще 24px - слишком много! */
}
/* Хорошо - пропорциональное значение */
.solution {
line-height: 1.5; /* 1.5 × font-size */
font-size: 20px; /* Высота строки 30px */
}
.solution small {
font-size: 14px; /* Высота строки 21px - идеально! */
}
Рекомендации по line-height:
- Основной текст: 1.5–1.6
- Заголовки: 1.2–1.3
- Длинный текст (статьи): до 1.8
- Код: 1.4–1.5
Дополнительные свойства для тонкой настройки
.typography-demo {
/* Капители (маленькие заглавные) */
font-variant-caps: small-caps;
/* Межбуквенный интервал */
letter-spacing: 0.5px;
/* Межсловный интервал */
word-spacing: 0.1em;
/* Выравнивание текста */
text-align: justify;
text-justify: inter-word;
}
Комплексное свойство font (shorthand)
Свойство font позволяет объединить несколько отдельных свойств в одной строке.
Полный синтаксис свойства font
/* Полный синтаксис в правильном порядке */
.full-example {
font: italic small-caps 700 1.2rem/1.5 'Segoe UI', Roboto, sans-serif;
/* font-style font-variant font-weight font-size/line-height font-family */
}
Разбор примера:
- italic → font-style: italic
- small-caps → font-variant: small-caps
- 700 → font-weight: 700
- 1.2rem/1.5 → font-size: 1.2rem; line-height: 1.5
- ‘Segoe UI’, Roboto, sans-serif → font-family
Важные особенности и типичные ошибки
.error {
font: bold italic; /* НЕ РАБОТАЕТ! */
}
/* Правильно: минимум font-size и font-family */
.correct {
font: 1rem sans-serif; /* Работает, остальное - значения по умолчанию */
}
/* Частичное использование */
.partial {
font: 1.2em/1.6 'Open Sans'; /* Только размер, высота строки и семейство */
/* Дополнительные свойства задаются отдельно */
font-weight: 600;
letter-spacing: 0.5px; /* Не входит в сокращение! */
}
/* Сброс к системному шрифту */
.system-font {
font: caption; /* Использует шрифт для подписей ОС */
/* Другие значения: icon, menu, message-box, small-caption, status-bar */
}
Что НЕ входит в сокращение font:
- letter-spacing
- word-spacing
- text-transform
- text-decoration
- font-variant-ligatures (кроме small-caps)
Продвинутая типографика: OpenType-фичи в CSS
Современные шрифты содержат дополнительные возможности, которые можно включить через CSS.
Свойство font-variant и его производные
.advanced-typography {
/* Лигатуры (слияние символов) */
font-variant-ligatures: common-ligatures discretionary-ligatures;
/* common: fi, fl; discretionary: st, ct (зависит от шрифта) */
/* Числовые стили */
font-variant-numeric: lining-nums tabular-nums diagonal-fractions;
/* lining-nums: 123 (высотой как заглавные) */
/* tabular-nums: моноширинные цифры для таблиц */
/* diagonal-fractions: ½ вместо 1/2 */
/* Позиция надстрочных/подстрочных */
font-variant-position: super; /* для сносок */
}
Свойство font-feature-settings
Низкоуровневое свойство для доступа к OpenType-фичам:
.direct-control {
/* Включение конкретных фич по их тегам */
font-feature-settings: "kern" 1, "liga" 1, "clig" 1, "frac" 1;
}
/* Отключение лигатур для программирования */
.code {
font-feature-settings: "liga" 0, "calt" 0;
}
Сравнение подходов:
/* Предпочтительный способ (высокоуровневый) */
.preferred {
font-variant-ligatures: common-ligatures;
font-variant-numeric: tabular-nums;
}
/* Низкоуровневый способ (если нет высокоуровневой поддержки) */
.fallback {
font-feature-settings: "liga" 1, "tnum" 1;
}
Переменные шрифты (Variable Fonts)
Variable Fonts — революция в веб-типографике: один файл содержит все начертания и варианты.
Что такое Variable Fonts? Ось вариативности
Переменные шрифты определяются осями вариативности:
@font-face {
font-family: 'VariableFont';
src: url('font.woff2') format('woff2 supports variations'),
url('font.woff2') format('woff2-variations');
font-weight: 100 900; /* Диапазон вместо фиксированного значения */
font-stretch: 75% 125%; /* Диапазон ширины */
}
Стандартные оси:
wght— насыщенность (обычно 100-900)wdth— ширина (condensed, normal, expanded)slnt— наклон (обычно -10 до 0 градусов)ital— курсив (0 или 1)opsz— оптический размер (для разных размеров кегля)
Использование через CSS
.variable-demo {
font-family: 'VariableFont', sans-serif;
/* Способ 1: через стандартные свойства */
font-weight: 356; /* Любое значение в диапазоне! */
font-stretch: 110%; /* Расширенная версия */
/* Способ 2: через font-variation-settings */
font-variation-settings:
"wght" 650,
"wdth" 120,
"slnt" -8;
}
/* Анимация переменных шрифтов! */
.animated-text {
transition: font-variation-settings 0.3s ease;
}
.animated-text:hover {
font-variation-settings: "wght" 800, "slnt" -10;
}
Практический пример: responsive typography
:root {
--weight-min: 300;
--weight-max: 800;
}
.responsive-heading {
font-family: 'VariableFont', sans-serif;
font-weight: clamp(var(--weight-min), 10vw, var(--weight-max));
/* Насыщенность меняется с шириной окна! */
}
Оптимизация производительности и загрузки шрифтов
Проблема FOIT/FOUT и переход к FOFT
Стратегия FOFT решает проблему FOIT (невидимый текст при загрузке) и FOUT (резкая смена шрифтов). Вместо ожидания всех начертаний FOFT мгновенно загружает основное начертание шрифта, обеспечивая быструю читаемость, а затем фоново подгружает остальные варианты. Это создает плавный визуальный переход без раздражающих «вспышек», улучшая пользовательский опыт и снижая метрику CLS за счёт правильного использования font-display: swap и раздельного подключения шрифтов.
<!-- Предзагрузка критического шрифта в HTML -->
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>
/* Стратегия FOFT (Flash of Faux Text) */
@font-face {
font-family: 'MainFont';
src: url('MainFont-Regular.woff2') format('woff2');
font-display: swap;
}
@font-face {
font-family: 'MainFont Fallback';
src: local('Arial');
/* size-adjust и descent-override для точного совпадения метрик */
size-adjust: 105%;
descent-override: 75%;
}
body {
font-family: 'MainFont', 'MainFont Fallback', sans-serif;
}
Подмножество шрифтов (subsetting)
Подмножество шрифтов (subsetting) — это техника, при которой из файла шрифта удаляются неиспользуемые символы, что значительно уменьшает его вес и ускоряет загрузку веб-страницы.
Оптимизированный @font-face с подмножествами:
@font-face {
font-family: 'Optimized';
src: url('font-latin.woff2') format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA;
}
@font-face {
font-family: 'Optimized';
src: url('font-cyrillic.woff2') format('woff2');
unicode-range: U+0400-04FF;
}
Стратегии загрузки
Стратегия загрузки шрифтов — это продуманный план, который определяет, какие шрифты загружать первыми, как их отображать до полной загрузки и как минимизировать влияние на скорость сайта и визуальную стабильность.
// Оптимизированная загрузка с помощью JavaScript
if ('fonts' in document) {
document.fonts.load('1rem "CriticalFont"').then(() => {
document.documentElement.classList.add('fonts-loaded');
});
}
/* CSS для прогрессивного улучшения */
body {
font-family: system-ui, -apple-system, sans-serif;
}
.fonts-loaded body {
font-family: 'CustomFont', system-ui, -apple-system, sans-serif;
}
Доступность (Accessibility) шрифтов
Доступность шрифтов — это практика обеспечения комфортного чтения текста для всех пользователей, включая выбор контрастных цветов, оптимального размера, межстрочного интервала и дружелюбных к дислексии гарнитур.
Достаточный контраст
/* WCAG 2.1 Level AA требует минимум 4.5:1 для обычного текста */
.good-contrast {
color: #333333; /* Темно-серый */
background-color: #FFFFFF; /* Белый */
/* Контраст: 12.63:1 - отлично! */
}
.bad-contrast {
color: #888888; /* Светло-серый */
background-color: #FFFFFF; /* Белый */
/* Контраст: 3.54:1 - недостаточно! */
}
/* Для крупного текста (24px и более) достаточно 3:1 */
.large-text {
font-size: 1.5rem;
color: #666666;
background-color: #FFFFFF;
/* Контраст: 5.74:1 - хорошо даже для обычного текста */
}
Адаптивный размер текста и масштабирование
Адаптивный размер текста и корректное масштабирование обеспечивают читаемость контента на любых устройствах и при увеличении пользователем масштаба страницы, что является ключевым требованием веб-доступности и удобства использования.
/* Базовая настройка для поддержки масштабирования */
html {
font-size: 100%; /* 16px по умолчанию, но пользователь может изменить */
}
.container {
/* Не использовать фиксированные размеры! */
width: 90%; /* Хорошо */
max-width: 1200px;
/* width: 1200px; ПЛОХО - ломает масштабирование */
}
/* Поддержка высокого контраста */
@media (prefers-contrast: high) {
.element {
border: 2px solid currentColor;
}
}
/* Поддержка редуцированного движения */
@media (prefers-reduced-motion: reduce) {
.animated-text {
transition: none;
}
}
Учёт потребностей пользователей с дислексией
Учёт потребностей пользователей с дислексией включает выбор специальных гарнитур, увеличенный межбуквенный и межстрочный интервал, а также избегание чистого чёрного текста на белом фоне для снижения зрительного напряжения.
.dyslexia-friendly {
/* Рекомендации British Dyslexia Association */
font-family: 'OpenDyslexic', Arial, sans-serif;
font-size: 1.125rem; /* Минимум 12-14pt */
line-height: 1.8; /* Увеличенный межстрочный интервал */
letter-spacing: 0.12em; /* Увеличенный межбуквенный интервал */
word-spacing: 0.16em; /* Увеличенный межсловный интервал */
color: #333; /* Темный текст на светлом фоне (не чисто черный/белый) */
max-width: 70ch; /* Ограничение длины строки */
}
Практические примеры и типовые сценарии
Настройка типографической системы проекта
Настройка типографической системы проекта — это создание согласованного набора CSS-правил и переменных для шрифтов, размеров, интервалов и цветов, который обеспечивает визуальную гармонию, единообразие и лёгкость поддержки во всех компонентах интерфейса.
:root {
/* Цветовая палитра */
--color-text: #1a1a1a;
--color-text-light: #666;
--color-background: #fff;
/* Шрифты */
--font-primary: 'Inter', system-ui, -apple-system, sans-serif;
--font-secondary: 'Merriweather', Georgia, serif;
--font-mono: 'JetBrains Mono', 'Courier New', monospace;
/* Размеры шрифтов (modular scale) */
--text-xs: 0.75rem; /* 12px */
--text-sm: 0.875rem; /* 14px */
--text-base: 1rem; /* 16px */
--text-lg: 1.125rem; /* 18px */
--text-xl: 1.25rem; /* 20px */
--text-2xl: 1.5rem; /* 24px */
--text-3xl: 1.875rem; /* 30px */
--text-4xl: 2.25rem; /* 36px */
/* Высота строки */
--leading-tight: 1.25;
--leading-normal: 1.5;
--leading-relaxed: 1.75;
}
/* Типографические классы */
.text-display {
font-family: var(--font-secondary);
font-size: var(--text-4xl);
line-height: var(--leading-tight);
font-weight: 700;
}
.text-body {
font-family: var(--font-primary);
font-size: var(--text-base);
line-height: var(--leading-relaxed);
max-width: 65ch; /* Оптимальная длина строки */
}
.text-code {
font-family: var(--font-mono);
font-size: var(--text-sm);
line-height: var(--leading-normal);
font-feature-settings: "calt" 0; /* Отключаем лигатуры для кода */
}
Создание «липкого» заголовка
Создание «липкого» заголовка с помощью CSS-свойства position: sticky позволяет элементу оставаться видимым в области просмотра при прокрутке, улучшая навигацию и удобство работы с длинным контентом.
<article class="article">
<h1 class="sticky-heading">Заголовок статьи</h1>
<p>Текст статьи...</p>
</article>
/* Стилизация первой буквы */
.article::first-letter {
font-size: 3em;
font-weight: bold;
float: left;
line-height: 1;
margin-right: 0.1em;
color: #2c3e50;
}
/* Экспериментальное свойство initial-letter */
@supports (initial-letter: 2) or (-webkit-initial-letter: 2) {
.article::first-letter {
-webkit-initial-letter: 2;
initial-letter: 2;
float: none;
margin-right: 0.5em;
}
}
/* Липкий заголовок */
.sticky-heading {
position: sticky;
top: 0;
background: white;
padding: 1rem 0;
border-bottom: 2px solid #eee;
z-index: 10;
}
Адаптивная типографика с clamp()
Использование функции clamp() позволяет задать динамический размер текста, который плавно изменяется в заданном диапазоне в зависимости от ширины окна браузера, создавая идеальную читаемость на любом устройстве без медиа-запросов.
:root {
--min-width: 320px;
--max-width: 1200px;
}
.responsive-typography {
/* Динамический размер шрифта */
font-size: clamp(
var(--text-base),
1rem + 1vw,
var(--text-xl)
);
/* Динамическая высота строки */
line-height: clamp(1.4, 1.2 + 0.5vw, 1.8);
/* Динамические отступы */
padding: clamp(1rem, 2vw, 2rem);
/* Динамическая ширина контейнера */
width: clamp(90%, 800px, 100% - 2rem);
}
Распространённые ошибки и лучшие практики
Знание типичных ошибок, таких как подключение десятка файлов начертаний или игнорирование стратегии отображения, и следование современным подходам — использование переменных шрифтов, относительных единиц и приоритет скорости — формирует основу профессиональной веб-типографики.
Антипаттерны
/* ❌ Слишком много начертаний */
@font-face { font-family: 'Bad'; src: url('Bad-Thin.woff2'); font-weight: 100; }
@font-face { font-family: 'Bad'; src: url('Bad-ExtraLight.woff2'); font-weight: 200; }
@font-face { font-family: 'Bad'; src: url('Bad-Light.woff2'); font-weight: 300; }
@font-face { font-family: 'Bad'; src: url('Bad-Regular.woff2'); font-weight: 400; }
@font-face { font-family: 'Bad'; src: url('Bad-Medium.woff2'); font-weight: 500; }
@font-face { font-family: 'Bad'; src: url('Bad-SemiBold.woff2'); font-weight: 600; }
@font-face { font-family: 'Bad'; src: url('Bad-Bold.woff2'); font-weight: 700; }
@font-face { font-family: 'Bad'; src: url('Bad-ExtraBold.woff2'); font-weight: 800; }
@font-face { font-family: 'Bad'; src: url('Bad-Black.woff2'); font-weight: 900; }
/* Решение: используйте variable font! */
/* ❌ Использование !important для шрифтов */
.error {
font-family: Arial !important; /* Затрудняет поддержку */
}
/* ❌ Смешивание единиц измерения без системы */
.confusing {
font-size: 14px;
line-height: 1.5em;
margin: 0.5rem;
padding: 10px;
}
/* ❌ Игнорирование font-display */
@font-face {
font-family: 'NoDisplay';
src: url('font.woff2') format('woff2');
/* Нет font-display! */
}
Чек-лист лучших практик
Идеальная реализация включает использование WOFF2 с предзагрузкой, стратегию swap для отображения, систему на rem и clamp(), проверку контраста и обязательную проверку производительности в Lighthouse.
/* ✅ Оптимизированное подключение шрифтов */
@font-face {
font-family: 'BestPractice';
src: url('font.woff2') format('woff2');
font-weight: 100 900;
font-stretch: 75% 125%;
font-display: swap;
font-style: normal;
}
/* ✅ Современные единицы измерения */
html {
font-size: 16px;
}
@media (min-width: 768px) {
html {
font-size: 18px;
}
}
/* ✅ Пропорциональная типографика */
body {
font-family: 'BestPractice', system-ui, sans-serif;
font-size: 1rem;
line-height: 1.6;
color: #1a1a1a;
background: #fff;
}
/* ✅ Контроль длины строки */
.content {
max-width: 65ch;
margin: 0 auto;
}
/* ✅ Достаточный контраст */
.primary-text {
color: #222;
background: #fff;
}
/* ✅ Поддержка пользовательских настроек */
@media (prefers-contrast: high) {
.primary-text {
color: #000;
}
}
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
Заключение
Работа со шрифтами в CSS прошла путь от простого выбора гарнитуры до комплексной системы, затрагивающей производительность, доступность и пользовательский опыт. Современный подход требует баланса:
- Эстетика через variable fonts и OpenType-фичи
- Производительность через предзагрузку, подмножество и оптимизацию
- Доступность через контраст, масштабирование и дислексик-френдли параметры
Тренды будущего:
- Широкое внедрение variable fonts
- Автоматическая оптимизация через браузерные API
- Персонализация типографики под пользовательские предпочтения
- Интеграция с дизайн-системами через CSS-переменные
Следующие шаги:
- Проанализируйте текущие шрифты на вашем проекте с помощью Lighthouse
- Внедрите
font-display: swap для существующих шрифтов - Поэкспериментируйте с variable fonts для нового контента
- Проверьте контрастность текста с помощью инструментов разработчика
Помните: хорошая типографика невидима. Когда пользователи замечают красоту текста, но не замечают процесс его загрузки — вы достигли идеального баланса.
Готовы вывести свой бизнес в онлайн с сильным и современным сайтом? Мы разрабатываем быстрые, стильные и эффективные веб-решения, которые выделят вас среди конкурентов и превратят посетителей в клиентов. Пришло время заказать сайт, который будет расти вместе с вами. Напишите нам — обсудим ваш проект!