Если вы когда-нибудь открывали сайт с телефона и видели кривые кнопки, мелкий текст или горизонтальную прокрутку — вы столкнулись с отсутствием адаптивности. Эта статья поможет вам понять, как с помощью медиазапросов сделать интерфейс, который одинаково хорошо выглядит на мониторе, планшете и смартфоне. Я объясню всё простыми словами, с примерами и без лишней теории.

Digital-студия WNDER

Что такое медиазапросы и зачем они нужны

Медиазапросы — это специальные правила в CSS, которые позволяют применять стили только при определённых условиях. Например, вы можете сказать: «Если ширина экрана меньше 600 пикселей, то сделай шрифт меньше, а кнопки — на всю ширину». Это как переключение режимов: сайт понимает, на каком устройстве его смотрят, и подстраивается.

Представьте, что вы приходите в кафе. На большом столе можно разложить все блюда, а на маленьком — только самое нужное. Медиазапросы помогают сайту «накрыть стол» правильно: на большом экране показать все элементы, а на маленьком — только главные, но удобные.

Без медиазапросов сайт выглядит одинаково везде. На телефоне это превращается в катастрофу: текст мелкий, кнопки крошечные, а чтобы нажать на ссылку, нужно увеличивать экран. Пользователи уходят, а вы теряете клиентов.

Как работает медиазапрос: базовый синтаксис

Всё начинается с правила @media в CSS. Вы задаёте условие, и если оно выполняется, стили внутри применяются. Вот простой пример:

/* Обычные стили для всех экранов */
body {
  font-size: 16px;
}

/* Если ширина экрана меньше 600px */
@media (max-width: 600px) {
  body {
    font-size: 14px;
  }
}

Здесь max-width: 600px означает «при ширине до 600 пикселей включительно». Если экран уже, шрифт станет 14px. Если шире — останется 16px. Это называется «мобильный подход»: сначала пишете стили для больших экранов, потом сужаете.

Можно использовать и наоборот — min-width, когда базовые стили для мобильных, а для больших экранов добавляете улучшения. Это называется «десктопный подход». Какой выбрать? Зависит от проекта, но чаще используют мобильный, потому что сейчас большинство трафика — с телефонов.

Важно: медиазапросы не ускоряют сайт и не делают его «умным» автоматически. Они просто меняют стили. Вся логика остаётся на вас.

Основные параметры: ширина, разрешение, ориентация

Чаще всего используют ширину экрана, но есть и другие полезные параметры. Вот таблица самых популярных:

Параметр Что делает Пример
max-width Применяет стили, если ширина экрана меньше указанной @media (max-width: 768px) — для планшетов и телефонов
min-width Применяет стили, если ширина экрана больше указанной @media (min-width: 1024px) — для десктопов
orientation Проверяет ориентацию экрана: альбомная или портретная @media (orientation: landscape) — для горизонтального положения
resolution Проверяет плотность пикселей (для retina-экранов) @media (min-resolution: 2dppx) — для дисплеев с высокой чёткостью

Также можно комбинировать условия с помощью and. Например: @media (min-width: 600px) and (max-width: 1024px) — стили применятся только для экранов средней ширины.

Не переусердствуйте с количеством запросов. Обычно достаточно 2–3 точек перелома: для телефона, планшета и десктопа. Слишком много — запутаетесь сами и запутаете браузер.

Практический пример: адаптивная карточка товара

Давайте напишем простой пример. Представьте, что у нас есть карточка товара: изображение, название, цена и кнопка. На большом экране она должна быть горизонтальной, а на маленьком — вертикальной. Вот HTML:

<div class="card">
  <img src="product.jpg" alt="Товар" class="card__image">
  <div class="card__content">
    <h2 class="card__title">Крутой товар</h2>
    <p class="card__price">1999 ₽</p>
    <button class="card__button">Купить</button>
  </div>
</div>

Теперь CSS с медиазапросами:

/* Базовые стили для мобильных */
.card {
  display: flex;
  flex-direction: column;
  border: 1px solid #ddd;
  border-radius: 8px;
  padding: 16px;
  max-width: 300px;
}

.card__image {
  width: 100%;
  border-radius: 4px;
}

.card__content {
  margin-top: 12px;
}

.card__button {
  background-color: #4CAF50;
  color: white;
  border: none;
  padding: 10px 20px;
  border-radius: 4px;
  cursor: pointer;
}

/* Для экранов шире 600px — горизонтальная карточка */
@media (min-width: 600px) {
  .card {
    flex-direction: row;
    max-width: 600px;
  }
  .card__content {
    margin-left: 16px;
    margin-top: 0;
  }
}

Видите? На мобильном карточка складывается в столбик, на десктопе — в ряд. Всё просто.

Если нужно больше точек перелома, добавьте ещё запросы. Например, для планшета можно сделать двухколоночную сетку, а для телефона — одноколоночную.

Лайфхак: используйте rem вместо px для размеров шрифта и отступов. Так будет проще масштабировать интерфейс при изменении базового размера в медиазапросе.

Типичные ошибки и как их избежать

Новички часто наступают на одни и те же грабли. Вот основные:

  • Забывают про viewport. Без этого мета-тега медиазапросы не работают на мобильных. Обязательно добавьте в <head>: <meta name="viewport" content="width=device-width, initial-scale=1">.
  • Используют слишком много брейкпоинтов. Каждый лишний запрос усложняет поддержку. Старайтесь ограничиться 2–3 точками.
  • Игнорируют ретину. На экранах с высокой плотностью пикселей изображения размываются. Используйте resolution или подгружайте картинки в 2x размере.
  • Проверяют только в инструментах разработчика. Реальные устройства отличаются от эмуляторов. Тестируйте на живых телефонах.

Ещё одна ошибка — применять медиазапросы только к одному элементу. Адаптивность должна быть глобальной: меняется сетка, шрифты, отступы, скрываются ненужные блоки.

Правило: всегда начинайте с мобильной версии. Сначала делаете простой одноколоночный макет, потом добавляете стили для больших экранов. Так меньше шансов что-то сломать.

Что в итоге: резюме

Медиазапросы — это не магия, а просто инструмент. Вы задаёте условия, браузер их выполняет. Главное — помнить о трёх вещах:

  • Всегда добавляйте viewport в HTML.
  • Не плодите лишние брейкпоинты — используйте 2–3 ключевые точки.
  • Тестируйте на реальных устройствах, а не только в браузере.

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

Студия WNDER