Кратко
СкопированоКогда браузеру нужно отобразить текст с определённым начертанием, но соответствующего файла шрифта нет, он может попытаться сымитировать его самостоятельно. Такие синтетические имитации начертаний называют faux (от французского «faux» — ложный): faux-bold, faux-italic, faux-small-caps, а также faux-superscript и faux-subscript (через синтез параметра position — позиционных глифов).
Свойство font позволяет управлять этим поведением — разрешать или запрещать синтез недостающих вариантов шрифта (жирное, курсив, капитель, подстрочные и надстрочные символы).
Пример
СкопированоЗапретим браузеру синтезировать недостающие варианты шрифта:
@font-face { font-family: 'CustomFont'; src: url('custom-regular.woff2'); font-weight: 400; font-style: normal;}body { font-family: 'CustomFont', sans-serif; font-synthesis: none;}strong { /* <strong> и так запрашивает более жирный вес (font-weight: bolder), здесь задаём его явно для демонстрации */ font-weight: 700;}
@font-face {
font-family: 'CustomFont';
src: url('custom-regular.woff2');
font-weight: 400;
font-style: normal;
}
body {
font-family: 'CustomFont', sans-serif;
font-synthesis: none;
}
strong {
/*
<strong> и так запрашивает более жирный вес (font-weight: bolder),
здесь задаём его явно для демонстрации
*/
font-weight: 700;
}
⚠️ Важно: При font семантические теги <strong> и <em> сохранят своё значение для скринридеров и поисковых систем. Визуальное выделение будет только если среди подключённых файлов шрифта есть более жирное или курсивное начертание — браузер использует его через алгоритм font matching. В примере выше, где подключён только один вес 400, визуального выделения не будет.
Как пишется
СкопированоДля font можно выбрать одно значение или несколько через пробел:
none— запрещает любой синтез параметров шрифта.weight— разрешает синтез жирного начертания.style— разрешает синтез курсива.small— разрешает синтез капители.- caps position— разрешает синтез позиции подстрочных и надстрочных символов.weight style small— значение по умолчанию, разрешает синтез всех параметров шрифта.- caps position
.no-synthesis { font-synthesis: none;}.allow-bold { font-synthesis: weight;}.allow-italic { font-synthesis: style;}.allow-bold-italic { font-synthesis: weight style;}
.no-synthesis {
font-synthesis: none;
}
.allow-bold {
font-synthesis: weight;
}
.allow-italic {
font-synthesis: style;
}
.allow-bold-italic {
font-synthesis: weight style;
}
Значения можно комбинировать. Например, font разрешит синтез жирного и курсива, но запретит капитель и позицию.
Индивидуальные свойства
Скопированоfont — это шорткат для индивидуальных свойств:
.element { /* Вместо font-synthesis: none можно записать: */ font-synthesis-weight: none; font-synthesis-style: none; font-synthesis-small-caps: none; font-synthesis-position: none;}.flexible { /* Запретить только синтез жирности, остальное разрешить */ font-synthesis-weight: none; font-synthesis-style: auto; font-synthesis-small-caps: auto; font-synthesis-position: auto;}
.element {
/* Вместо font-synthesis: none можно записать: */
font-synthesis-weight: none;
font-synthesis-style: none;
font-synthesis-small-caps: none;
font-synthesis-position: none;
}
.flexible {
/* Запретить только синтез жирности, остальное разрешить */
font-synthesis-weight: none;
font-synthesis-style: auto;
font-synthesis-small-caps: auto;
font-synthesis-position: auto;
}
Каждое свойство принимает значения:
auto— разрешает синтез (по умолчанию)none— запрещает синтез
Использование индивидуальных свойств даёт более гибкий контроль над синтезом отдельных параметров шрифта.
Наследование
СкопированоСвойство font и его индивидуальные варианты наследуются от родительских элементов. Это означает, что если вы установите font на контейнере, все дочерние элементы также будут иметь запрет синтеза, если явно не переопределить это свойство.
.container { font-synthesis: none;}.container p { /* Наследует font-synthesis: none от .container */ /* Синтез запрещён */}.container .special { /* Явное переопределение наследования */ font-synthesis: weight style; /* Теперь синтез разрешён только для weight и style */}
.container {
font-synthesis: none;
}
.container p {
/* Наследует font-synthesis: none от .container */
/* Синтез запрещён */
}
.container .special {
/* Явное переопределение наследования */
font-synthesis: weight style;
/* Теперь синтез разрешён только для weight и style */
}
Это может приводить к неожиданному поведению в сложных layouts, поэтому важно учитывать наследование при использовании font на верхних уровнях DOM-дерева.
Как понять
СкопированоКогда браузер должен отобразить текст жирным или курсивом (через CSS-свойства font, font или HTML-теги <b>, <strong>, <i>, <em>), он ищет соответствующий файл шрифта. Если нужного файла нет, браузер по умолчанию пытается помочь и создаёт недостающее начертание сам.
Теги <b> и <i> влияют только на визуальное оформление, а <strong> и <em> добавляют семантический акцент (важность и выделение), который сохраняется для скринридеров и поисковых систем даже при font.
Далее под синтезируемыми параметрами понимаются вес (weight), наклон (style) и типографические формы символов: капитель (small-caps) и позиционные глифы (position для надстрочных и подстрочных символов).
Как работает синтез
СкопированоДля bold браузер имитирует жирность путём утолщения контура глифов. Конкретная реализация зависит от движка браузера (Blink, Gecko, WebKit) и не стандартизирована.
Для italic браузер применяет геометрический наклон к глифам. Но настоящий курсив — это не просто наклонённые буквы, это отдельно нарисованное начертание с другой формой символов (например, буква a в курсиве часто имеет совершенно другую форму).
Для small-caps (капитель) браузер заменяет строчные буквы на уменьшенные заглавные. Настоящая капитель — это отдельно нарисованные символы с правильными пропорциями и визуальным весом, которые гармонично выглядят в тексте.
Пример работы с капителью:
.title { font-variant: small-caps; font-synthesis: none;}
.title {
font-variant: small-caps;
font-synthesis: none;
}
При отсутствии капительных глифов и запрете синтеза текст отобразится обычными строчными буквами. Если синтез разрешён (по умолчанию), браузер создаст faux-small-caps из уменьшенных заглавных букв.
Для position (позиция символов) при использовании подстрочных и надстрочных элементов (<sub>, <sup>) браузер сначала пытается использовать OpenType-глифы (subs и sups). Если в шрифте их нет, браузер искусственно уменьшает и сдвигает обычные символы. Именно это синтетическое поведение и контролируется через font. Настоящие позиционные глифы имеют специально разработанные пропорции и правильное выравнивание базовой линии.
Когда синтез особенно заметен
СкопированоСинтетические варианты шрифта особенно плохо смотрятся:
- в дизайнерских и декоративных шрифтах;
- на больших размерах текста (заголовки);
- при печати страницы;
- в логотипах и акцентных элементах.
В системных шрифтах проблема синтеза weight и style обычно менее заметна из-за большого количества реальных начертаний, но она всё равно возможна при использовании нестандартных значений (например, 500 или 600). Синтез small и position почти всегда остаётся заметным даже в системных шрифтах.
Variable fonts и font-synthesis
СкопированоС вариативными шрифтами ситуация отличается от обычных статических шрифтов. Вариативный шрифт содержит в одном файле диапазон значений веса и наклона, поэтому браузеру реже приходится прибегать к синтезу faux-bold и faux-italic.
Оси wght, slnt и ital
СкопированоЕсли используется вариативный шрифт с поддержкой оси wght (вес) и оси наклона (slnt для oblique или ital для курсива), браузер использует реальные значения из осей шрифта вместо синтеза.
Важное различие осей наклона:
slnt— непрерывная ось (например, от 0 до -15 градусов), которая изменяет угол наклона существующих глифов. Это создаёт oblique (наклонное начертание).ital— бинарная ось (0 или 1), которая переключает между двумя разными наборами глифов: прямым и курсивным. Настоящий курсив имеет специально нарисованные символы с другой формой.
В таком случае font влияет только на те параметры, которые не покрыты осями шрифта (чаще всего это small и position), а также на случаи, когда запрошенное значение выходит за пределы диапазона оси.
Пример использования
Скопировано
@font-face { font-family: 'Inter'; src: url('Inter.var.woff2') format('woff2-variations'); font-weight: 100 900; /* Поддержка диапазона весов через ось wght */ font-style: normal; /* Управление наклоном через ось slnt происходит автоматически */}body { font-family: 'Inter', sans-serif; /* font-synthesis здесь менее критичен */ /* weight и style уже покрыты осями шрифта */}h1 { font-weight: 700; /* Реальный вариант из оси wght, не синтез */}
@font-face {
font-family: 'Inter';
src: url('Inter.var.woff2') format('woff2-variations');
font-weight: 100 900; /* Поддержка диапазона весов через ось wght */
font-style: normal;
/* Управление наклоном через ось slnt происходит автоматически */
}
body {
font-family: 'Inter', sans-serif;
/* font-synthesis здесь менее критичен */
/* weight и style уже покрыты осями шрифта */
}
h1 {
font-weight: 700; /* Реальный вариант из оси wght, не синтез */
}
Когда браузер всё же синтезирует
Скопировано💡 Обрати внимание: Даже при использовании variable font браузер может прибегнуть к синтезу, если нужная ось или диапазон значений отсутствуют. Например, если вариативный шрифт поддерживает только ось slnt (наклон), но не полноценную ось ital (курсив), поведение font будет зависеть от того, как дизайнер шрифта связал оси slnt и ital в OpenType-таблицах.
Простое правило: Если у variable-шрифта есть ось ital, браузер активирует ital для font. Если есть только slnt, то font обычно автоматически мапится браузером на значение slnt (или другое значение, определённое в шрифте), что создаёт oblique (наклонное), а не настоящее italic (курсивное) начертание.
Вариативные шрифты — современный стандарт, и при их использовании браузеру почти не приходится прибегать к синтезу для weight и style, если соответствующие оси покрыты диапазоном значений.
💡 Дополнительно: При работе с variable fonts полезно использовать font, которое автоматически подстраивает оптические размеры глифов в зависимости от font. Это не влияет на синтез, но дополняет качественную типографику при работе с вариативными шрифтами, особенно на маленьких и больших размерах текста. Свойство применяется при наличии оси opsz в шрифте.
Когда использовать font-synthesis: none
СкопированоИспользуй font, если:
- работаешь с дизайнерским шрифтом, где качество типографики критично;
- хочешь явно контролировать все варианты шрифта;
- создаёшь брендовый UI-кит или дизайн-систему;
- нужно заставить команду подключить все необходимые файлы шрифтов.
Не используй font в контентных проектах без строгого контроля разметки — визуальное выделение может пропасть, что ухудшит читаемость.
При использовании Google Fonts
СкопированоПоведение зависит от того, разрешён ли синтез параметров шрифта, и сколько весов подключено.
Если синтез запрещён (font):
Браузер не будет создавать синтетические варианты шрифта, но будет подбирать ближайший доступный вес из подключённых. Параметр wght@400;700 запрашивает веса 400 и 700 (Google Fonts может отдать либо статические файлы, либо variable-версию с ограниченным диапазоном, в зависимости от семейства):
https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap
При таком подключении браузер использует алгоритм font matching:
fontотобразятся как 400- weight : 100–500 fontотобразятся как 700- weight : 600–900
Это происходит из-за специального правила спецификации: для font браузер сначала проверяет наличие веса 400, и если он есть — использует его. Граница перехода от 400 к 700 находится между значениями 500 и 600.
Текст в <strong> получит визуальное выделение, потому что браузер использует вес 700 вместо 400. Выделение пропадёт только если подключить единственный вес:
https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap
В этом случае и обычный текст, и <strong> будут отображаться одинаково (вес 400).
Если синтез разрешён (по умолчанию или font):
Можно загрузить только базовое начертание:
https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap
Браузер будет использовать синтез для жирного текста, если синтез разрешён и файл шрифта с нужным весом не был загружен. Качество faux-bold будет ниже, чем у оригинального начертания.
Для вариативных шрифтов:
Указывай диапазон весов:
https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap
Это подключит вариативный шрифт с поддержкой всех весов от 100 до 900, что избавит от необходимости синтеза.
Выводы для Google Fonts:
👉 При font подключай все реально используемые веса
👉 Для статических шрифтов лучше подключить 400 и 700, чем полагаться на faux-bold
👉 Для вариативных шрифтов используй диапазоны весов (100)
Правильная загрузка статических шрифтов
СкопированоДля статических шрифтов лучшая стратегия — подключать все используемые начертания через отдельные @font блоки:
/* Regular */@font-face { font-family: 'MyFont'; src: url('myfont-regular.woff2'); font-weight: 400; font-style: normal;}/* Bold */@font-face { font-family: 'MyFont'; src: url('myfont-bold.woff2'); font-weight: 700; font-style: normal;}/* Italic */@font-face { font-family: 'MyFont'; src: url('myfont-italic.woff2'); font-weight: 400; font-style: italic;}/* Bold Italic */@font-face { font-family: 'MyFont'; src: url('myfont-bold-italic.woff2'); font-weight: 700; font-style: italic;}body { font-family: 'MyFont', sans-serif; font-synthesis: none; /* Безопасно - все варианты подключены */}
/* Regular */
@font-face {
font-family: 'MyFont';
src: url('myfont-regular.woff2');
font-weight: 400;
font-style: normal;
}
/* Bold */
@font-face {
font-family: 'MyFont';
src: url('myfont-bold.woff2');
font-weight: 700;
font-style: normal;
}
/* Italic */
@font-face {
font-family: 'MyFont';
src: url('myfont-italic.woff2');
font-weight: 400;
font-style: italic;
}
/* Bold Italic */
@font-face {
font-family: 'MyFont';
src: url('myfont-bold-italic.woff2');
font-weight: 700;
font-style: italic;
}
body {
font-family: 'MyFont', sans-serif;
font-synthesis: none; /* Безопасно - все варианты подключены */
}
Если не подключить Bold Italic, то текст вроде <strong><em>важно< будет отображаться некорректно при font.
Выводы для статических шрифтов:
👉 Подключай все используемые комбинации weight + style через отдельные @font
👉 Минимум: Regular (400 normal) + Bold (700 normal) + Italic (400 italic) + Bold Italic (700 italic)
👉 Не забывай про комбинации — <strong><em> требует Bold Italic
Подсказки
Скопировано💡 Браузеры используют специальный алгоритм font matching для подбора ближайшего доступного веса. Важная особенность: для font браузер сначала проверяет наличие веса 400. Если доступны только 400 и 700, то веса 100–500 отобразятся как 400, а 600–900 как 700.
💡 Важно: Свойство font работает только в CSS-селекторах (на элементах), но не в правилах @font. Оно управляет поведением браузера при отрисовке, а не при загрузке шрифта.
💡 Свойство font появилось позже остальных значений (2022-2023), и его поддержка в браузерах может отличаться. Safari внедрял поддержку отдельных компонентов font постепенно. Старые версии Chromium (до 97) могли игнорировать значение small. Всегда проверяй совместимость на Can I Use перед использованием в production.
💡 При запрете синтеза важно убедиться, что все семантические акценты (<strong>, <em>, <b>, <i>) имеют реальные файлы шрифтов с соответствующими весами и стилями, иначе визуальное выделение пропадёт. Семантика сохранится для скринридеров, но пользователи со стандартным зрением не увидят акцент.
💡 В некоторых старых версиях Safari поведение faux-italic и критерии его применения отличались от Chromium и Firefox. При кросс-браузерной разработке всегда проверяй результат визуально.
💡 Проверка в DevTools: В Chrome/Edge DevTools можно проверить, используется ли синтез шрифта. В панели "Fonts" (экспериментальная функция, включается в Settings → Experiments) отображается информация о загруженных шрифтах и доступных осях для variable fonts. Синтез может быть помечен как "Synthesized" или проявляться отсутствием реального файла для запрошенного веса/стиля.
💡 Производительность: Синтез шрифтов создаёт дополнительную вычислительную нагрузку для браузера, особенно заметную при большом объёме текста или сложных шрифтах. При использовании font браузер не тратит ресурсы на синтез, что может улучшить производительность рендеринга. Однако на современных устройствах эта разница обычно незаметна для пользователя.
В большинстве проектов лучше подключать реальные варианты шрифта и использовать font как защитный механизм, а не как основной способ получения bold и italic.
- Chrome 97, поддерживается
- Edge 97, поддерживается
- Firefox 34, поддерживается
- Safari 9, поддерживается