Резиновая верстка (англ. fluid, или liquid layout) — это способ построения страницы, при котором ширина блоков задаётся в относительных единицах, и элементы плавно тянутся вслед за шириной окна браузера без переключения между заранее нарисованными макетами. Базовый приём — процент от контейнера плюс ограничитель ширины:

.container { width: 90%; /* тянется за окном */ max-width: 1200px; /* но не шире этого */ margin: 0 auto; /* по центру */ }

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

  • Суть — ширины в процентах, vw, fr; работу по подгонке макета делает браузер, а не набор фиксированных версий.
  • Рамкиmin-width и max-width держат блок в читаемом диапазоне, чтобы он не растекался и не сплющивался.
  • Каркас — Flexbox для компонентов и Grid для сетки страницы; оба гибкие по своей природе.
  • Типографикаclamp() масштабирует шрифт вместе с экраном без единого медиа-запроса.
  • Граница применимости — резина сама держит потяжку; переключить одноколоночник в три колонки может только медиа-запрос.

Чем резиновая верстка отличается от фиксированной, адаптивной и отзывчивой

Четыре термина постоянно путают, потому что три из них про «подстройку под экран». Разница — в механике: тянется макет плавно или переключается скачками, и на каких единицах он собран.

Тип верстки Единицы Как ведёт себя при изменении экрана Медиа-запросы
Фиксированная (fixed) px Жёсткая ширина. На узком экране появляется горизонтальная прокрутка, на широком — пустые поля по краям. Не нужны
Резиновая (fluid / liquid) %, vw, fr, rem Блоки плавно растягиваются и сжимаются за окном. Порядок и число колонок не меняются. Обычно не нужны или минимум
Адаптивная (adaptive) px в брейкпоинтах Несколько фиксированных макетов (телефон, планшет, десктоп). Между брейкпоинтами макет не меняется, на границе переключается скачком. Ключевой механизм
Отзывчивая (responsive) Относительные + брейкпоинты Гибрид: между брейкпоинтами тянется как резина, на брейкпоинтах перестраивает сетку (например, из трёх колонок в одну). Ключевой механизм

Термин «отзывчивый дизайн» (responsive web design) ввёл Итан Маркотт в 2010 году, описав связку из трёх приёмов: резиновые сетки, резиновые изображения и медиа-запросы (MDN). То есть резиновая верстка — это фундамент, на который отзывчивость добавляет переключение раскладки. Адаптивная же строит несколько отдельных фиксированных версий и подставляет подходящую. На практике сегодня почти всегда делают отзывчивую верстку: резина как база плюс несколько брейкпоинтов на крайние случаи.

Вывод раздела: резиновая — плавная растяжка одного макета; адаптивная — переключение фиксированных версий; отзывчивая — сочетание того и другого.

ОНЛАЙН-ПРАКТИКУМ
ЗАПУСК нейросети DEEPSEEK R1 ЛОКАЛЬНО НА СВОЕМ КОМПЬЮТЕРЕ
ЧТО БУДЕТ НА ОБУЧЕНИИ?
  • ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросети DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
  • Где и как применять? Потестируем модель после установки на разных задачах
  • Как дообучить модель под себя?

Относительные единицы — основа резиновой верстки

Резиновая верстка держится на относительных единицах: их значение вычисляется от чего-то (от родителя, корня, вьюпорта), а не прибивается к пикселям. Точные определения — по справочнику MDN:

  • % — процент от соответствующего размера родительского блока. Главная единица классической резины: width: 50% — половина ширины контейнера.
  • em — относительно font-size самого элемента (а на свойстве font-size — относительно унаследованного). Удобно для отступов, кратных шрифту.
  • rem — относительно font-size корневого элемента <html> (по умолчанию в браузере обычно 16px). Не зависит от вложенности, поэтому предсказуемее em.
  • vw — 1% ширины вьюпорта. При ширине окна 800px значение 50vw равно 400px.
  • vh — 1% высоты вьюпорта. При высоте 300px значение 70vh равно 210px.
  • vmin / vmax — меньшая и большая из vw и vh соответственно. Полезны для элементов, которые должны влезать по короткой стороне экрана.

