Медиа-запросы CSS: техники адаптивной верстки для веб-сайтов
Для кого эта статья:
- Веб-разработчики, стремящиеся улучшить свои навыки в адаптивной верстке
- Студенты, изучающие веб-разработку и CSS
Дизайнеры и UX/UI специалисты, заинтересованные в оптимизации интерфейсов для различных устройств
В мире, где пользователи переключаются между смартфонами, планшетами и десктопами, создание сайтов, корректно отображающихся на всех устройствах, стало обязательным навыком разработчика. Медиа-запросы в CSS — это тот самый волшебный ключ, который открывает дверь в мир адаптивной верстки. Без них ваш сайт рискует выглядеть как застрявший в 2005 году динозавр с фиксированной шириной в 960 пикселей. Готовы освоить этот мощный инструмент и вывести свою верстку на новый уровень? Давайте погрузимся в мир @media queries! 🚀
Хотите быстро освоить адаптивную верстку и сразу применять её в реальных проектах? Обучение веб-разработке от Skypro поможет вам освоить CSS медиа-запросы и другие современные инструменты всего за несколько месяцев. Наши студенты создают полностью адаптивные сайты уже после 2-го модуля, а ментор-практик проверит каждую строчку вашего кода и даст рекомендации по оптимизации. Не теряйте время на самостоятельные поиски информации!
Что такое медиа-запросы: фундамент адаптивной верстки
Медиа-запросы (Media Queries) — это мощный инструмент CSS, позволяющий применять определенные стили в зависимости от характеристик устройства. По сути, это условные операторы для стилей, которые проверяют: "Если ширина экрана меньше 768px, то применяй эти стили". 📱
Без медиа-запросов создание адаптивных сайтов потребовало бы отдельных HTML-файлов для каждого типа устройств — настоящий кошмар для поддержки и SEO. Вместо этого мы используем один HTML и разные стили через @media.
Антон Петров, ведущий фронтенд-разработчик
Помню свой первый коммерческий проект в 2012 году. Клиент попросил адаптировать сайт под мобильные устройства, которые только набирали популярность. Я гордо заявил, что это не проблема, и ушел разбираться, что такое эти "медиа-запросы". Через два дня непрерывного кодинга сдал проект, где сайт прекрасно выглядел на iPhone 4. Клиент был в восторге... пока не открыл сайт на Android-планшете. Там всё "поехало". Тогда я понял главный урок: адаптивная верстка — это не просто одно медиа-правило для мобильных устройств, а целая система точек перелома для разных размеров экранов. Теперь в моих проектах минимум 4-5 брейкпоинтов, и это стало стандартом индустрии.
Медиа-запросы стали частью спецификации CSS3, появившись как ответ на бурное развитие мобильных устройств. Они основаны на более ранней технологии @media, которая изначально использовалась для создания разных стилей для печати и экрана.
| Эра | Подход к верстке | Результат |
|---|---|---|
| До 2010 | Фиксированная ширина | Сайты выглядят одинаково на всех экранах (часто с горизонтальной прокруткой на мобильных) |
| 2010-2015 | Mobile-first + Media Queries | Сайты адаптируются для нескольких "стандартных" размеров экранов |
| 2015-настоящее время | Отзывчивый дизайн с множеством breakpoints | Плавная адаптация под любые размеры экранов с учетом различных устройств |
Ключевые преимущества использования медиа-запросов:
- Один HTML-код для всех устройств — проще поддерживать
- Улучшенная SEO-оптимизация (Google отдает предпочтение адаптивным сайтам)
- Экономия времени разработки по сравнению с созданием отдельных версий сайта
- Лучший пользовательский опыт на всех устройствах
- Возможность тонкой настройки отображения контента в зависимости от устройства

