Кратко
СкопированоМасштабирует шрифты в стеке font так, чтобы строчные буквы оставались одной высоты при переключении с одного на другой. Текст не «прыгает», когда нужный шрифт не загрузился.
Пример
Скопировано
<p class="reference">Hamburgefons — Arial</p><p class="without">Hamburgefons — Times New Roman</p><p class="with">Hamburgefons — Times New Roman + font-size-adjust</p>
<p class="reference">Hamburgefons — Arial</p>
<p class="without">Hamburgefons — Times New Roman</p>
<p class="with">Hamburgefons — Times New Roman + font-size-adjust</p>
.reference { font-family: Arial, sans-serif; font-size: 40px;}.without { font-family: "Times New Roman", serif; font-size: 40px;}.with { font-family: "Times New Roman", serif; font-size: 40px; font-size-adjust: 0.52; /* выравниваем по x-height Arial */}
.reference {
font-family: Arial, sans-serif;
font-size: 40px;
}
.without {
font-family: "Times New Roman", serif;
font-size: 40px;
}
.with {
font-family: "Times New Roman", serif;
font-size: 40px;
font-size-adjust: 0.52; /* выравниваем по x-height Arial */
}
Arial и Times New Roman при одинаковом font выглядят по-разному: у Times New Roman строчные буквы заметно ниже. С font Times New Roman масштабируется так, что его строчные совпадают по высоте с Arial.
Как понять
СкопированоУ каждого шрифта есть аспектное значение — соотношение высоты строчных букв к font. Например, у Arial оно около 0.52: строчная x равна примерно 52% от font. У Times New Roman это значение около 0.45.
Когда первый шрифт в font не загружается, браузер переключается на следующий. font при этом остаётся прежним, а соотношение строчных у нового шрифта другое. Строчные буквы становятся заметно выше или ниже — текст визуально «прыгает» и абзац занимает другой объём пространства.
font устраняет это: браузер пересчитывает размер подставленного шрифта так, чтобы его строчные совпали по высоте с указанным значением. Сам font при этом не меняется.
Свойство особенно заметно на мелком тексте: там разница в этом соотношении сильнее влияет на читаемость.
Как пишется
Скопировано
p { font-size-adjust: 0.5; /* числовое значение */ font-size-adjust: from-font; /* взять метрику из шрифта */ font-size-adjust: none; /* отключить */ font-size-adjust: cap-height 0.72; /* явная метрика + число */ font-size-adjust: cap-height from-font;}
p {
font-size-adjust: 0.5; /* числовое значение */
font-size-adjust: from-font; /* взять метрику из шрифта */
font-size-adjust: none; /* отключить */
font-size-adjust: cap-height 0.72; /* явная метрика + число */
font-size-adjust: cap-height from-font;
}
none
СкопированоЗначение по умолчанию. Масштабирование отключено.
<число>
СкопированоПоложительное число без единиц измерения: соотношение целевой метрики к font. По умолчанию метрика — это x-height (высота строчной буквы). Значение 0 делает текст невидимым.
Чтобы узнать аспектное значение нужного шрифта, можно воспользоваться сервисом Font Style Matcher или найти данные в документации шрифта.
from-font
СкопированоБраузер сам извлекает нужное значение из метрик первого доступного шрифта в стеке. Не нужно подбирать число вручную:
p { font-family: "Ideal Sans", Arial, sans-serif; font-size-adjust: from-font;}
p {
font-family: "Ideal Sans", Arial, sans-serif;
font-size-adjust: from-font;
}
Если «Ideal Sans» загружен, браузер берёт его x-height. Если нет — берёт x-height Arial как первого доступного шрифта в стеке.
Двузначный синтаксис
СкопированоПо умолчанию браузер выравнивает по x-height. Можно указать другую метрику явно:
p { font-size-adjust: cap-height from-font; font-size-adjust: cap-height 0.72; font-size-adjust: ch-width 0.5;}
p {
font-size-adjust: cap-height from-font;
font-size-adjust: cap-height 0.72;
font-size-adjust: ch-width 0.5;
}
Доступные метрики:
ex— высота строчной- height x, то есть x-height (значение по умолчанию);cap— высота прописной (заглавной) буквы;- height ch— ширина символа- width 0, актуально для моноширинных шрифтов;ic— ширина символа- width 水(U+6C34), для китайских, японских и корейских шрифтов;ic— высота символа- height 水, для вертикальных текстов на этих же языках.
Подсказки
Скопировано💡 from — самый практичный выбор в большинстве случаев. Браузер сам найдёт нужную метрику, и не нужно искать числа в документации шрифта.
💡 Свойство работает при любой смене шрифта в font, а не только при недоступности основного. Если несколько шрифтов в стеке резко отличаются по x-height, font сглаживает переход между ними.
- Chrome 127, поддерживается
- Edge 127, поддерживается
- Firefox 118, поддерживается
- Safari 17, поддерживается
На практике
Скопированосоветует
Скопировано🛠 font помогает снизить скачок контента при загрузке веб-шрифта. Пока кастомный шрифт грузится, браузер показывает системный — и если их аспектные значения не совпадают, в момент замены текст меняет видимый размер и перестраивает абзацы. Это влияет на показатель CLS (Cumulative Layout Shift).
Чтобы сгладить переход, задай числовое значение, равное x-height нужного шрифта. Тогда системный шрифт будет масштабирован заранее, и замена пройдёт почти незаметно:
/* Arial как временный шрифт, x-height ≈ 0.52 *//* При загрузке кастомного шрифта строчные не прыгнут */body { font-family: "MyCoolFont", Arial, sans-serif; font-size-adjust: 0.52;}
/* Arial как временный шрифт, x-height ≈ 0.52 */
/* При загрузке кастомного шрифта строчные не прыгнут */
body {
font-family: "MyCoolFont", Arial, sans-serif;
font-size-adjust: 0.52;
}
В демке ниже кнопка симулирует момент загрузки шрифта — переключает Arial на Times New Roman. Верхний блок без подстройки: строчные скачут вниз. Нижний с font: строчные остаются на месте.
Аспектные значения популярных шрифтов: Arial — 0,52, Roboto — 0,53, Inter — 0,54, Times New Roman — 0,45. Для других шрифтов удобно воспользоваться сервисом Font Style Matcher.