Практический смысл: замена width: 960px на width: 80% уже делает блок резиновым. Замена font-size: 32px на font-size: 2rem связывает шрифт с базовым размером и упрощает масштабирование всей типографики разом.

Flexbox и Grid — современный каркас резины

Раньше резиновые сетки собирали на процентных float-колонках и вручную считали ширины. Сегодня современные механизмы раскладки резиновые по своей природе: Flexbox и Grid распределяют свободное место сами.

Flexbox хорош для компонентов в ряд — меню, карточек, панелей. Свойство flex: 1 заставляет элементы делить свободное место поровну и сжиматься при нехватке:

.row { display: flex; gap: 20px; } .row .item { flex: 1; /* делят ширину поровну */ min-width: 0; /* разрешает сжиматься ниже контента */ }

Grid отвечает за сетку страницы. Единица fr — это доля свободного места дорожки, полностью резиновая:

.grid { display: grid; grid-template-columns: 1fr 2fr 1fr; /* доли, а не пиксели */ gap: 24px; }

Приём repeat(auto-fit, minmax(240px, 1fr)) даёт сетку карточек, которая сама решает, сколько колонок влезет, — резина и переток в одном свойстве, без медиа-запросов:

.cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; }

Вывод раздела: Grid — под общую сетку страницы, Flexbox — под компоненты внутри неё; фиксированных px-ширин в дорожках лучше избегать.

min-width и max-width — рамки, чтобы резина не поехала

Чистая резина без ограничений вредит читаемости: на 4K-мониторе строка текста растянется на весь экран, а на узком — сплющится в столбик из одного слова. Ограничители держат блок в диапазоне:

.content { width: 90%; max-width: 720px; /* строка не длиннее комфортных ~70 символов */ min-width: 320px; /* не уже минимального читаемого блока */ margin: 0 auto; }

Пара width в процентах плюс max-width в пикселях — самая частая и надёжная конструкция резиновой верстки. Блок тянется, пока не упрётся в потолок, дальше центрируется полями. Функции min(), max() и clamp() позволяют записать те же рамки одной строкой, например width: min(90%, 720px).

Картинки и медиа в резиновом макете

Фиксированные размеры картинок ломают резину: широкое изображение вылезает за контейнер и вызывает горизонтальную прокрутку. Стандартное правило делает медиа резиновыми — они не превышают ширину контейнера, но и не раздуваются больше своего исходного размера:

img, picture, video { max-width: 100%; height: auto; /* сохраняет пропорции */ }

По MDN резиновые изображения уменьшаются вместе с колонкой, когда та сужается, и не растут выше собственного размера, когда колонка расширяется. Для мобильных обязателен и мета-тег вьюпорта — без него телефон рисует страницу в условные 980px и потом уменьшает её целиком:

<meta name="viewport" content="width=device-width, initial-scale=1">

Современный подход: clamp() для резиновой типографики

Долго шрифт масштабировали ступеньками через медиа-запросы: один font-size до 768px, другой после. Функция clamp() убирает эти ступеньки. Она зажимает значение между минимумом и максимумом, а между ними даёт плавный, привязанный к экрану рост:

h1 { font-size: clamp(1.75rem, 5vw, 3rem); }

Синтаксис — clamp(MIN, VAL, MAX), и работает он как max(MIN, min(VAL, MAX)). В примере заголовок не станет меньше 1.75rem и не превысит 3rem, а между этими границами тянется как 5vw. По MDN это даёт тот же эффект, что и резиновая типографика на медиа-запросах, но в одну строку и без них. Тем же приёмом задают резиновые отступы: padding: clamp(1rem, 4vw, 3rem). Это и есть современная резина: единицы вьюпорта плюс clamp() вместо россыпи брейкпоинтов.

Как сделать блок резиновым: пошагово

Маршрут: как сделать блок резиновым и удержать его в рамках
Маршрут: как сделать блок резиновым и удержать его в рамках

