Урок 11. Старый vs Новый: медиазапросы против приставок

📁 Раздел: Раскладка ⏱️ Время изучения: ~50 мин 🎯 Сложность: Средняя

⚡ Кратко

Раньше адаптив жил в хвосте CSS-файла отдельными медиазапросами. Теперь он рядом с элементом — приставкой. А container queries решают задачу, которую медиазапросы не могли решить в принципе.

Где живёт адаптив

❌ Отдельные медиазапросы

.cards { display: grid; grid-template-columns: 1fr; gap: 16px; }

@media (min-width: 640px) {
  .cards { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
  .cards { grid-template-columns: repeat(4, 1fr); gap: 24px; }
}

Чтобы понять поведение блока, нужно проверить три места в файле. При удалении блока медиазапросы обычно остаются жить.

✅ Всё в одном месте

<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4 lg:gap-6">…</div>

Desktop-first → mobile-first

❌ Отрезаем лишнее

.sidebar { width: 280px; }
@media (max-width: 1024px) { .sidebar { display: none; } }

✅ Добавляем нужное

<aside class="hidden lg:block lg:w-70">…</aside>

Оба варианта дают одинаковый результат, но во втором мобильная версия описана явно и не может «сломаться по недосмотру».

Container queries: чего не умели медиазапросы

МедиазапросContainer query
Смотрит наокно браузераширину родителя
Переиспользование компоненталомается в узкой колонкеработает везде
Записьmd:flex@md:flex
Нужен родительнетда, с @container
Правило выбора: раскладка страницы — медиазапросы; внутреннее устройство компонента — container queries. Тогда компонент можно положить куда угодно, и он не развалится.

Изменения в v4

ЧтоРаньшеСейчас
Container queriesотдельный плагинв ядре
Единицы брейкпоинтовpxrem
Диапазоныплагин или ручной медиазапросmd:max-lg:
Свои брейкпоинтыtheme.screens--breakpoint-*