Единицы измерения CSS: px, rem, em, %, vw и другие

CSS / Адаптивность

Единицы измерения CSS: px, rem, em, %, vw и другие

Как выбирать абсолютные и относительные единицы CSS для текста, отступов, контейнеров, viewport и адаптивной сетки.

Опубликовано 04.09.2026 4 минуты чтения
Содержание статьи

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

Практичное правило: используйте единицу, которая выражает нужную связь. Рамка может оставаться 1px, текст — масштабироваться в rem, ширина — ограничиваться процентом и max-width, а колонки Grid — делить свободное место через fr.

px: CSS-пиксель

CSS
.card {  border: 1px solid #d0d5dd;}​

px — абсолютная CSS-единица, но она не обязана соответствовать одному физическому пикселю экрана. Она удобна для тонких рамок, теней и деталей, которые не должны зависеть от размера шрифта.

Не фиксируйте в пикселях всё подряд. Текст и компоненты должны выдерживать пользовательское масштабирование.

rem: размер корневого шрифта

1rem равен вычисленному font-size элемента <html>.

CSS
body {  font-size: 1rem;}​.article h2 {  margin-block-start: 3rem;  font-size: 2rem;}​

Если пользователь изменит базовый размер, значения в rem масштабируются согласованно. Не используйте приём html { font-size: 62.5%; }: он переопределяет пользовательскую базу и усложняет совместную работу.

em: размер текущего элемента

Для font-size единица em зависит от размера шрифта родителя, а в большинстве других свойств — от размера самого элемента.

CSS
.button {  padding: 0.65em 1em;  border-radius: 0.5em;}​.button--large {  font-size: 1.25rem;}​

Отступы и радиус большой кнопки увеличатся вместе с текстом. При глубокой вложенности размеры em могут неожиданно перемножаться:

CSS
.menu {  font-size: 1.1em;}​

Каждый вложенный .menu станет ещё крупнее. Для независимых размеров часто проще rem.

Проценты

Процент зависит от свойства и контекста. Ширина обычно вычисляется относительно содержащего блока:

CSS
.image {  max-inline-size: 100%;  block-size: auto;}​

Вертикальный padding в процентах тоже имеет особенности контекста. Не угадывайте — проверяйте определение конкретного свойства.

Процентная высота работает только при определённой высоте содержащего блока. Для секции с текстом чаще нужны содержимое, padding и min-block-size, а не height: 100%.

Viewport: vw, vh, dvh, svh, lvh

  • 1vw — 1% ширины viewport;
  • 1vh — 1% его высоты по традиционной модели;
  • dvh — 1% динамической высоты с учётом изменения браузерных панелей;
  • svh и lvh — малая и большая высота viewport.

Для полноэкранного мобильного блока часто уместнее:

CSS
.dialog {  min-block-size: 100dvh;}​

Добавьте fallback, если поддерживаете старые браузеры:

CSS
.dialog {  min-block-size: 100vh;  min-block-size: 100dvh;}​

Не задавайте основной текст как font-size: 3vw: на узком экране он станет слишком мелким, на широком — огромным. Ограничивайте диапазон.

ch и длина строки

CSS
.article {  max-inline-size: 70ch;}​

ch приблизительно равен ширине символа 0 текущего шрифта. Это удобный ориентир для текстовой колонки, но реальная ширина букв различается.

lh и rlh связаны с высотой строки текущего и корневого элемента:

CSS
.icon {  inline-size: 1lh;  block-size: 1lh;}​

Они полезны для привязки размеров к вертикальному ритму.

fr в CSS Grid

fr — доля свободного пространства в сетке, а не обычная единица длины:

CSS
.layout {  display: grid;  grid-template-columns: minmax(0, 2fr) minmax(16rem, 1fr);  gap: 2rem;}​

minmax(0, 2fr) позволяет колонке с длинным содержимым реально сжиматься. Без нулевого минимума строка кода или длинный URL иногда раздвигает сетку.

clamp(), min() и max()

Эти функции комбинируют разные единицы:

CSS
.hero__title {  font-size: clamp(2rem, 1.2rem + 4vw, 5rem);}​.container {  inline-size: min(100% - 2rem, 75rem);  margin-inline: auto;}​

Заголовок плавно растёт между минимумом и максимумом. Контейнер занимает доступную ширину с полями, но не превышает 75rem.

Практическая шпаргалка

Задача Частый выбор
Основной размер текста rem
Отступ, связанный с текущим текстом em
Тонкая рамка px
Ширина адаптивного блока %, min(), max-width
Ограничение текстовой колонки ch
Полноэкранная высота на мобильном dvh с fallback
Доли Grid fr
Плавный размер с границами clamp()

Что запомнить

Не заменяйте все px на rem механически. Сначала определите зависимость размера. Проверяйте интерфейс при ширине 320 px, масштабе 200%, увеличенном системном шрифте и с длинным содержимым — именно эти тесты показывают, удачно ли выбраны единицы.

Сообщить об ошибке в статье

Рекомендации редакции

Другие публикации из этого раздела.

Новые материалы

Получайте практические разборы без информационного шума

Одна общая рассылка о новых статьях и инструментах. Адрес будет активироваться только после подтверждения.

Подписка появится после подключения сервиса рассылок и Yandex SmartCaptcha.