Типографская шкала: размеры по лестнице, а не наугад

Зачем:Вы научитесь выбирать размеры шрифта не «на глаз», а по шкале: одно базовое число и один коэффициент дают весь набор. После урока у вашей страницы будет лестница размеров на CSS-переменных и понятные роли у текста.

20 минут

Озвучено синтезом речи (Qwen3-TTS), голос не принадлежит человеку.

Типографская шкала — набор размеров шрифта, где каждая ступень равна предыдущей, умноженной на один коэффициент: при 1.25 это 16, 20, 25, 31.

Размеры «на глаз» и по шкале

Когда размеры выбирают на глаз, на странице набирается двадцать почти одинаковых размеров: 14, 15, 16, 17, 18 пикселей. Вид получается «неряшливым», хотя отдельно ничего плохого нет. Так же в музыке нота, взятая чуть мимо, режет слух, хотя ни одна не фальшивая по отдельности.

Типографская шкала (её ещё называют модульной) делает наоборот: берут один базовый размер основного текста и один коэффициент, и каждый следующий размер получают умножением на него. При базе 16 пикселей и коэффициенте 1,25 лесенка выглядит так: 16, 20, 25, 31, 39, 49. Между ступенями всегда одно и то же соотношение, и глаз это чувствует как порядок.

Коэффициенты часто берут из музыки, потому что они приятны на слух и на глаз: 1,2 (малая терция), 1,25 (большая терция), 1,333 (кварта), 1,5 (квинта), 1,618 (золотое сечение). Удобный калькулятор есть на сайте modularscale.com, он указан в источниках.

Попробуйте сами: выберите коэффициент и посмотрите, как меняется лестница. Заголовки в ней написаны названием вашего проекта.

Шкала размеров: база, коэффициент и лестница
  1. --fs-3xl · 39.1 px Ваш проект
  2. --fs-2xl · 31.3 px Ваш проект
  3. --fs-xl · 25.0 px Ваш проект
  4. --fs-lg · 20.0 px Ваш проект
  5. --fs-base · 16.0 px Обычный текст страницы про ваше дело
  6. --fs-sm · 12.8 px Обычный текст страницы про ваше дело
:root {
  --ratio: 1.25;
  --fs-sm: 0.8rem;
  --fs-base: 1rem;
  --fs-lg: 1.25rem;
  --fs-xl: 1.563rem;
  --fs-2xl: 1.953rem;
  --fs-3xl: 2.441rem;
}

Чем больше коэффициент, тем резче скачки между уровнями: 1.125–1.2 спокойны и подходят текстам и документации, 1.25–1.333 универсальны, 1.5 и выше дают эффектные заголовки, но мелкие ступени растут слишком быстро.

Текучий размер: clamp()

Размер заголовка плавно растёт от телефона к широкому экрану, не выходя за пределы. Меняйте границы и «ширину экрана».

Ваш проект

На ширине 800 px заголовок 43.5 px.

font-size: clamp(2rem, 1.413rem + 2.61vw, 3.5rem);
Проверьте себя: из чего состоит типографская шкала?

Из базового размера основного текста и одного коэффициента. Каждая следующая ступень равна предыдущей, умноженной на коэффициент.

Сколько ступеней нужно сайту

Обычному сайту хватает шести-семи: одна ступень вниз (подписи, мелкие примечания), основной текст и четыре-пять вверх (подзаголовки и заголовки разных уровней). Систем с пятнадцатью размерами боятся не зря: разница между ними станет незаметной, а выбирать придётся каждый раз.

Большие дизайн-системы дают ступеням роли. В Material Design 3 это пятнадцать стилей: display, headline, title, body и label, каждый в трёх размерах (большой, средний, малый). Carbon от IBM делит шрифты на два набора: «продуктовый» (productive) для плотных рабочих интерфейсов и «выразительный» (expressive) для редакционных страниц. Названия ролей помогают не помнить числа: разработчик пишет headline-medium, а не 28px.

Мы будем называть ступени по размеру: --fs-sm, --fs-base, --fs-lg, --fs-xl, --fs-2xl, --fs-3xl (fs от font-size). А роли назначим правилами: h1 берёт --fs-3xl, h2 берёт --fs-xl.