Порядок действий, который превращает фиксированный макет в резиновый и держит его в рамках. Схема-памятка ниже собирает эти шаги в один маршрут.

  1. Контейнер — задайте ширину в процентах и потолок: width: 90%; max-width: 1200px; margin: 0 auto. Это скелет резины.
  2. Сетка — внутренние колонки на Grid (fr) или Flexbox (flex: 1), без фиксированных px-ширин.
  3. Типографика и отступыclamp(min, vw, max) для font-size и крупных padding, чтобы масштаб шёл плавно.
  4. Картинки — глобально img { max-width: 100%; height: auto }, плюс мета-тег вьюпорта в <head>.
  5. Крайние случаи — там, где резина уже не спасает (три колонки не влезают в телефон), добавьте точечный медиа-запрос для перестройки сетки.

Когда хватает резины, а когда нужны медиа-запросы

Резиновая верстка и медиа-запросы — не альтернативы, а слои. Резина работает непрерывно и покрывает 80% случаев масштабирования. Медиа-запрос нужен там, где меняется не размер, а структура.

Хватает резины: блок тянется по ширине; шрифт и отступы растут плавно (clamp()); сетка карточек сама решает число колонок (auto-fit + minmax); картинки не вылезают за контейнер.

Нужен медиа-запрос: перестроить многоколоночник в один столбец на мобильном; спрятать или показать элемент (боковое меню → бургер); сменить направление Flexbox с row на column; поменять композицию Grid целиком.

.layout { display: grid; grid-template-columns: 250px 1fr; /* сайдбар + контент */ } @media (max-width: 768px) { .layout { grid-template-columns: 1fr; /* на мобильном — один столбец */ } }

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

Частые вопросы о резиновой верстке

Резиновая и адаптивная верстка — это одно и то же?

Нет. Резиновая тянет один макет плавно на относительных единицах. Адаптивная подставляет один из нескольких заранее сделанных фиксированных макетов на брейкпоинтах. Резиновая меняется непрерывно, адаптивная — скачками.

В чём разница между резиновой и отзывчивой версткой?

Резиновая только растягивает блоки. Отзывчивая (responsive) добавляет к резине медиа-запросы и на брейкпоинтах перестраивает саму сетку — например, из трёх колонок в одну. Резина — фундамент отзывчивости.

Какие единицы использовать для резиновой верстки?

Для ширин — проценты и fr в Grid; для шрифтов и отступов — rem и clamp() с единицами вьюпорта (vw). Пиксели оставляют для тонких границ и небольших фиксированных элементов.

Нужны ли медиа-запросы при резиновой верстке?

Для простого сайта часто нет: контейнер в процентах, Grid с auto-fit и clamp() покрывают масштабирование. Медиа-запросы добавляют там, где нужно сменить структуру макета, а не просто размер.

Как сделать картинки резиновыми?

Задать глобально img { max-width: 100%; height: auto }. Тогда изображение сжимается вместе с контейнером и не вылезает за его пределы, сохраняя пропорции.

Что такое clamp() и зачем он в резиновой верстке?

Это CSS-функция clamp(MIN, VAL, MAX): зажимает значение между минимумом и максимумом, а между ними масштабирует плавно. Позволяет сделать резиновый шрифт и отступы одной строкой, без медиа-запросов.

Обновлено в 2026 году. Материал редакции «Я — зерокодер»: разбираем фронтенд-практики для тех, кто собирает сайты без глубокого погружения в код.

Большой практикум
ЗАМЕНИ ВСЕ НЕЙРОСЕТИ НА ОДНУ — PERPLEXITY
ПОКАЖЕМ НА КОНКРЕТНЫХ КЕЙСАХ
  • Освой нейросеть Perplexity и узнай, как пользоваться функционалом остальных ИИ в одном
  • УЧАСТВОВАТЬ ЗА 0 РУБ.
  • Расскажем, как получить подписку
Участвовать бесплатно
ОНЛАЙН-ПРАКТИКУМ
ЗАПУСК нейросети DEEPSEEK R1 ЛОКАЛЬНО НА СВОЕМ КОМПЬЮТЕРЕ
ЧТО БУДЕТ НА ОБУЧЕНИИ?
  • ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросеть DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
Участвовать бесплатно