Медиа-запросы в CSS: основы, синтаксис и примеры использования
#Веб-разработка #CSS и верстка #Фронтенд CSSДля кого эта статья:
- Фронтенд-разработчики и веб-дизайнеры
- Люди, интересующиеся адаптивным веб-дизайном и оптимизацией пользовательского опыта
- Студенты и начинающие специалисты в области веб-разработки
Помните те времена, когда сайты выглядели как цифровые кирпичи одинакового размера на всех экранах? Эра "одноразмерного интернета" закончилась с появлением медиа-запросов в CSS. Это мощный инструмент, который позволяет вашему сайту адаптироваться к любому устройству — будь то огромный 4K-монитор или крошечный мобильный экран. Правильное использование медиа-запросов — это грань между профессиональным адаптивным сайтом и любительской поделкой, разваливающейся на смартфонах. Давайте разберем, как использовать эту технологию на все 100%. 🚀
Что такое медиа-запросы в CSS и зачем они нужны
Медиа-запросы (media queries) — это модуль CSS3, позволяющий адаптировать контент веб-страницы под характеристики устройства пользователя. По сути, медиа-запрос — это условный блок стилей, который применяется только при соответствии определенным условиям.
Основная задача медиа-запросов — обеспечить оптимальный пользовательский опыт на разных устройствах без создания отдельных версий сайта. Вместо того чтобы разрабатывать мобильную, планшетную и десктопную версии, вы создаете один адаптивный сайт, который меняет свой внешний вид в зависимости от условий.
Алексей Петров, фронтенд-разработчик
В 2019 году наша команда получила заказ на редизайн сайта туристической компании. Клиент жаловался на низкую конверсию с мобильных устройств. Анализ показал, что 67% пользователей заходили с телефонов, но сайт был полностью неадаптивным. После внедрения медиа-запросов и адаптивного макета конверсия мобильного трафика выросла на 142% за первый месяц. Медиа-запросы помогли нам не просто "уместить" контент на маленьком экране, но полностью переосмыслить взаимодействие пользователя с сайтом на разных устройствах.
Вот несколько ключевых причин использовать медиа-запросы:
- Улучшение пользовательского опыта на всех устройствах
- Повышение поисковых рейтингов (Google отдает предпочтение адаптивным сайтам)
- Сокращение времени разработки по сравнению с созданием отдельных версий сайта
- Упрощение поддержки и обновления сайта
- Уменьшение отказов пользователей с мобильных устройств
| Характеристика | Без медиа-запросов | С медиа-запросами |
|---|---|---|
| Отображение на различных устройствах | Одинаковое, часто неудобное | Адаптированное под каждый тип экрана |
| UX на мобильных устройствах | Низкий, требует масштабирования | Высокий, контент оптимизирован |
| SEO оптимизация | Понижение в ранжировании | Повышение в мобильной выдаче |
| Поддержка сайта | Сложная, требует создания мобильной версии | Простая, один код для всех устройств |

