Урок 11. Старый vs Новый: медиазапросы против приставок
⚡ Кратко
Раньше адаптив жил в хвосте 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 | отдельный плагин | в ядре |
| Единицы брейкпоинтов | px | rem |
| Диапазоны | плагин или ручной медиазапрос | md:max-lg: |
| Свои брейкпоинты | theme.screens | --breakpoint-* |