Адаптивная верстка с нуля: как сделать сайт удобным на телефоне

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

Что такое адаптивная верстка

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

Чем адаптивная верстка отличается от мобильной версии

На практике часто спрашивают: «Может, проще сделать отдельный мобильный сайт?» Давайте разложим по полочкам. Я сам когда-то поддерживал проекты с двумя версиями — это двойная работа по обновлению контента и риск расхождения URL. Сейчас почти всегда выгоднее адаптивный подход. Исключения — очень сложные веб-приложения, где мобильный интерфейс радикально отличается, но для обычных сайтов и лендингов адаптивность — золотая середина.

Подход Как работает Плюсы Минусы
Отдельная мобильная версия Для телефона делается отдельный сайт Можно сильно упростить интерфейс Два набора страниц, дороже поддержка
Адаптивная верстка Одна и та же страница перестраивается под экран Удобно поддерживать, один URL Нужно продумать поведение блоков на разных ширинах
«Сжатый» десктоп Макет просто уменьшается Быстро на старте Почти всегда неудобно на телефоне

Почему мобильная адаптация важна

Когда я анализирую поведение на сайтах клиентов, мобильный трафик часто превышает 60%. И если страница не адаптирована, эти посетители уходят за 3–5 секунд. Проблемы не в дизайне, а в физическом неудобстве: текст приходится увеличивать щипком, ссылки промахиваются, форма не влезает в экран. В результате — потерянные заявки и деньги. Вот что ломается в первую очередь:

  • текст становится слишком мелким;
  • кнопки трудно нажимать;
  • формы не помещаются на экран;
  • меню перекрывает контент;
  • таблицы «разъезжаются» по ширине;
  • изображения ломают сетку;
  • появляется горизонтальный скролл.

Для бизнеса это прямые убытки: если кнопка «Купить» размером с ноготь, конверсия будет околонулевой. Если карточка товара плохо читается, пользователь просто уйдёт к конкуренту.

На чем держится адаптивная верстка

Адаптивность не сводится к одному волшебному свойству. Это комбинация четырёх ключевых механик, которые я применяю в каждом проекте. Без любой из них сайт будет «хромать».

1. Гибкая сетка

Первое правило — забыть про width: 960px. Вместо этого используем проценты, fr, vw, rem. Когда я верстаю карточки товаров, я задаю им ширину в процентах или через grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)). Тогда на широком экране в ряд встанет 3-4 карточки, а на узком — одна, и всё это без дополнительных медиа-запросов. Главное — сразу закладывать гибкость, а не пытаться «починить» пиксели потом.

2. Медиа-запросы

Медиа-запросы — это условные операторы в CSS. Мы говорим: «Если ширина экрана меньше 768px, делай то-то». Это не просто «инструмент», а способ переопределить сетку, размеры, отступы. Я обычно начинаю с базовых стилей для мобильных, а потом добавляю @media (min-width: …) для расширения. Так код получается чище, чем когда идёшь от десктопа вниз и постоянно отменяешь лишнее.

3. Отзывчивые изображения

Картинки — частая причина горизонтального скролла. Я всегда прописываю img { max-width: 100%; height: auto; } в сбросе стилей. Но этого мало: для производительности на мобильных стоит использовать атрибут srcset или тег <picture>, чтобы подгружать изображения подходящего разрешения. Иначе пользователь на 3G будет ждать, пока загрузится фото 2000px шириной, которое потом всё равно сожмётся до 320px.

4. Гибкая типографика

Текст — это интерфейс. Я часто вижу, как на десктопе заголовок 48px смотрится эффектно, а на телефоне он занимает весь первый экран. Или наоборот: основной текст 14px, который на смартфоне превращается в бисеринки. Поэтому я всегда проверяю типографику в медиа-запросах: уменьшаю крупные заголовки, увеличиваю мелкий текст до комфортных 16–18px, корректирую line-height. Базовый рецепт: для body — не меньше 16px, для h1 — clamp(1.5rem, 5vw, 2.5rem), чтобы размер плавно менялся.

Как сделать адаптивную верстку: пошаговый план

Когда я беру новый проект или переделываю старый, я иду по этому алгоритму. Он не академический, а выведен из практики — от простого к сложному, чтобы не упустить критичные моменты.

Шаг 1. Начните с мобильного экрана

Mobile first — это не модный тренд, а способ не наступить на грабли. Когда я верстаю сразу под десктоп, потом приходится мучительно втискивать громоздкие блоки в 320px. Поэтому я начинаю с узкого экрана: выстраиваю контент в одну колонку, продумываю приоритеты. Задаю себе вопросы:

  • что должно быть видно первым;
  • какие действия самые важные;
  • какие блоки можно скрыть или упростить;
  • где пользователь должен нажать без лишних усилий.

Такой подход экономит часы переделок.

Шаг 2. Настройте viewport

Это первая строчка, которую я проверяю, если сайт на телефоне выглядит как сжатая копия десктопа. Метатег viewport говорит браузеру: «Ширина области просмотра равна ширине устройства, масштаб 100%». Без него мобильные браузеры эмулируют ширину около 980px и вписывают страницу в экран, уменьшая всё. Добавляем в <head>:

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

и половина проблем с адаптивностью уходит сразу.

Шаг 3. Постройте гибкую сетку

Я использую контейнер с max-width: 1200px и padding: 0 15px, а внутри — flex или grid. Так на любом экране контент не прилипает к краям и не расползается на ультрашироких мониторах. Для сетки карточек или галереи идеально подходит grid с auto-fit и minmax. Например: grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)). Без единого медиа-запроса колонки сами перестраиваются.

Шаг 4. Добавьте точки перелома

Брейкпоинты не должны быть привязаны к конкретным устройствам. Я обычно отталкиваюсь от контента: смотрю, на какой ширине вёрстка начинает ломаться, и ставлю точку. Но для старта можно взять проверенные диапазоны:

  • до 480 px — смартфоны;
  • 481–768 px — крупные смартфоны и планшеты;
  • 769–1024 px — планшеты и небольшие ноутбуки;
  • от 1025 px — десктоп.

Это не универсальный стандарт, а рабочая отправная точка. Реальные значения лучше подбирать под свой дизайн. Важно не плодить десятки медиа-запросов — это усложняет поддержку. Трёх-четырёх обычно хватает.

Шаг 5. Перестройте меню

Меню — первое, что ломается на мобильных. Я часто вижу, как на десктопе красивое горизонтальное меню на 7 пунктов, а на телефоне оно превращается в кашу. Решение — «бургер» с выпадающим списком. Но не переусердствуйте: если все пункты запихнуть в бургер, пользователь может не найти важное. Иногда имеет смысл оставить 1-2 ключевых ссылки видимыми, а остальное убрать в меню. Ещё вариант — продублировать основные разделы в футере.

Шаг 6. Проверьте формы

Формы на мобильных — это боль. Я всегда проверяю: размер полей ввода не меньше 44px в высоту (рекомендация Apple для удобного тапа), расстояние между полями не менее 10px, кнопка отправки на всю ширину. И обязательно указываю атрибут type: tel для телефона, email для почты — тогда на смартфоне открывается нужная клавиатура. Мелочь, а конверсию поднимает ощутимо.

Базовые CSS-приемы для адаптивности

Это не теория, а выжимка того, что я использую в каждом проекте. Скопируйте себе в закладки.

Используйте max-width, а не жесткую ширину

.container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 15px;
}

Вместо width: 1200px всегда задаю max-width. Тогда на экранах меньше 1200px контейнер займёт всю ширину за вычетом отступов, а на больших — останется по центру. Это база, с которой начинается любой адаптивный макет.

Делайте изображения адаптивными

img {
  max-width: 100%;
  height: auto;
}

Это правило должно быть в вашем reset.css по умолчанию. Тогда любое изображение никогда не вылезет за родительский контейнер. Но помните: если картинка вставлена как фон через background-image, это правило не сработает — там нужно управлять background-size.

Применяйте flex-wrap

.row {
  display: flex;
  flex-wrap: wrap;
}

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

Используйте CSS Grid для сложных макетов

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}

Grid — мой основной инструмент для карточек, галерей, каталогов. Задаю repeat(3, 1fr) для десктопа, а в медиа-запросе для планшета меняю на 2 колонки, для телефона — на 1. Или, как я уже говорил, auto-fit с minmax вообще убирает необходимость в медиа-запросах.

Меняйте размеры в media queries

@media (max-width: 768px) {
  .sidebar {
    width: 100%;
  }
}

Типичный пример: сайдбар на десктопе шириной 300px, а на мобильном он должен уйти под контент и занять всю ширину. В медиа-запросе переопределяем width: 100% и, возможно, order для flex-контейнера, чтобы визуально переместить его.

Как проверить, что сайт действительно удобен на телефоне

Инструменты разработчика в браузере — это хорошо, но они не покажут, как сайт чувствуется пальцами. Я всегда провожу живой тест.

Чек-лист проверки

Вот мой минимальный список, который я прохожу перед сдачей проекта:

  • текст читается без увеличения;
  • кнопки не слишком мелкие;
  • между кликабельными элементами есть расстояние;
  • меню открывается и закрывается без проблем;
  • формы можно заполнить одной рукой;
  • изображения не выходят за границы блока;
  • на странице нет горизонтальной прокрутки;
  • таблицы не «ломают» ширину экрана;
  • важные элементы видны без лишнего скролла;
  • сайт не превращается в длинную неудобную простыню.

Что особенно важно проверить на практике

Три вещи, которые нельзя пропускать:

  1. Откройте сайт на реальном телефоне, а не только в окне браузера. На реальном устройстве сразу видно, удобно ли скроллить, не перекрывает ли клавиатура поля ввода, не срабатывает ли ховер-эффект некстати.
  2. Попробуйте пройти путь пользователя: открыть страницу, найти нужный раздел, нажать кнопку, заполнить форму.
  3. Проверьте разные браузеры и ориентации экрана, потому что поведение мобильной верстки может отличаться.

Типовые ошибки в адаптивной верстке

За годы практики я наступал на все эти грабли сам и видел их у других. Вот что встречается чаще всего.

Фиксированная ширина у ключевых блоков

Классика: width: 800px на контейнере или width: 300px на карточке. На телефоне 300px может не влезть в экран с учётом отступов. Выход — max-width или относительные единицы.

Слишком мелкий шрифт

14px для основного текста на мобильном — это пытка. Минимум 16px, а лучше 18px. И не забывайте про контрастность.

Слишком плотные элементы

Если две кнопки «Купить» и «В корзину» стоят вплотную, пользователь промахнётся. Минимальное расстояние между кликабельными элементами — 8–10px, а лучше больше.

Скрытие важного контента

Иногда в мобильной версии прячут целые блоки с описанием, характеристиками, контактами. Делать это можно только если информация второстепенная и есть другой способ её получить. Иначе пользователь уйдёт.

Отсутствие тестирования на реальных устройствах

Эмулятор не покажет, как работает touch-скролл внутри iframe, как ведёт себя клавиатура, как рендерится шрифт. Хотя бы один реальный Android и один iPhone нужно проверять обязательно.

Мини-памятка: как сделать мобильную версию сайта лучше

Держите короткую выжимку, которую можно повесить над рабочим столом:

  • Используйте гибкие размеры вместо жестких.
  • Начинайте проектирование с мобильного экрана.
  • Проверяйте читаемость текста и расстояния между элементами.
  • Делайте меню и формы простыми.
  • Не забывайте про viewport.
  • Тестируйте сайт на реальных устройствах.
  • Убирайте все, что мешает пользователю быстро выполнить действие.

Когда адаптивности недостаточно

Адаптивная верстка решает проблему отображения, но не всегда проблему удобства. Если на странице огромная таблица сравнения или сложный калькулятор, простого перестроения колонок недостаточно. Приходится думать о том, как упростить интерфейс именно для мобильного сценария: заменить таблицу на карточки, разбить длинную форму на шаги, убрать некритичные элементы. Я часто на этом этапе пересматриваю структуру страницы, а не только CSS. Это особенно важно для интернет-магазинов, сервисных сайтов и лендингов, где основная цель — быстрое действие: заказ, заявка, звонок, регистрация.

FAQ

Что лучше: адаптивная верстка или отдельная мобильная версия?

Если вы не делаете сложное веб-приложение с кардинально разной логикой на мобильных и десктопе, выбирайте адаптив. Один код, один URL, меньше проблем с SEO и обновлениями. Отдельную мобильную версию (например, на поддомене m.site.ru) сейчас делают редко — слишком дорого поддерживать.

Нужно ли делать сайт mobile first?

Да, это сэкономит вам время. Когда я начинаю с десктопа, потом приходится вырезать лишнее и переписывать сетку. Mobile first дисциплинирует: сразу думаешь о главном, а украшательства добавляешь на больших экранах.

Сколько брейкпоинтов нужно?

Три-четыре — оптимально. Например: 480, 768, 1024 и, возможно, 1280 для больших экранов. Но лучше отталкиваться от контента: добавляйте точку там, где верстка ломается, а не под каждое устройство.

Можно ли сделать адаптивность только на Bootstrap?

Bootstrap даёт хорошую стартовую сетку и готовые компоненты, но как только дизайн отходит от стандартных паттернов, начинаются танцы с !important и переопределением. Я предпочитаю писать сетку сам — это не сложнее, зато полный контроль.

Почему сайт выглядит по-разному на iPhone и Android?

Safari и Chrome на Android используют разные движки рендеринга, по-разному обрабатывают отступы, скругления, поля форм. Плюс системные шрифты отличаются. Поэтому я всегда проверяю верстку как минимум в Safari на iOS и Chrome на Android. И не забывайте про особенности iOS: например, там поле ввода может масштабироваться при фокусе, если шрифт меньше 16px.

Адаптивная верстка — не просто «чтобы на телефоне не разваливалось». Это фундамент, на котором строится удобство. Когда интерфейс изначально продуман под сценарии мобильного использования, сайт становится понятнее и быстрее для всех пользователей.