Ответ вслух Middle Адаптивность обновлено

Медиазапросы против контейнерных

Вопрос

Чем контейнерные запросы отличаются от медиазапросов и когда что использовать?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Медиазапрос отвечает на вопрос «какой экран и какое устройство»: ширина viewport, наличие ховера, точность указателя, просьба уменьшить анимации. Контейнерный запрос отвечает на вопрос «сколько места у этого компонента».

Что должно прозвучать в ответе

  • Медиазапрос смотрит на viewport и свойства устройства, контейнерный на размер предка

  • Контейнер объявляется через `container-type: inline-size`, стили применяются к потомкам

  • Элемент не может запросить свой собственный размер

  • Каркас страницы и глобальные вещи на медиазапросах, внутренности компонентов на контейнерных

  • Медиа-фичи вроде `hover`, `pointer`, `prefers-reduced-motion` есть только у медиазапросов

  • Единицы `cqi` позволяют масштабировать размеры от контейнера

Что могут спросить следом

  • Почему контейнеру нужно inline-size, а не просто «любой элемент»?
  • Что будет, если контейнеров вложено несколько?
  • Как сделать запрос к конкретному именованному контейнеру?

Разбор

Медиазапрос отвечает на вопрос «какой экран и какое устройство»: ширина viewport, наличие ховера, точность указателя, просьба уменьшить анимации. Контейнерный запрос отвечает на вопрос «сколько места у этого компонента». Чтобы он работал, предку задают container-type: inline-size, это включает изоляцию размера по ширине: ширина контейнера перестаёт зависеть от содержимого, и браузер может без цикла применить стили к потомкам. Поэтому элемент и не может запрашивать сам себя, правила работают для его детей. Если контейнеров несколько вложенных, запрос смотрит на ближайший подходящий, а через имя (container: sidebar / inline-size) можно обратиться к конкретному. На практике каркас страницы, меню и общие отступы делаю на медиазапросах, а карточки, виджеты и прочие переиспользуемые компоненты на контейнерных, тогда компонент выглядит правильно и в сайдбаре, и в модалке, и в основной колонке без знания о странице.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.