Конвертер px, rem и em

Переведите rem в px или px в rem: введите значение, задайте базовый размер шрифта — результат посчитается сразу.

Часто

Введите значение — пересчёт появится здесь

Частые значения при базовом шрифте 16px

pxremem%
80.50.550
100.6250.62562.5
120.750.7575
140.8750.87587.5
1611100
181.1251.125112.5
201.251.25125
241.51.5150
281.751.75175
3222200
362.252.25225
402.52.5250
4833300
563.53.5350
6444400

Как перевести rem в px и обратно

Обе формулы держатся на одном числе, базовом размере шрифта корневого элемента. По умолчанию в браузерах это 16px.

css
px  = rem × 16      /* 1.5rem × 16 = 24px */
rem = px  ÷ 16      /* 24px  ÷ 16 = 1.5rem */

Если база другая, скажем дизайн-система живёт на 14px, подставьте её вместо шестнадцати. Конвертер выше умеет считать с любой базой.

Таблица соответствий при базе 16px

Значения, которые встречаются в вёрстке чаще всего. Держите под рукой, чтобы не считать в уме.

pxremГде применяется
4px0.25remМелкий отступ, зазор между иконкой и текстом
8px0.5remВнутренний отступ компактных элементов
12px0.75remПодписи, вспомогательный текст
14px0.875remМелкий текст интерфейса
16px1remБазовый размер текста
20px1.25remКрупный текст, подзаголовок
24px1.5remЗаголовок третьего уровня, отступ секции
32px2remЗаголовок, крупный отступ
48px3remОтступ между блоками страницы
64px4remКрупный заголовок, отступ секции

Чем rem отличается от em

rem всегда считается от корневого элемента, а em от размера шрифта родителя. Разница вылезает при вложенности: em накапливается.

css
/* em копится: каждый уровень умножает предыдущий */
.a { font-size: 0.9em; }  /* 14.4px от базовых 16px */
.a .b { font-size: 0.9em; }  /* 12.96px — уже не от 16px, а от 14.4px */
.a .b .c { font-size: 0.9em; }  /* 11.66px */

/* rem не копится: отсчёт всегда от html */
.a, .a .b, .a .b .c { font-size: 0.9rem; }  /* везде 14.4px */

Поэтому для типографики и отступов берут rem, он предсказуем. em остаётся полезен там, где размер должен зависеть от текста рядом. Скажем, внутренний отступ кнопки, который сам подстраивается под кегль надписи.

Зачем вообще rem вместо px

Ради людей, которые увеличивают шрифт в настройках браузера. Размеры в rem подхватят эту настройку автоматически: текст, отступы и блоки вырастут вместе. Размеры в px останутся мелкими, и сайт для такого человека просто не читается. Это самая частая причина жалоб на «слишком мелкий шрифт», и лечится она выбором единицы.

При этом px никуда не уходит: границы в 1px, тонкие разделители и размеры иконок масштабировать не нужно. Смешивать единицы нормально, если понимаешь, почему в каждом месте выбрана своя.

Трюк с базой 10px

Чтобы деление на 16 не мешало жить, корню задают font-size: 62.5%, это как раз 10px от стандартных 16px. После этого 1rem = 10px, и перевод превращается в сдвиг запятой: 24px — это 2.4rem.

css
html { font-size: 62.5%; }  /* 1rem = 10px */
body { font-size: 1.6rem; } /* вернули читаемые 16px тексту */

Важная деталь. Базу задают в процентах, а не в пикселях. Жёсткое font-size: 10px на корне отрезало бы пользовательскую настройку шрифта, то есть убило бы ровно то, ради чего мы взяли rem. Проценты же считаются от пользовательской базы и сохраняют масштабирование.

Шрифт, который тянется за экраном

Если размер должен плавно меняться вместе с шириной окна, фиксированного rem мало, нужна функция clamp(). Она задаёт минимум, желаемое значение и максимум одной строкой, а собрать её можно в калькуляторе clamp.

Про формулу перевода, трюк с базой 10px и то, почему rem важен для доступности, написано в статье «Как перевести px в rem (и обратно)».

Похожие инструменты

Другие полезные инструменты из той же категории

Часто задаваемые вопросы

Умножьте значение в rem на базовый размер шрифта. По умолчанию он равен 16px, поэтому 1rem = 16px, 1.5rem = 24px, 2rem = 32px. Формула: px = rem × базовый размер. Введите значение в конвертер выше — он посчитает сам, в том числе для нестандартной базы.

Разделите пиксели на базовый размер шрифта: rem = px ÷ 16. Например, 24px ÷ 16 = 1.5rem, а 12px ÷ 16 = 0.75rem. Отсюда популярный трюк с базой 10px: при font-size: 62.5% на корне 1rem становится равен 10px, и деление в уме превращается в сдвиг запятой.

В большинстве браузеров 1rem = 16px, потому что таков размер шрифта по умолчанию у корневого элемента html. Но это значение не константа: если пользователь увеличил шрифт в настройках браузера или вы переопределили font-size у html, вместе с ним изменятся и все размеры в rem — в этом и весь смысл единицы.

Rem всегда считается от корневого элемента, а em — от размера шрифта родителя. Из-за этого em накапливается: вложите три элемента с font-size: 0.9em, и на третьем уровне получите 0.73 от исходного размера. Rem от вложенности не зависит и потому предсказуемее. Em остаётся удобен там, где размер должен зависеть от текста рядом, — например, отступ внутри кнопки.

Rem — для всего, что должно масштабироваться вместе с настройками пользователя: шрифты, отступы, ширины блоков. Px — для того, что масштабироваться не должно: границы в 1px, тонкие разделители, размеры иконок. Смешивать их нормально, главное — понимать, почему в каждом месте выбрана своя единица.

Люди с ослабленным зрением увеличивают шрифт в настройках браузера. Размеры в rem подхватят это изменение автоматически, а жёстко заданные в px — нет: текст останется мелким, и человек просто не сможет прочитать сайт. Это не теория, а частая причина жалоб на нечитаемые интерфейсы.