Медиазапрос
Оригинальное название: media query
Коротко
Условие в CSS, при котором блок правил применяется только для подходящей среды вывода: ширины окна, типа устройства, способа ввода или настроек пользователя.
Что такое «Медиазапрос»
Одна и та же страница открывается на телефоне шириной 360 пикселей, на мониторе в 2560, печатается на бумаге и читается с включённой тёмной темой. Медиазапрос позволяет заранее описать правила для каждой из этих ситуаций. Браузер проверяет условия при загрузке и при каждом изменении среды — повороте телефона, изменении размера окна, переключении темы — и применяет подходящие блоки.
Запрос состоит из необязательного типа носителя (screen, print, all) и набора условий в скобках. Каждое условие — это медиафункция со значением: ширина, ориентация, предпочитаемая тема.
Синтаксис на примере
.catalog { display: grid; grid-template-columns: 1fr; }
@media (min-width: 768px) {
.catalog { grid-template-columns: repeat(2, 1fr); }
}
@media (width >= 1200px) and (hover: hover) {
.catalog { grid-template-columns: repeat(4, 1fr); }
}
@media print {
.site-header, .cart-button { display: none; }
}
Базовые стили написаны для узкого экрана, а запросы с min-width добавляют колонки по мере роста ширины — это подход Mobile First. Второй запрос использует новый диапазонный синтаксис со знаками сравнения, который поддерживают современные браузеры. Оператор and объединяет условия, запятая работает как «или», not инвертирует весь запрос.
Где ещё работают медиазапросы
- В HTML:
<link rel="stylesheet" href="print.css" media="print">и<source media="(min-width: 800px)">внутриpictureдля разных кадрирований картинки. - В JavaScript:
window.matchMedia('(max-width: 767px)')возвращает объект, у которого есть свойствоmatchesи событиеchange. Так скрипт включает мобильное меню синхронно со стилями.
Где ошибаются
- Пересекающиеся границы:
max-width: 768pxиmin-width: 768pxодновременно срабатывают на ширине ровно 768. Новый синтаксисwidth < 768pxрешает это аккуратнее. - Слишком много точек перелома под конкретные модели телефонов вместо нескольких, выбранных по содержимому.
- Нет meta viewport в шаблоне — мобильный браузер рисует страницу шириной около 980 пикселей, и запросы для узких экранов не срабатывают.
Если блок должен подстраиваться под ширину своей колонки, а не всего экрана, нужен уже контейнерный запрос.

