В мире, где сайты просматривают с экранов от 320 пикселей до 4K-мониторов, умение создавать адаптивную верстку — не просто навык, а необходимость. Это искусство заставить ваш сайт «дышать» и идеально подстраиваться под любое устройство. Давайте разберем, как это работает, с конкретными примерами и кодом.
Что такое адаптивная верстка и почему она важна?
Адаптивная верстка (Responsive Web Design, RWD) — это подход к веб-разработке, при котором дизайн и структура сайта динамически изменяются в зависимости от размера и ориентации экрана пользователя. Это не просто «уменьшенная копия» десктопной версии, а продуманный пользовательский опыт на каждом устройстве.
Более 60% трафика в интернете приходится на мобильные устройства. Сайт без адаптивности теряет аудиторию и позиции в поиске, так как Google использует mobile-first индексацию.
Три столпа адаптивности
1. Гибкая сетка (Fluid Grid)
Вместо фиксированных пикселей используйте относительные единицы: проценты (%), viewport ширину (vw), и высоту (vh). Ключ — формула: target / context = result. Например, если колонка шириной 600px находится в контейнере 1200px, то ее ширина в процентах = 600/1200 = 50%.
2. Гибкие изображения (Flexible Images)
Изображения должны масштабироваться внутри своего контейнера. Базовый CSS-прием:
img {
max-width: 100%;
height: auto;
}
Это предотвратит «вылазивание» картинки за границы родителя.
3. Медиазапросы (Media Queries)
Это основа адаптивности. CSS-правила, которые применяются только при выполнении определенных условий (чаще всего — ширины экрана).
Практические примеры адаптивной верстки
Пример 1: Простая адаптивная сетка на Flexbox
Создадим ряд карточек, которые на десктопе идут в 3 колонки, на планшете — в 2, а на телефоне — в 1.
.container {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.card {
flex: 1 1 calc(33.333% - 20px); /* 3 колонки */
}
/* Планшет */
@media (max-width: 768px) {
.card {
flex: 1 1 calc(50% - 20px); /* 2 колонки */
}
}
/* Телефон */
@media (max-width: 480px) {
.card {
flex: 1 1 100%; /* 1 колонка */
}
}
Всегда проектируйте верстку «от мобильного к десктопу» (mobile-first). Сначала пишите стили для маленького экрана, а затем с помощью медиазапросов min-width добавляйте улучшения для больших.
Пример 2: Адаптивное меню-гамбургер
Классический паттерн. На десктопе — горизонтальное меню, на мобильном — иконка гамбургера, раскрывающая список.
/* Мобильный вид по умолчанию */
.nav-links {
display: none;
flex-direction: column;
}
.hamburger {
display: block;
}
/* Десктопный вид */
@media (min-width: 769px) {
.hamburger {
display: none;
}
.nav-links {
display: flex;
flex-direction: row;
}
}
Логику открытия/закрытия по клику на гамбургер пишут на JavaScript.
Пример 3: Адаптивная типографика
Размер шрифта тоже должен адаптироваться. Используйте единицы rem и vw в комбинации с медиазапросами или CSS-функцией clamp().
h1 {
/* Минимум 2rem, предпочтительно 5vw, максимум 3.5rem */
font-size: clamp(2rem, 5vw, 3.5rem);
}
p {
font-size: 1rem; /* Базовый размер */
}
@media (min-width: 1200px) {
p {
font-size: 1.125rem; /* Чуть больше на широких экранах */
}
}
Инструменты и проверка
- Chrome DevTools: Эмулятор устройств и изменение размеров в реальном времени.
- CSS-фреймворки: Bootstrap, Tailwind CSS — имеют готовые адаптивные сетки.
- Проверка: Тестируйте на реальных устройствах и используйте онлайн-сервисы вроде Responsinator.
Частые ошибки новичков
- Скрытие контента на мобильных (просто через
display: none). Контент должен быть доступен всем. - Игнорирование тач-интерфейса (слишком маленькие кнопки для пальцев).
- Неоптимизированные изображения для мобильных сетей.
- Использование только пикселей (px) вместо относительных единиц.
FAQ: Часто задаваемые вопросы
В чем разница между адаптивным и отзывчивым (responsive) дизайном?
Это синонимы в современной веб-разработке. Оба термина описывают подход RWD.
Сколько точек останова (breakpoints) нужно использовать?
Не подстраивайтесь под конкретные устройства, а под контент. Добавляйте медиазапрос, когда макет «ломается». Часто хватает 3-4: для телефонов (до 576px), планшетов (576-992px), ноутбуков (992-1200px) и десктопов (1200px+).
Обязательно ли использовать фреймворк вроде Bootstrap?
Нет. Для простых сайтов можно обойтись чистым CSS (Flexbox/Grid). Фреймворк ускоряет работу на сложных проектах, но добавляет лишний код.
Как сделать адаптивным видео с YouTube?
Оберните iframe в контейнер с классом и задайте стили:
.video-container {
position: relative;
padding-bottom: 56.25%; /* Соотношение 16:9 */
height: 0;
}
.video-container iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}