
Адаптивная верстка позволяет сайту корректно отображаться на экранах разного размера: от смартфонов до широкоформатных мониторов. Для этого используется комбинация HTML-разметки и гибкой структуры сетки с применением относительных единиц измерения.
Первый шаг – добавление в head мета-тега viewport. Он сообщает браузеру, как масштабировать страницу на мобильных устройствах:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Следующее правило – использование процентов, единиц em, rem или vw/vh вместо фиксированных пикселей. Это позволяет тексту и блокам подстраиваться под доступное пространство.
Для перестройки структуры применяются media queries. Например, можно задать разный размер колонок или скрыть элементы при ширине экрана меньше 768px:
@media (max-width: 768px) { .sidebar { display: none; } }
Чтобы изображения не выходили за пределы контейнера, им задают правило max-width: 100%. Это гарантирует масштабирование под ширину блока без искажений.
Использование метатега viewport для корректного масштаба

Базовый вариант записи:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Ключевые параметры:
| Параметр | Значение | Назначение |
|---|---|---|
| width | device-width / фиксированное число | Устанавливает ширину области просмотра равной экрану устройства или конкретному значению в пикселях. |
| initial-scale | 0.1–10 | Определяет начальный масштаб страницы при загрузке. |
| minimum-scale | 0.1–10 | Ограничивает минимальное уменьшение масштаба пользователем. |
| maximum-scale | 0.1–10 | Ограничивает максимальное увеличение масштаба. |
| user-scalable | yes / no | Разрешает или запрещает пользователю изменять масштаб страницы. |
Рекомендуется использовать комбинацию width=device-width, initial-scale=1.0, чтобы элементы интерфейса корректно масштабировались под ширину экрана. Жесткое ограничение user-scalable=no применяется только при необходимости, так как снижает доступность.
Применение относительных единиц измерения вместо пикселей

Фиксированные пиксели делают макет жестким и неудобным на устройствах с разным разрешением. Для гибкой адаптации используются относительные единицы: %, em, rem, vw, vh.
% задаёт размеры относительно родительского контейнера. Например, ширина блока width: 50%; занимает половину доступного пространства.
em зависит от размера шрифта родителя. Если родитель имеет font-size: 16px;, то 2em равны 32px. Это полезно для внутренних отступов и размеров кнопок.
rem рассчитывается от корневого html. Если корню задать font-size: 10px;, то 1.6rem будет 16px. Такой подход упрощает масштабирование всей типографики.
vw и vh связаны с шириной и высотой окна браузера. Например, width: 100vw; растянет элемент на всю ширину, а height: 50vh; займёт половину высоты экрана.
Для адаптивной верстки рекомендуется комбинировать единицы: ширину блоков задавать в % или vw, шрифты в rem, отступы в em. Такой подход обеспечивает масштабируемость без медиазапросов в большинстве случаев.
Настройка адаптивных изображений с помощью атрибута srcset
Атрибут srcset позволяет указывать несколько вариантов одного изображения с разным разрешением или размерами файла. Браузер автоматически выбирает подходящий вариант в зависимости от ширины экрана и плотности пикселей.
Пример использования:
<picture>
<source srcset="photo-800.jpg 800w, photo-1200.jpg 1200w, photo-1600.jpg 1600w" sizes="(max-width: 768px) 100vw, 50vw">
<img src="photo-800.jpg" alt="Пример изображения">
</picture>
В параметре w указывается ширина изображения в пикселях, а в sizes – правило, определяющее, какой размер должен занимать элемент на экране. В примере при ширине экрана до 768px картинка растягивается на всю ширину (100vw), иначе используется половина (50vw).
Рекомендуется готовить изображения в нескольких вариантах: 480px, 768px, 1200px и 1600px. Такой диапазон покрывает смартфоны, планшеты, ноутбуки и мониторы с высоким разрешением. Важно сохранять оптимальный баланс между качеством и весом файлов, чтобы уменьшить время загрузки.
Создание гибкой сетки с использованием flexbox

Flexbox позволяет формировать сетку, где элементы автоматически подстраиваются под ширину контейнера. Для включения режима используйте свойство display: flex; на родительском блоке.
Чтобы элементы распределялись по строке и переносились при недостатке места, применяйте flex-wrap: wrap;. Это позволит карточкам или блокам переходить на новую строку, сохраняя читаемость.
Задайте равномерное распределение элементов с помощью justify-content: space-between; или space-around;. Для вертикального выравнивания используйте align-items: center; или flex-start; в зависимости от задачи.
Каждому элементу внутри сетки можно задать гибкость через flex: 1;, чтобы они делили пространство поровну, либо указать значения в формате flex: 2; или flex: 0 0 200px; для фиксированной ширины.
При создании адаптивных сеток полезно комбинировать flex-свойства с медиа-запросами. Например, на больших экранах отображать четыре колонки, а при уменьшении ширины – две или одну, изменяя правила flex-basis и max-width.
Построение адаптивного макета на grid

