Современный фронтенд давно живёт в мире, где один и тот же сайт могут открыть на телефоне, планшете, ноутбуке, ультрашироком мониторе и даже телевизоре. Экраны отличаются не только размерами, но и пропорциями, плотностью пикселей и сценариями использования. В таких условиях верстка должна уметь подстраиваться под пространство, а не диктовать ему свои правила.
Именно здесь на сцену выходит резиновая верстка — подход, который делает интерфейс гибким, предсказуемым и устойчивым к изменению размеров окна браузера.
Разнообразие устройств — реальность, а не теория
Пользователи могут просматривать веб-страницы, используя множество вариантов устройств, каждое из которых обладает своей шириной экрана и своими особенностями. Поэтому важно, чтобы верстка выглядела хорошо на всех типах устройств, а не только «на компьютере дизайнера».
Почему фиксированная верстка — проблема
При фиксированной верстке возникают классические боли:
- На широких мониторах сайт сиротливо стоит по центру, окружённый пустотой.
- Если ширина сайта больше, чем ширина экрана — появляется горизонтальная прокрутка, которая моментально ухудшает UX.
- Любое изменение контента или шрифта может сломать композицию.
Фиксированные значения хороши только там, где мы полностью контролируем среду. В вебе это почти всегда не так.
Что такое резиновая верстка
Резиновая верстка — это верстка, в которой размеры дочерних элементов подстраиваются под размеры их родительских блоков.
Проще говоря, страница «тянется».
Ключевые особенности:
- Элементы масштабируются при изменении ширины окна;
- Компоновка сохраняется;
- Интерфейс выглядит предсказуемо.
Элементы остаются на местах
Важно не путать резиновую верстку с адаптивной или отзывчивой.
- Резиновая верстка — элементы растягиваются и сжимаются, оставаясь на своих местах;
- Адаптивная / responsive — на разных ширинах могут меняться сетки, порядок блоков и даже логика интерфейса.
Резиновый подход хорош там, где структура должна быть стабильной, а размеры — гибкими.
Проценты вместо пикселей
Основа «резиновости» — относительные единицы измерения.
Вместо:
width: 400px;
используется:
width: 40%;
Почему это работает
Проценты вычисляются от размеров родительского блока, поэтому элемент автоматически подстраивается под доступное пространство.
Ширина в процентах
Чтобы сделать верстку резиновой, нужно позволить блокам растягиваться:
width: 100%;
или
width: 40%;
В этом случае ширина блока:
- Рассчитывается динамически;
- Напрямую зависит от ширины родителя;
- Корректно меняется при ресайзе окна.
Ширина родителя в процентах
Если задать родительскому контейнеру:
мы получаем блок, который занимает всю ширину окна браузера, независимо от его размеров. Все вложенные элементы начинают масштабироваться относительно него — и цепочка резиновости замыкается.
Высота в процентах: не всё так просто
С высотой ситуация сложнее, чем с шириной.
По умолчанию:
- Элементы с display: block имеют height: auto;
- Высота определяется содержимым.
Когда проценты по высоте работают
Высота в процентах будет работать только если у родителя задана явная высота, отличная от auto.
Не указывайте фиксированную высоту
Фиксированная высота — почти всегда плохая идея:
- Мы не знаем, сколько контента будет внутри;
- Текст может увеличиться;
- Перевод на другой язык может сломать блок.
Результат — контент «наезжает» на соседние элементы и ломает верстку.
Размер шрифта в процентах
Размер шрифта тоже можно задавать в процентах:
В этом случае размер шрифта .btn будет вычисляться от размера шрифта родителя.
Меняем сразу везде
Если изменить font-size у .container, кнопка автоматически подстроится. Это удобно:
- Для масштабирования интерфейса;
- Для темизации;
- Для поддержки accessibility.
Вертикальные отступы тоже считаются от ширины
Важный момент, который часто удивляет:
margin-top, margin-bottom, padding-top, padding-bottom, заданные в процентах, рассчитываются от ширины блока, а не от высоты.
Поэтому:
padding: 1%;
— это не «1% по вертикали», а 1% от ширины элемента.
Flexbox — лучший друг резиновой верстки
CSS Flexbox (Flexible Box Layout Module) — это модуль гибкой раскладки элементов, который идеально ложится на философию резиновой верстки.
Почему Flexbox облегчает работу
- Простая и логичная модель;
- Автоматическая подстройка элементов;
- Управление направлением, выравниванием и размерами;
- Минимум костылей.
Как только родителю задано:
display: flex;
он становится flex-контейнером, а его дочерние элементы — flex-элементами.
В строку по умолчанию
По умолчанию flex-элементы выстраиваются:
- Вдоль главной оси;
- Слева направо;
- В одну строку.
Главная ось при этом горизонтальная.
Подстройка под контент
Если внутри flex-контейнера несколько элементов разной высоты:
- Контейнер примет высоту самого высокого элемента;
- Все остальные элементы визуально подстроятся под него.
Это решает множество старых проблем с колонками одинаковой высоты.
flex-direction — управление направлением
Свойство flex-direction позволяет менять направление главной оси.
Значения:
- row — по умолчанию, слева направо;
- row-reverse — справа налево;
- column — сверху вниз;
- column-reverse — снизу вверх.
При смене направления меняются местами главная и дополнительная оси.
Не нужно переопределять свойства
Одна из сильных сторон flexbox — прогрессивное улучшение.
Например, float не работает внутри flex-контейнера, поэтому старые стили просто перестают влиять на layout. Это позволяет аккуратно обновлять верстку без переписывания всего CSS.
Кратко о резиновой верстке
- Размеры дочерних элементов зависят от родителей;
- Элементы остаются на местах при изменении ширины окна;
- Основа — относительные единицы измерения (проценты).
Размеры в процентах: важные нюансы
- Ширина в процентах считается от ширины родителя;
- Высота в процентах работает только при заданной высоте родителя;
- Фиксированной высоты лучше избегать;
- Абсолютно позиционированный элемент считает проценты от ближайшего не статичного родителя;
- position: fixed считает проценты от окна браузера.
Фишки резиновой верстки
- min-width — ограничивает сжатие;
- max-width — ограничивает растяжение;
- font-size в процентах наследуется от родителя;
- margin и padding в процентах всегда считаются от ширины.
Flexbox: основные понятия
- Родитель с display: flex — flex-контейнер;
- Его дети — flex-элементы;
- Flex-элементы подстраиваются под высоту родителя;
- Если высота не задана — всё ориентируется на самый высокий контент.
Оси flexbox
- Есть главная и дополнительная оси;
- По умолчанию элементы выстраиваются в ряд;
- flex-direction меняет оси местами и меняет направление;
- reverse разворачивает поток элементов.
Заключение
Резиновая верстка — это фундаментальный навык фронтенд-разработчика. Она учит думать не в пикселях, а в пропорциях, не в экранах, а в контексте.
В сочетании с Flexbox резиновая верстка позволяет создавать интерфейсы, которые:
- Выглядят аккуратно на любых устройствах;
- Легко масштабируются;
- Устойчивы к изменению контента:
- Проще поддерживаются и развиваются.
Если страница должна тянуться, но не ломаться — вы на правильном пути.
Полезные ресурсы:
Сообщество дизайнеров в VK:
https://vk.com/grafantonkozlov
Канал на Дзен:
https://dzen.ru/grafantonkozlov
Телеграмм канал сообщества:
https://t.me/grafantonkozlov
Премиум контент:
https://dzen.ru/grafantonkozlov?tab=premium