Калькулятор CSS clamp()
Введите наименьший и наибольший размер шрифта и ширины экрана, к которым они относятся — инструмент посчитает формулу clamp(), нарисует график зависимости размера от ширины и выдаст готовый CSS для font-size.
h1 {
font-size: clamp(1rem, 0.6667rem + 1.6667vw, 2rem);
}
Как пользоваться
- Введите минимальный и максимальный размер шрифта в пикселях, например
16pxна телефоне и32pxна широком экране. - Укажите ширины экрана, между которыми шрифт должен расти: обычно
320pxи1280px. - Выберите единицу результата:
rem(рекомендуется) илиpx. Дляremпроверьте базовый размер шрифта — обычно16. - Двигайте маркер на графике или ползунок «Ширина экрана для проверки» — пример заголовка покажется в размере для этой ширины. Нажмите «Копировать», чтобы взять код.
Как это работает
Как работает формула
Размер шрифта меняется по прямой, проходящей через две точки: (minVw, min) и (maxVw, max). Наклон считается как slope = (max − min) / (maxVw − minVw), смещение — как intercept = min − slope × minVw. В CSS наклон записывают в единицах vw: 1vw — это 1% ширины окна, поэтому берётся slope × 100. Получается clamp(min, intercept + slope×100vw, max): ниже минимальной ширины размер постоянен, между ширинами растёт, выше максимальной снова постоянен.
font-size: clamp(1rem, 0.6667rem + 1.6667vw, 2rem);
Почему в формуле нужен rem
Размер, записанный только в vw (font-size: 2vw), не увеличивается при масштабировании страницы: при зуме ширина окна в CSS-пикселях уменьшается, и физический размер текста остаётся прежним. Это нарушает критерий WCAG 1.4.4 Resize Text — текст должен увеличиваться до 200%. Часть в rem реагирует и на зум, и на размер шрифта в настройках браузера; границы в rem тоже масштабируются. Часто приводят правило: максимум не больше примерно 2,5 минимума.
min(), max() и clamp()
clamp(MIN, VAL, MAX) задаёт нижнюю и верхнюю границу сразу и равна max(MIN, min(VAL, MAX)). min() ограничивает только сверху, max() — только снизу.
font-size: min(5vw, 3rem); /* не больше 3rem */
font-size: max(1rem, 2vw); /* не меньше 1rem */
clamp() — не только для шрифтов
Функцию принимает любое свойство с длиной: padding, margin, gap, width. Плавные отступы сохраняют пропорции вместе с текстом. Для отступов часто хватает простого clamp(1rem, 5vw, 3rem), а средний член из калькулятора пригодится, когда нужен точный переход между двумя ширинами.
padding-inline: clamp(1rem, 5vw, 3rem);
gap: clamp(0.75rem, 2vw, 2rem);
Частые вопросы
Чем clamp() лучше медиазапросов для размера шрифта?
Медиазапросы меняют размер ступенями на брейкпоинтах, а clamp() — плавно на каждом пикселе ширины. Правил и брейкпоинтов нужно меньше. Если по макету нужны точные ступенчатые размеры, медиазапросы по-прежнему уместны.
Какие минимальную и максимальную ширину экрана выбрать?
Чаще всего берут 320px (маленький телефон) и 1280–1440px (ноутбук или максимальная ширина контейнера). Максимум лучше приблизить к ширине контента: дальше текст расти перестанет. Учтите, что vw включает ширину классической полосы прокрутки.
Что выбрать в результате: rem или px?
Лучше rem: он учитывает размер шрифта из настроек браузера, и текст остаётся масштабируемым. Значения в пикселях пользовательскую настройку не учитывают, поэтому px берите лишь осознанно.
Поддерживают ли браузеры clamp()?
Да, все современные браузеры с 2020 года (Chrome 79, Firefox 75, Safari 13.1). Для совсем старых сначала напишите обычный font-size: 1.25rem;, а следом строку с clamp() — непонятную строку старый браузер просто пропустит.