Единицы: rem, а не px

Размер шрифта лучше задавать в rem: одна rem равна размеру шрифта корневого элемента, который человек может изменить в настройках браузера. Слабовидящие часто делают его крупнее, и страница с размерами в пикселях этого не заметит. Правило доступности WCAG требует, чтобы текст можно было увеличить до 200 % без потери содержания, и rem даёт это бесплатно.

:root {
  --ratio: 1.25;
  --fs-base: 1rem;
  --fs-lg: calc(var(--fs-base) * var(--ratio));
  --fs-xl: calc(var(--fs-lg) * var(--ratio));
}

Так всю шкалу можно сдвинуть одной правкой: поменять --ratio или --fs-base.

Текучий размер

Заголовок в 49 пикселей хорош на ноутбуке и огромен на телефоне. Раньше для этого писали несколько медиазапросов. Сегодня есть функция clamp(минимум, предпочтительное, максимум): размер плавно растёт вместе с шириной экрана, но не выходит за границы.

h1 {
  font-size: clamp(2rem, 1rem + 3vw, 3.5rem);
}

Единица vw равна одному проценту ширины экрана. Подобрать числа проще в генераторе: в источниках указан Utopia, который по двум границам ширины строит всю текучую шкалу. На схеме выше есть простой пример: подвигайте ширину экрана.

Проверьте себя: что делает clamp()?

Выдаёт значение между границами, которое растёт вместе с шириной экрана: не меньше минимума и не больше максимума.

Межстрочный интервал и характер

У каждой ступени свой интервал между строками. Для основного текста подходит 1,4–1,6: строки не слипаются, и глаз не теряет путь. У крупных заголовков интервал теснее, около 1,1–1,2, иначе строки заголовка расползаются. Интервал задают числом без единиц (line-height: 1.55), тогда он считается от размера шрифта элемента.

И немного про шрифты: одного семейства хватает. Для заголовка и текста можно взять два начертания (жирное и обычное) одного шрифта, а контраст создать размером. Пару разных семейств берите только тогда, когда можете объяснить зачем. В части про CSS вы подключали веб-шрифты: помните, что каждый стоит байтов и времени загрузки.

Практика

Страница вашего проекта сейчас набрана размерами 29, 21, 15 и 11 пикселей: числа взяты с потолка. Замените их шкалой: опишите на :root коэффициент и шесть ступеней, назначьте ступени ролям (h1, h2, абзацы разделов, подпись) и поправьте интервал у абзацев. Потом поменяйте --ratio на 1.333 и посмотрите, как перестроилась страница. Так и работает шкала: одно число, весь вид.

Что было не так с 2014 годом

В 2014 году размеры задавали в пикселях и подгоняли под каждый экран медиазапросами, а «текучих» размеров не было. Страница либо не помещалась на телефоне, либо на большом экране выглядела пустой. Функции clamp() в то время не существовало: она появилась в браузерах только в 2019–2020 годах.

Практика

Готовлю вашу страницу…

Тест

Вопрос 1 из 6

Что такое типографская (модульная) шкала?

Один ответ

Карточки

Эти карточки попадут в повторение, когда вы завершите урок.

  • Что такое типографская шкала?

    Ответ

    Размеры шрифта, каждый в одно и то же число раз больше предыдущего. База 16 px и коэффициент 1.25 дают 16, 20, 25, 31, 39, 49.

  • Как выбрать коэффициент?

    Ответ

    1,125–1,2 спокойно, 1,25–1,333 универсально, 1,5 и больше эффектно, но резко. Коэффициенты часто берут из музыкальных интервалов.

  • Почему rem, а не px?

    Ответ

    rem считается от настройки браузера и позволяет увеличить текст до 200 % (WCAG). Базу меняют одним числом.

  • Что такое текучий размер?

    Ответ

    clamp(мин, предпочтительное, макс): размер плавно растёт с шириной экрана и не выходит за границы.

  • Какой межстрочный интервал выбрать?

    Ответ

    Для основного текста 1.4–1.6. Чем крупнее строка, тем теснее: у заголовков около 1.1–1.2.

Источники

Дальше

Теперь вы знаете: типографская шкала.