vasilenko.info

Генератор clamp() для флюидной типографики

/tool/clamp-generator/ работает считает браузер

Задайте размер на узком экране и на широком, укажите ширины, между которыми он растёт, — и получите строку clamp() вместо трёх медиазапросов. Можно взять сразу всю шкалу: кегли заголовков по модульному соотношению или набор отступов от 3xs до 3xl.

промоДвадцать лет заметок про сайтыКак это делали в 2008-м и что из этого работает сейчас.Открыть

Расчёт строки clamp()

Между двумя ширинами размер идёт по прямой; за ними — упирается в границы.

Что считаем

Одно значение — одна строка. Шкала кеглей — набор переменных --step--2 … --step-5 по модульному соотношению.

Пары кеглей из типового макета — нажмите и подставится
Ширина макета и размер на нём, через двоеточие; две пары через запятую. Заполнит все четыре поля разом. Три пары включат точку перегиба.
Нижняя граница: меньше этого не станет
Верхняя граница: больше этого не станет
Обычно самый узкий телефон, который вы поддерживаете
Обычно ширина вашего контейнера, а не монитора
Нужна, когда с телефона до планшета размер должен расти быстрее, чем дальше до десктопа. На выходе — min() или max() внутри clamp().
Арифметика от свойства не меняется — меняется только имя в готовой строке
Нужен только для перевода в rem
Единицы в готовой строке
Единица масштаба

Образец, число «сейчас» и отметка на графике идут за ползунком: тащить браузер за угол не нужно.

Сейчас в вашем окне

px

Проверка доступности считается вместе со строкой.

Образец

Тем же значением набран этот образец

Что забрать
clamp.css готовый CSS

Считает браузер. Ни числа, ни готовые строки никуда не отправляются: файл собирается прямо на устройстве, а ссылка для обмена лежит в адресной строке.

График и таблица

По горизонтали — ширина от 320 до 2560 px, по вертикали — размер в пикселях. Полки слева и справа: там значение упёрлось в границу.

График строится по тем же числам, что и таблица.

Размер на контрольных ширинах
промоПосчитайте заодно ROIОкупаемость кампании по расходу и доходу.Открыть

Как пользоваться

  1. Возьмите два размера из макета: телефонный и десктопный. Кнопка «Разобрать» принимает их одной строкой вида 375:20, 1440:48 — четыре поля заполнятся сами.

  2. Ширины ставьте те, на которых макеты нарисованы. Нижнюю — самый узкий поддерживаемый экран, верхнюю — ширину контейнера, а не ширину монитора.

  3. Нужна вся типографика разом — переключитесь на «Шкалу кеглей»: базовый кегль, соотношение на узком и на широком экране, число шагов вверх и вниз. На выходе набор --step--2 … --step-5. «Шкала отступов» тем же способом даёт --space-3xs … --space-3xl и пары вроде --space-s-m.

  4. Оставьте единицы rem: слагаемое в rem обязательно. Строка из одного vw не отзывается на увеличение шрифта в настройках браузера — блок «доступность» показывает, во сколько раз вырастет текст при удвоении базового кегля и при zoom 200 %.

  5. Ползунок «Ширина для примерки» двигает всю картину: образец, число «сейчас» и отметку на графике. Кнопка рядом возвращает ширину настоящего окна.

  6. Вкладки под кодом дают одно и то же шестью способами: строка CSS, переменные в :root, SCSS, PostCSS с отдельными min и max, JSON-токены и кусок конфига Tailwind. Кнопка «Скачать файлом» сохраняет выбранную вкладку.

  7. Кнопка «Скопировать ссылку» кладёт всю конфигурацию в адрес — ссылку можно отправить в чат, и коллега увидит ту же шкалу.

промоСписок задач в браузереБез аккаунта, всё хранится на вашем устройстве.Открыть

Формула и что в неё входит

clamp(мин, наклон × 100 vw + сдвиг, макс), где наклон = (макс − мин) ÷ (ширина макс − ширина мин)

Средний аргумент clamp() — обычное значение, а не отдельный режим: браузер считает его на каждой ширине заново и обрезает границами. Медиазапросы для этого не нужны. Шкала считается тем же способом, просто строк на выходе не одна, а по числу шагов: у каждого шага свои мин и макс, а ширины общие.

Разбор примера: с 16 px на 32 px между 400 и 1200 px

Исходные данные — те же, что стоят в полях по умолчанию: их можно пересчитать в уме и убедиться, что инструмент не врёт.

  1. Наклон: (32 − 16) ÷ (1200 − 400) = 16 ÷ 800 = 0,02.

  2. Коэффициент vw: 0,02 × 100 = 2. То есть 2vw.

  3. Сдвиг: 16 − 0,02 × 400 = 16 − 8 = 8 px. В rem это 8 ÷ 16 = 0.5rem.

  4. Границы в rem: 16 ÷ 16 = 1rem и 32 ÷ 16 = 2rem.

  5. Проверка на 400 px: 0.5rem это 8 px, 2vw это 8 px, сумма 16 px. Проверка на 1200 px: 8 + 24 = 32 px.

  6. Доступность на 1280 px. Обычно там 8 + 25,6 = 33,6 px, потолок обрезает до 32. Читатель ставит базовый кегль 32 px вместо 16 — все rem удваиваются: 16 + 25,6 = 41,6 px при потолке 64. Было 32, стало 41,6 — это 130 %, а не 200 %, и WCAG 1.4.4 не выполнен. Инструмент показывает это число сразу: чтобы дотянуть до двойного, поднимают верхнюю границу или уменьшают долю vw.

font-size: clamp(1rem, 0.5rem + 2vw, 2rem);

Частые вопросы

промоВесь каталог инструментовСорок четыре штуки, все считают в браузере.Открыть

Смежные инструменты

5