Адаптивный (responsive) дизайн — это когда одна и та же страница перестраивает сетку, размеры текста и картинок под ширину экрана: на компьютере колонки стоят рядом, на телефоне — друг под другом. Работает это за счёт тега viewport, гибкой сетки и CSS-правил для разных ширин (брейкпоинтов). Проверять результат нужно не только в эмуляторе браузера, но и на реальных телефонах.
После материала вы сможете
- объяснить, зачем нужен тег viewport и как брейкпоинты и гибкая сетка меняют раскладку
- спроектировать страницу по принципу mobile-first: главное действие, одна колонка, затем расширение
- задать области нажатия по ориентирам WCAG (24 и 44 CSS-пикселя), Apple (44 pt) и web.dev (48)
- проверить сайт по чек-листу типичных адаптивных багов на реальных телефонах
Что знать заранее
Содержание
Что такое адаптивный дизайн и почему без него нельзя
Раньше для телефонов часто делали отдельную мобильную версию сайта на поддомене вроде m.site.kz. Сегодня стандартный подход — адаптивный дизайн (responsive design): один сайт, один адрес, один код, а раскладка меняется в зависимости от ширины экрана. Меню сворачивается в бургер, три колонки карточек становятся одной, крупные иллюстрации заменяются более лёгкими.
Отдельная мобильная версия
- Два сайта, которые нужно поддерживать параллельно
- Контент на версиях со временем начинает расходиться
- Нужна переадресация между адресами
- Планшеты попадают то в одну версию, то в другую
Адаптивный сайт
- Один адрес и одно содержимое для всех устройств
- Правка текста сразу видна везде
- Раскладка плавно подстраивается под любую ширину
- Проще поддерживать и развивать
Mobile-first: почему начинают с телефона
Mobile-first — подход, при котором страницу сначала проектируют и верстают для узкого экрана, а потом расширяют для планшета и компьютера. Узкий экран заставляет решить главное: что действительно важно, какая кнопка основная, без чего можно обойтись. Расширять простую раскладку легче, чем ужимать перегруженную.
Определить главное действие
Что посетитель с телефона должен сделать в первую очередь: позвонить, написать в мессенджер, записаться.
Собрать раскладку в одну колонку
Блоки идут друг под другом в порядке важности, главная кнопка — в зоне досягаемости большого пальца.
Добавить брейкпоинты
Там, где контенту становится просторно, колонки выстраиваются рядом, появляется полное меню.
Проверить на реальных устройствах
Пройти ключевые сценарии на нескольких телефонах и в разных браузерах, а не только в эмуляторе.
На практике mobile-first влияет и на содержание, а не только на вёрстку. Длинный абзац, который на компьютере занимает три строки, на телефоне превращается в экран сплошного текста. Поэтому тексты для главных блоков лучше сразу писать короткими, а подробности убирать в раскрывающиеся блоки или на отдельные страницы.
Viewport, брейкпоинты и гибкие сетки
Первое, без чего адаптивность не заработает, — тег viewport в коде страницы: <meta name="viewport" content="width=device-width, initial-scale=1">. Без него мобильный браузер отрисовывает страницу на виртуальном холсте шириной с компьютерный экран (MDN приводит пример в 980px) и уменьшает её — текст становится мелким, а правила для узких экранов не срабатывают.
Брейкпоинт (breakpoint, точка перелома) — ширина экрана, на которой раскладка меняется. Хорошая практика — ставить брейкпоинты там, где «ломается» контент, а не под конкретные модели телефонов: устройств слишком много, и их размеры постоянно меняются. Между брейкпоинтами работает гибкая (резиновая) сетка: ширины задаются в процентах и долях, а не в фиксированных пикселях.
Узкий экран — телефон
- Что обычно меняется
- Одна колонка, бургер-меню, крупные кнопки, упрощённые иллюстрации
Средний — большой телефон в горизонтали, планшет
- Что обычно меняется
- Две колонки карточек, часть меню возвращается в шапку
Широкий — ноутбук и компьютер
- Что обычно меняется
- Полное меню, три-четыре колонки, боковые панели
Очень широкий монитор
- Что обычно меняется
- Контент ограничен максимальной шириной, чтобы строки не растягивались
Пальцы вместо курсора: размеры кнопок
Курсор мыши точный, палец — нет. Поэтому у кнопок и ссылок на телефоне должна быть достаточная площадь нажатия (touch target) и расстояние между ними. Ориентиры дают официальные руководства:
2424
CSS-пикселя — минимальный размер цели по WCAG 2.2, критерий 2.5.8 (уровень AA), с исключениями
4444
CSS-пикселя — усиленный критерий WCAG 2.5.5 (AAA); Apple для iOS рекомендует 44×44 pt
4848
независимых от плотности пикселей — рекомендуемый минимум по web.dev
По нашему опыту, самые частые проблемные места — иконки соцсетей в подвале, крестики закрытия окон и ссылки в мелком тексте: визуально они маленькие, и область нажатия у них нужно расширять отступами, даже если сам значок остаётся небольшим.
Картинки и текст на маленьком экране
Картинка, рассчитанная на широкий монитор, на телефоне весит столько же, но показывается в несколько раз меньше. Адаптивные изображения решают это: браузер сам выбирает подходящий по размеру файл.
- Атрибуты srcset и sizes дают браузеру несколько версий одной картинки разной ширины — он скачивает подходящую
- Элемент <picture> позволяет показать на телефоне другую кадрировку: например, крупный план вместо широкой панорамы
- Современные форматы WebP и AVIF при том же качестве обычно легче JPEG и PNG
- У каждой картинки указаны ширина и высота — тогда страница не «прыгает», пока изображение грузится
- Картинки ниже первого экрана загружаются лениво (loading="lazy")
- Текст набран размером, который читается без увеличения, а строки не уходят за край экрана
С текстом действует похожее правило. Размеры шрифта и отступы удобнее задавать в относительных единицах (rem, проценты, единицы ширины экрана) — тогда они масштабируются вместе с экраном и уважают настройки пользователя, если тот увеличил шрифт в системе. Заголовок, который на компьютере выглядит эффектно в 72 пикселя, на телефоне должен уменьшаться, иначе одно слово займёт целую строку и начнёт переноситься по слогам.
Типичные баги и как проверять сайт
Режим устройств в Chrome DevTools удобен для быстрой проверки, но он не заменяет реальный телефон: эмулятор не передаёт ощущение от нажатия пальцем, поведение экранной клавиатуры, особенности мобильного Safari и медленную мобильную сеть. Перед запуском страницу стоит пройти руками хотя бы на одном iPhone и одном Android.
Самый частый баг, который мы видим при аудите чужих сайтов, — горизонтальная прокрутка: какой-то один элемент (таблица, длинная ссылка, широкая картинка или анимированный блок) оказывается шире экрана, и вся страница начинает сдвигаться вбок. Второй по частоте — формы, у которых экранная клавиатура закрывает поле ввода или кнопку отправки.
- Нет горизонтальной прокрутки: страница не «ездит» вбок при свайпе
- Текст читается без увеличения, длинные слова и ссылки не вылезают за край
- Кнопки и ссылки легко нажимаются пальцем и не стоят вплотную друг к другу
- Всё, что открывалось наведением, работает по нажатию
- Экранная клавиатура не закрывает поле формы и кнопку отправки
- Липкая шапка и всплывающие окна не занимают половину экрана
- Телефон в контактах кликабелен и сразу открывает звонок
- Страница проверена в горизонтальной ориентации и на планшете
Адаптивный сайт — это не уменьшенная копия десктопа, а та же страница, заново продуманная для человека с телефоном в одной руке.
Источники
- Google Search Central: mobile-first indexing
- MDN: тег <meta name="viewport">
- MDN: адаптивный дизайн
- MDN: адаптивные изображения
- W3C WAI: WCAG 2.2, критерий 2.5.8 Target Size (Minimum)
- W3C WAI: WCAG 2.2, критерий 2.5.5 Target Size (Enhanced)
- Apple Human Interface Guidelines: Accessibility
- web.dev: Accessible tap targets
- Chrome DevTools: Device Mode