CSS Grid позволяет формировать сетку с явным управлением строками и колонками, что упрощает адаптацию под разные размеры экрана. Основной контейнер задаётся свойством display: grid, после чего можно определить количество колонок с помощью grid-template-columns.
Для адаптивности удобно использовать функцию repeat(auto-fit, minmax()). Пример: grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); – элементы будут распределяться равномерно, сохраняя минимальную ширину 250px.
При работе с grid стоит учитывать отступы между элементами. Для этого используется свойство gap, которое заменяет устаревшие grid-row-gap и grid-column-gap.
Если требуется управлять расположением блоков на разных разрешениях, применяются медиа-запросы. Например, можно увеличить количество колонок на больших экранах или изменить соотношение областей с помощью grid-template-areas.
Для сложных интерфейсов полезно описывать сетку через именованные области: grid-template-areas в контейнере и grid-area у элементов. Это делает код читаемым и упрощает перестановку элементов без изменения HTML-структуры.
Использование fr единиц вместо фиксированных значений позволяет гибко распределять пространство. Например, 2fr 1fr создаст две колонки, где первая занимает в два раза больше места.
Применение медиазапросов для разных размеров экранов
Медиазапросы позволяют адаптировать отображение элементов сайта под конкретные размеры экранов, изменяя стили CSS без изменения HTML. Основной синтаксис выглядит так:
@media (max-width: 768px) {
/* стили для экранов до 768px */
}
@media (min-width: 769px) and (max-width: 1200px) {
/* стили для экранов от 769px до 1200px */
}
Рекомендуется использовать несколько ключевых диапазонов:
- До 480px: смартфоны в портретной ориентации. Минимизировать размеры изображений, скрывать вспомогательные блоки.
- 481–768px: планшеты и крупные смартфоны. Увеличивать поля, изменять сетку колонок на одну или две.
- 769–1024px: небольшие ноутбуки и планшеты в ландшафтной ориентации. Оптимизировать шрифты и меню, обеспечить читаемость таблиц.
- 1025–1440px: стандартные десктопы. Поддерживать стандартную сетку, корректировать ширину блоков и изображений.
- Свыше 1440px: широкие экраны. Использовать большие контейнеры, увеличивать интерлиньяж и масштаб элементов.
Практические рекомендации при работе с медиазапросами:
- Ставить базовые стили «mobile-first» и дополнять их медиазапросами для больших экранов.
- Избегать избыточного числа диапазонов. Достаточно 3–5 ключевых точек.
- Проверять корректность отображения на реальных устройствах и с помощью инструментов разработчика.
- Использовать относительные единицы (
em,rem,%) вместо фиксированных пикселей для гибкой адаптации. - Оптимизировать медиа для изображений с
srcsetиsizes, чтобы уменьшить нагрузку на мобильные устройства.
Медиазапросы также поддерживают не только ширину, но и ориентацию экрана, разрешение и возможности устройства:
@media (orientation: landscape) {
/* стили для ландшафтной ориентации */
}
@media (min-resolution: 2dppx) {
/* стили для экранов с высокой плотностью пикселей */
}
Правильное применение медиазапросов повышает читаемость, улучшает юзабилити и ускоряет загрузку сайта на разных устройствах.
Вопрос-ответ:
Что такое адаптивная верстка и зачем она нужна?
Адаптивная верстка — это способ создания веб-страниц, при котором их содержимое корректно отображается на устройствах с разными размерами экранов. Она позволяет изменять расположение элементов, размер изображений и шрифтов, чтобы сайт оставался удобным для чтения и взаимодействия как на телефоне, так и на компьютере.
Как использовать медиа-запросы в CSS для разных устройств?
Медиа-запросы позволяют задавать отдельные стили для различных ширин экранов. Например, с помощью правила @media (max-width: 768px) { ... } можно определить стили для планшетов и телефонов. Это может быть изменение ширины блоков, скрытие лишних элементов или увеличение шрифтов. Такой подход помогает контролировать внешний вид страницы на конкретных устройствах.
Стоит ли использовать фреймворки для адаптивной верстки?
Фреймворки вроде Bootstrap или Tailwind содержат готовые сетки и классы для работы с различными размерами экранов. Они ускоряют разработку и уменьшают количество ручной работы, особенно для новичков. Однако можно обойтись и собственными стилями, если проект небольшой и нужна точная настройка внешнего вида.
Как правильно масштабировать изображения для адаптивного сайта?
Для адаптивных сайтов лучше использовать изображения с атрибутами width: 100% и height: auto. Это позволяет картинкам автоматически подстраиваться под ширину контейнера. Также можно применять элемент <picture> с разными источниками для мобильных и десктопных версий, чтобы уменьшить вес страницы и ускорить загрузку.
Какие ошибки чаще всего встречаются при создании адаптивной верстки?
Одна из частых ошибок — фиксированные размеры блоков и шрифтов, из-за чего элементы не помещаются на экране маленьких устройств. Еще одна — отсутствие проверки на разных разрешениях, из-за чего часть контента может скрываться или перекрываться. Также иногда неправильно используются медиа-запросы, что ведет к непоследовательному отображению элементов.