Синтаксис и основные принципы построения медиа-запросов
Освоить синтаксис медиа-запросов проще, чем кажется на первый взгляд. Существует несколько способов их подключения, но базовая структура одинакова:
@media тип_медиа and (условие) {
/* CSS правила */
}
Давайте разберем каждый элемент:
- @media — директива, указывающая браузеру, что следующий блок кода является медиа-запросом
- тип_медиа — определяет тип устройства (screen, print, speech и т.д.)
- and — логический оператор для объединения нескольких условий
- условие — параметры, которым должно соответствовать устройство (ширина, высота, ориентация и т.д.)
- CSS правила — стили, которые будут применены при выполнении условий
Существует три основных способа подключения медиа-запросов:
- Внутри CSS-файла:
@media screen and (max-width: 768px) {
.container {
width: 100%;
}
}
- В тегах
<style>:
<style>
@media screen and (max-width: 768px) {
.container {
width: 100%;
}
}
</style>
- В теге
<link>:
<link rel="stylesheet" media="screen and (max-width: 768px)" href="mobile.css">
Для создания более сложных условий можно использовать логические операторы:
- and — все условия должны быть истинными
- not — инвертирует результат проверки
- only — предотвращает применение стилей в старых браузерах
- , (запятая) — аналог оператора OR, любое из условий должно быть истинным
@media screen and (min-width: 768px) and (max-width: 1024px) {
/* Применяется только для планшетов */
}
@media not screen and (color) {
/* Применяется для устройств, которые не имеют цветной экран */
}
@media screen, print {
/* Применяется как для экранов, так и для печати */
}
Параметры и условия для работы медиа-запросов
Медиа-запросы позволяют проверять множество параметров устройства. Знание этих параметров даст вам полный контроль над адаптивным дизайном. 🎯
Основные типы медиа (media types):
- screen — для экранов
- print — для печатных устройств и предпросмотра печати
- speech — для программ чтения с экрана
- all — по умолчанию, для всех типов устройств
Наиболее часто используемые параметры медиа-запросов:
| Параметр | Описание | Пример использования |
|---|---|---|
| width, min-width, max-width | Ширина области просмотра | @media (min-width: 768px) {...} |
| height, min-height, max-height | Высота области просмотра | @media (max-height: 600px) {...} |
| orientation | Ориентация устройства (portrait/landscape) | @media (orientation: landscape) {...} |
| aspect-ratio | Соотношение сторон области просмотра | @media (aspect-ratio: 16/9) {...} |
| resolution | Разрешение устройства | @media (min-resolution: 2dppx) {...} |
| hover | Способность устройства к наведению | @media (hover: hover) {...} |
| prefers-color-scheme | Предпочтение светлой или темной темы | @media (prefers-color-scheme: dark) {...} |
При создании адаптивного дизайна рекомендуется использовать подход "mobile-first". Это означает, что базовые стили пишутся для мобильных устройств, а затем через медиа-запросы добавляются стили для более крупных экранов:
/* Базовые стили для мобильных устройств */
.container {
width: 100%;
padding: 10px;
}
/* Стили для планшетов */
@media (min-width: 768px) {
.container {
width: 750px;
padding: 15px;
}
}
/* Стили для десктопов */
@media (min-width: 1200px) {
.container {
width: 1170px;
padding: 20px;
}
}
Этот подход имеет несколько преимуществ:
- Мобильные устройства загружают только необходимый минимум CSS
- Прогрессивное улучшение интерфейса при увеличении размера экрана
- Соответствие современным паттернам веб-разработки
Как применять медиа-запросы для различных устройств
При работе с медиа-запросами важно использовать правильные контрольные точки (breakpoints) для разных типов устройств. Хотя универсальных стандартов не существует из-за разнообразия размеров экранов, есть общепринятые диапазоны.
Михаил Соколов, технический директор
Когда мы работали над крупным интернет-магазином одежды, столкнулись с проблемой: карточки товаров выглядели отлично на iPhone, но ломались на Android-устройствах среднего ценового сегмента. Вместо того чтобы фиксировать каждое устройство отдельно, мы решили использовать более гибкий подход с контрольными точками, основанными на типичном контенте, а не на конкретных разрешениях. Для карточек товаров важно было сохранить соотношение сторон изображений и читаемость описания. Мы создали пять контрольных точек с плавными переходами между ними, используя не только max-width и min-width, но и комбинации с другими параметрами, такими как aspect-ratio. В результате сайт стал адаптивным на 98% всех мобильных устройств, включая экзотические модели.
Типичные контрольные точки для различных устройств:
- Смартфоны: до 767px
- Планшеты: от 768px до 1023px
- Ноутбуки: от 1024px до 1365px
- Настольные компьютеры: от 1366px и выше
- Большие экраны: от 1900px и выше
Пример комплексного использования медиа-запросов:
/* Базовые стили (мобильные) */
body {
font-size: 16px;
}
.header {
height: 60px;
}
.sidebar {
display: none;
}
.content {
padding: 10px;
}
/* Планшеты */
@media (min-width: 768px) {
body {
font-size: 18px;
}
.header {
height: 80px;
}
.sidebar {
display: block;
width: 30%;
float: left;
}
.content {
width: 70%;
float: right;
padding: 20px;
}
}
/* Десктопы */
@media (min-width: 1366px) {
.container {
max-width: 1300px;
margin: 0 auto;
}
.sidebar {
width: 25%;
}
.content {
width: 75%;
padding: 30px;
}
}
Помимо размеров экрана, стоит учитывать особенности различных устройств:
- Ориентация экрана: горизонтальная/вертикальная
- Плотность пикселей: для устройств с высоким разрешением (Retina)
- Способ ввода: сенсорный экран или мышь
- Предпочтения пользователя: темная/светлая тема, уменьшенная анимация
/* Ориентация экрана */
@media (orientation: landscape) {
.gallery {
display: flex;
}
}
/* Высокая плотность пикселей (Retina) */
@media (min-resolution: 2dppx) {
.logo {
background-image: url('logo@2x.png');
}
}
/* Устройства с тачскрином */
@media (hover: none) and (pointer: coarse) {
.button {
padding: 12px 24px; /* Увеличенная область нажатия */
}
}
/* Предпочтение темной темы */
@media (prefers-color-scheme: dark) {
body {
background-color: #121212;
color: #f0f0f0;
}
}
Популярные решения и паттерны с применением медиа-запросов
Эффективное использование медиа-запросов предполагает знание проверенных паттернов и решений, которые хорошо работают в различных ситуациях. Вот несколько популярных подходов:
1. Responsive Grid System (Адаптивная сетка)
Одно из самых распространенных применений медиа-запросов — создание адаптивной сетки для макета страницы.
.row {
display: flex;
flex-wrap: wrap;
}
.col {
width: 100%; /* Мобильный вид: колонки занимают всю ширину */
}
@media (min-width: 768px) {
.col-md-6 {
width: 50%; /* Средние экраны: две колонки в ряд */
}
}
@media (min-width: 1200px) {
.col-lg-4 {
width: 33.33%; /* Большие экраны: три колонки в ряд */
}
.col-lg-3 {
width: 25%; /* Большие экраны: четыре колонки в ряд */
}
}
2. Navigation Patterns (Паттерны навигации)
Адаптивная навигация — один из ключевых элементов современных сайтов:
/* Мобильная навигация (гамбургер-меню) */
.nav-links {
display: none;
}
.nav-toggle {
display: block;
}
/* Планшеты и выше */
@media (min-width: 768px) {
.nav-links {
display: flex;
}
.nav-toggle {
display: none;
}
}
3. Typography Scaling (Масштабирование типографики)
Адаптация размеров текста для разных устройств улучшает читабельность:
html {
font-size: 16px; /* Базовый размер шрифта для мобильных */
}
h1 {
font-size: 1.75rem;
}
@media (min-width: 768px) {
html {
font-size: 18px;
}
h1 {
font-size: 2rem;
}
}
@media (min-width: 1200px) {
html {
font-size: 20px;
}
h1 {
font-size: 2.25rem;
}
}
4. Image Handling (Обработка изображений)
Правильная адаптация изображений критически важна для производительности:
.responsive-img {
max-width: 100%;
height: auto;
}
/* Изменение компоновки галереи */
.gallery {
display: grid;
grid-template-columns: 1fr;
gap: 10px;
}
@media (min-width: 768px) {
.gallery {
grid-template-columns: repeat(2, 1fr);
}
}
@media (min-width: 1024px) {
.gallery {
grid-template-columns: repeat(3, 1fr);
}
}
5. Feature Detection and Progressive Enhancement (Определение возможностей и прогрессивное улучшение)
Комбинирование медиа-запросов с определением возможностей браузера:
/* Базовый стиль для всех браузеров */
.container {
display: block;
}
/* Для браузеров с поддержкой grid */
@supports (display: grid) {
@media (min-width: 768px) {
.container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
}
}
}
Вот сравнение распространенных CSS-фреймворков и их подходов к медиа-запросам:
| Фреймворк | Подход к брейкпоинтам | Особенности |
|---|---|---|
| Bootstrap | sm (≥576px), md (≥768px), lg (≥992px), xl (≥1200px), xxl (≥1400px) | Комплексная сетка с префиксами классов |
| Tailwind CSS | sm (≥640px), md (≥768px), lg (≥1024px), xl (≥1280px), 2xl (≥1536px) | Встроенные утилиты с префиксами (sm:, md:, lg: и т.д.) |
| Foundation | small (0-640px), medium (≥641px), large (≥1024px) | Гибкие настройки через Sass-переменные |
| Bulma | mobile (<768px), tablet (≥769px), desktop (≥1024px), widescreen (≥1216px) | Модульная структура с отзывчивыми модификаторами |
При работе с медиа-запросами рекомендуется:
- Группировать медиа-запросы по компонентам, а не собирать их в конце файла
- Использовать переменные CSS для брейкпоинтов для обеспечения единообразия
- Тестировать на реальных устройствах, а не только в эмуляторах браузера
- Избегать слишком большого количества брейкпоинтов — это усложняет поддержку
- Применять контрольные точки, основанные на контенте, а не на конкретных устройствах
Медиа-запросы — это не просто технический инструмент, а основа современного веб-дизайна, ориентированного на пользователя. Владение этим инструментом определяет уровень профессионализма веб-разработчика. Внедрив принципы адаптивного дизайна в ваши проекты, вы не только улучшите пользовательский опыт, но и обеспечите долгосрочную актуальность вашей работы в постоянно меняющемся ландшафте устройств. Помните: хороший адаптивный дизайн незаметен для пользователя — он просто работает.
Владимир Лисицын
разработчик фронтенда