Синтаксис и базовые параметры CSS медиа-запросов
Чтобы эффективно использовать медиа-запросы, необходимо понимать их синтаксис и основные параметры. Базовая структура медиа-запроса выглядит так:
@media тип_медиа and (условие) {
/* CSS правила */
}
Разберем каждый элемент:
- @media — ключевое слово, указывающее на начало медиа-запроса
- тип_медиа — определяет тип устройства (screen, print, all, speech)
- and — логический оператор для объединения условий
- условие — параметр, который проверяется (например, ширина экрана)
Наиболее часто используемые параметры в медиа-запросах:
| Параметр | Описание | Пример |
|---|---|---|
| width | Точная ширина области просмотра | @media (width: 768px) {...} |
| min-width | Минимальная ширина области просмотра | @media (min-width: 768px) {...} |
| max-width | Максимальная ширина области просмотра | @media (max-width: 767px) {...} |
| height | Высота области просмотра | @media (height: 500px) {...} |
| orientation | Ориентация устройства | @media (orientation: landscape) {...} |
| aspect-ratio | Соотношение сторон экрана | @media (aspect-ratio: 16/9) {...} |
| resolution | Разрешение устройства (dpi) | @media (min-resolution: 300dpi) {...} |
Рассмотрим примеры реальных медиа-запросов для разных сценариев:
- Применение стилей только для мобильных устройств:
@media screen and (max-width: 767px) {
.navigation {
display: none;
}
.mobile-menu {
display: block;
}
}
- Стили для планшетов в альбомной ориентации:
@media screen and (min-width: 768px) and (max-width: 1024px) and (orientation: landscape) {
.sidebar {
width: 30%;
}
.content {
width: 70%;
}
}
- Стили для устройств с высоким DPI (Retina-дисплеи):
@media screen and (min-resolution: 2dppx) {
.logo {
background-image: url('logo@2x.png');
}
}
Вы можете использовать логические операторы для создания более сложных условий:
- and — требует истинности обоих условий
- not — инвертирует условие
- , (запятая) — работает как логический оператор OR
Мобильная адаптивность: медиа-запросы для разных устройств
Адаптация веб-сайта для различных устройств — ключевая задача современного веб-разработчика. Существуют два основных подхода к адаптивной верстке: "Mobile First" и "Desktop First". 📱💻
Mobile First — разработка начинается с мобильной версии, затем добавляются стили для более крупных экранов через min-width. Этот подход заставляет вас сразу фокусироваться на главном контенте и обеспечивает более быструю загрузку на мобильных устройствах.
Пример Mobile First подхода:
/* Базовые стили для мобильных */
.container {
width: 100%;
padding: 15px;
}
/* Планшеты */
@media (min-width: 768px) {
.container {
width: 750px;
margin: 0 auto;
}
}
/* Десктопы */
@media (min-width: 1200px) {
.container {
width: 1170px;
}
}
Desktop First — начинаем с полноценной версии для настольных компьютеров, затем "сжимаем" дизайн для меньших экранов с помощью max-width.
Пример Desktop First подхода:
/* Базовые стили для десктопа */
.container {
width: 1170px;
margin: 0 auto;
}
/* Планшеты */
@media (max-width: 1199px) {
.container {
width: 750px;
}
}
/* Мобильные */
@media (max-width: 767px) {
.container {
width: 100%;
padding: 15px;
}
}
Мария Соколова, UX/UI дизайнер
Однажды мы с командой разрабатывали сложный интерфейс для финтех-стартапа. Приложение включало детальные графики, таблицы и интерактивные элементы. Изначально мы пошли путем Desktop First, создав потрясающий интерфейс с продвинутой аналитикой. Когда дело дошло до адаптации под мобильные, начался настоящий кошмар — мы просто не могли уместить всю эту сложность на маленьком экране.
Пришлось взять паузу, пересмотреть стратегию и полностью переключиться на Mobile First. Это означало переосмысление всего UX: какие функции действительно нужны на ходу? Какие данные критичны для мобильного пользователя? Мы создали упрощенную, но информативную версию для смартфонов, а более сложную аналитику оставили для больших экранов.
Результат превзошел ожидания — 70% пользователей предпочли именно мобильную версию из-за её простоты и скорости. Этот опыт научил меня всегда начинать с мобильной версии, даже для сложных интерфейсов.
Стандартные брейкпоинты для различных устройств:
- Мобильные телефоны: до 767px
- Планшеты: 768px – 1023px
- Ноутбуки: 1024px – 1439px
- Десктопы: от 1440px
Но современный подход требует большей гибкости. Вместо фиксированных брейкпоинтов для устройств, лучше ориентироваться на содержимое и его удобство чтения. Нередко требуются дополнительные брейкпоинты между "стандартными" для решения конкретных задач верстки.
Пример продвинутого набора брейкпоинтов:
/* Экстра-мелкие мобильные (до 375px) */
@media (max-width: 374px) {...}
/* Мелкие мобильные (375px – 479px) */
@media (min-width: 375px) and (max-width: 479px) {...}
/* Мобильные (480px – 767px) */
@media (min-width: 480px) and (max-width: 767px) {...}
/* Планшеты портретные (768px – 991px) */
@media (min-width: 768px) and (max-width: 991px) {...}
/* Планшеты альбомные (992px – 1199px) */
@media (min-width: 992px) and (max-width: 1199px) {...}
/* Ноутбуки (1200px – 1439px) */
@media (min-width: 1200px) and (max-width: 1439px) {...}
/* Десктопы (1440px и больше) */
@media (min-width: 1440px) {...}
Не забывайте про ориентацию устройства, особенно для планшетов и мобильных:
/* Планшеты в альбомной ориентации */
@media (min-width: 768px) and (max-width: 1023px) and (orientation: landscape) {...}
Практические решения адаптивной верстки через медиа-запросы
Теория хороша, но реальные примеры — лучше. Рассмотрим практические задачи, с которыми сталкивается каждый фронтенд-разработчик, и их решения с помощью медиа-запросов. 🛠️
Задача 1: Адаптивное меню навигации
Одна из самых распространенных задач — преобразование горизонтального меню в бургер-меню на мобильных устройствах:
/* Десктопная версия */
.nav-menu {
display: flex;
justify-content: space-between;
}
.nav-item {
margin: 0 15px;
}
.burger-icon {
display: none;
}
/* Мобильная версия */
@media (max-width: 767px) {
.nav-menu {
display: none; /* Скрываем обычное меню */
flex-direction: column;
position: absolute;
top: 60px;
left: 0;
width: 100%;
background: #fff;
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
.nav-menu.active {
display: flex; /* Показываем при клике на бургер */
}
.nav-item {
margin: 10px 0;
padding: 10px 20px;
border-bottom: 1px solid #eee;
}
.burger-icon {
display: block; /* Показываем бургер-иконку */
}
}
Задача 2: Адаптивные сетки
Изменение количества колонок в зависимости от размера экрана:
/* Базовые стили для карточек */
.card-grid {
display: grid;
gap: 20px;
grid-template-columns: repeat(4, 1fr); /* 4 колонки на десктопе */
}
/* Планшеты */
@media (max-width: 1023px) {
.card-grid {
grid-template-columns: repeat(2, 1fr); /* 2 колонки на планшетах */
}
}
/* Мобильные */
@media (max-width: 767px) {
.card-grid {
grid-template-columns: 1fr; /* 1 колонка на мобильных */
}
}
Задача 3: Адаптивная типографика
Изменение размера шрифта в зависимости от устройства:
/* Базовые размеры для десктопа */
h1 {
font-size: 48px;
line-height: 1.2;
}
p {
font-size: 16px;
line-height: 1.5;
}
/* Планшеты */
@media (max-width: 1023px) {
h1 {
font-size: 36px;
}
}
/* Мобильные */
@media (max-width: 767px) {
h1 {
font-size: 28px;
}
p {
font-size: 14px;
line-height: 1.4;
}
}
Задача 4: Адаптация сложных компонентов
Преобразование таблицы в карточки на мобильных устройствах:
/* Десктопный вид (таблица) */
.data-table {
width: 100%;
border-collapse: collapse;
}
.data-table th, .data-table td {
padding: 10px;
text-align: left;
border-bottom: 1px solid #ddd;
}
.data-card {
display: none;
}
/* Мобильный вид (карточки) */
@media (max-width: 767px) {
.data-table {
display: none; /* Скрываем таблицу */
}
.data-card {
display: block;
padding: 15px;
margin-bottom: 15px;
border: 1px solid #ddd;
border-radius: 4px;
}
.data-card-item {
display: flex;
justify-content: space-between;
margin-bottom: 8px;
border-bottom: 1px solid #eee;
padding-bottom: 8px;
}
.data-card-label {
font-weight: bold;
}
}
Практические советы для эффективного использования медиа-запросов:
- Используйте переменные CSS для брейкпоинтов, чтобы поддерживать их согласованность
- Группируйте медиа-запросы по компонентам, а не по размеру экрана
- Тестируйте на реальных устройствах, а не только в браузерных эмуляторах
- Не забывайте про метатег viewport для правильного масштабирования
- Используйте инструменты разработчика для отладки и тестирования различных размеров экрана
Продвинутые техники и оптимизация медиа-запросов
Если вы уже освоили основы, пора двигаться дальше. Давайте рассмотрим продвинутые техники, которые помогут оптимизировать ваши медиа-запросы и сделать адаптивную верстку ещё более эффективной. 🚀
Контейнерные запросы (Container Queries)
Новая спецификация CSS, которая позволяет стилизовать элементы на основе размера их родительского контейнера, а не размера окна браузера:
.container {
container-type: inline-size;
}
@container (min-width: 400px) {
.card {
display: flex;
gap: 20px;
}
.card-image {
width: 40%;
}
.card-content {
width: 60%;
}
}
Это позволяет создавать компоненты, которые адаптируются к доступному пространству, независимо от размера экрана. Особенно полезно для повторно используемых компонентов, которые могут размещаться в разных контекстах.
Feature Queries (@supports)
Проверка поддержки определенных свойств CSS браузером:
@supports (display: grid) {
/* Стили с использованием Grid Layout */
.container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
}
}
@supports not (display: grid) {
/* Фолбек для браузеров без поддержки Grid */
.container {
display: flex;
flex-wrap: wrap;
}
.item {
width: calc(33.333% – 20px);
margin: 10px;
}
@media (max-width: 767px) {
.item {
width: calc(50% – 20px);
}
}
}
Оптимизация медиа-запросов с помощью CSS переменных
Использование CSS переменных может значительно упростить адаптивную верстку:
:root {
--main-color: #3498db;
--padding: 20px;
--font-size-heading: 32px;
--columns: 4;
}
@media (max-width: 1023px) {
:root {
--padding: 15px;
--font-size-heading: 28px;
--columns: 2;
}
}
@media (max-width: 767px) {
:root {
--padding: 10px;
--font-size-heading: 24px;
--columns: 1;
}
}
/* Применение переменных */
**Читайте также**
- [Верстка сайтов для начинающих: от основ HTML к первому проекту](/html/kak-nauchitsya-verstat-sajty-rukovodstvo-dlya-nachinayushih/)
- [Кроссбраузерная верстка: 5 стратегий совместимости интерфейса](/html/reshenie-problem-sovmestimosti-v-verstke/)
- [Flexbox и Grid Layout: какая технология верстки лучше подойдет](/html/sravnenie-flexbox-i-grid-layout/)
- [Кроссбраузерная верстка сайта: идеальное отображение во всех браузерах](/html/osnovy-krossbrauzernoj-verstki/)
- [15 инструментов для тестирования верстки: поиск и исправление ошибок](/html/instrumenty-dlya-testirovaniya-i-otladki-verstki/)
- [SVG в веб-разработке: практики интеграции и стилизации векторов](/html/rabota-s-svg-v-verstke/)
- [Flexbox в верстке: как создавать адаптивные макеты без хаков](/html/osnovy-flexbox-gibkaya-verstka/)
- [CSS для веб-разработки: от основ к адаптивным макетам](/html/osnovy-css-stilizaciya-veb-stranic/)
- [Минимизация и объединение CSS и JS: секреты быстрой загрузки сайта](/javascript/minimizaciya-i-obuedinenie-css-i-js/)
- [Мощные CSS-анимации: от базовых переходов до 3D-эффектов](/html/animacii-i-perehody-v-css/)


