Media queries в CSS
Урок по адаптивному дизайну задал установку: одно HTML-дерево, viewport meta, гибкая оболочка, относительные единицы. Media queries — это переключатель: блоки CSS, которые включаются только когда условие срабатывает (обычно ширина viewport). Здесь — синтаксис и спокойные привычки; адаптивные изображения и Breakpoints углубят набор дальше.
Набор инструментов media query
📊 Media queries одним взглядом
| Элемент | Повседневная роль |
|---|---|
@media |
Открывает условный блок CSS |
Медиа-признак (min-width, max-width, …) |
Проверка, которую оценивает браузер |
and |
Требует совпадения всех перечисленных признаков |
| Запросы через запятую | Логическое или — достаточно любого совпавшего списка |
Набор правил внутри { } |
Стили, пока условие выполняется |
Тип носителя (screen, print) |
Необязательный фильтр среды вывода |
Без запросов каждое правило «всегда включено». С ними вы сохраняете крепкую базу (из прошлого урока) и накладываете изменения слой за слоем — шире колонки, крупнее шрифт, другая навигация — только когда viewport это выдержит.
Анатомия @media
Классический шаблон: признак в скобках, затем блок фигурных скобок с обычными объявлениями. Для ширин по возможности берите rem или em — они лучше масштабируются с корневыми/типографскими настройками, чем жёсткие списки пикселей устройств.
.nav {
display: block;
}
@media (min-width: 48rem) {
.nav {
display: flex;
gap: 1rem;
}
}
Mobile-first с min-width
Узкую вёрстку пишите в базовой таблице стилей. Через @media (min-width: …) добавляйте улучшения по мере роста viewport. Каждый шаг меняет один ясный слой — отступы, колонки или навигацию — а не переписывает всю страницу на каждом пороге.
.hero {
padding: 1rem;
font-size: 1.125rem;
}
@media (min-width: 40rem) {
.hero {
padding: 2rem;
font-size: 1.25rem;
}
}
@media (min-width: 64rem) {
.hero {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
}
}
Desktop-first с max-width
Если база — широкая вёрстка, @media (max-width: …) сжимает стили ниже порога: колонки в столбик, меньше padding, проще chrome. Внутри проекта будьте последовательны: не прыгайте без причины между чистыми стеками min-width и max-width.
.sidebar {
width: 16rem;
float: left;
}
@media (max-width: 50rem) {
.sidebar {
width: 100%;
float: none;
}
}
Сочетание признаков через and
Связывайте признаки так, чтобы совпали все. Удобно для диапазонов (min и max вместе) или пары ширины с другим признаком. Запятая между целыми списками @media означает или.
.card-grid {
display: grid;
gap: 1rem;
grid-template-columns: 1fr;
}
@media (min-width: 40rem) and (max-width: 63.99rem) {
.card-grid {
grid-template-columns: 1fr 1fr;
}
}
Дальше ширины — печать (и спокойные дополнения)
Ширина — повседневный инструмент. Типы вроде print прячут chrome для бумаги. Предпочтения (например prefers-reduced-motion) — полировка доступности; здесь используйте скупо. Урок Breakpoints упорядочит стратегию, а доступность позже разберёт движение.
@media print {
.site-nav,
.ad-slot {
display: none;
}
body {
color: #000;
background: #fff;
}
}
Спокойная привычка к breakpoints
Выберите короткий список именованных ширин под ваши точки напряжения макета — не под каждую модель телефона. Задокументируйте их (например «навигация сворачивается ниже 48rem»). Гибкая база + немного запросов лучше леса разовых правил под устройства. Дальше — изображения и более полный план breakpoints.
Попробуйте сами
- Возьмите сложенную навигацию и добавьте один
@media (min-width: …), который переводит её в flex. - Перепишите ту же идею сжатием desktop-first через
max-width— заметьте разницу в базовых стилях. - Добавьте диапазонный запрос с
min-widthиmax-widthтолько для двухколоночной полосы. - Скройте декоративный баннер через
@media print. - Напишите три именованных breakpoint для учебной страницы — список коротким.
Частые ошибки
- Отдельный запрос на каждый бренд устройства вместо точек напряжения макета
- Забытая закрывающая
}, из‑за чего дальнейший CSS «пропадает» внутри запроса - Случайное смешивание стеков min-width и max-width, пока cascade не воюет сам с собой
- Опора только на запросы с игнором гибких контейнеров и относительных единиц из адаптивного дизайна
- Свалка длинного каталога breakpoints здесь — ремесло продолжается в Breakpoints; изображения — в адаптивных изображениях
Итог
- Media queries оборачивают CSS так, что он действует только при совпадении условий
min-widthусиливает вверх (mobile-first);max-widthсжимает вниз (desktop-first)andтребует все признаки; запятые между запросами работают как или- Держите мало именованных breakpoints, привязанных к реальной вёрстке
- Дальше: адаптивные изображения — медиа, которое масштабируется, не ломая колонку
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху