🧱 Суть

Container Queries – это CSS-механизм, который позволяет применять стили на основе размера родительского контейнера, а не всего окна браузера.

Обычные медиазапросы:

@media (max-width: 768px)

ориентируются на:

размер viewport (экрана)

Container Queries ориентируются на:

размер конкретного элемента

📦 Проблема

1. Media Queries не всегда подходят

Обычный подход:

@media (max-width: 768px) {
  .button {
    ...
  }
}

Проблема:

  • компонент может находиться в маленьком блоке на большом экране
  • размер экрана не показывает реальное доступное место компонента

Например:

Большой экран

маленькая карточка

кнопке всё равно мало места

2. Компоненты становятся менее переиспользуемыми

Компонент не должен знать размер всего приложения.
Ему важно понимать: сколько места есть у него самого

✅ Решение

Использовать:

container queries

Они позволяют адаптировать компонент относительно его родителя.

💻 Код

Сначала объявляем контейнер:

.responsive-button {
  container-type: inline-size;
}

Теперь элемент можно использовать как основу для запросов.

Создаём запрос:

@container (max-width: 200px) {
  .text {
    display: none;
  }
}

Если ширина контейнера меньше 200px:

ADD TO CART

скрывается

Пример

HTML:

<button class="responsive-button">
  <img src="cart.png" alt="...">
  <span class="text">ADD TO CART</span>
</button>

CSS:

.responsive-button {
  container-type: inline-size;
}
 
@container (max-width: 200px) {
  .text {
    display: none;
  }
}

Разница

Media Query:

@media (max-width: 768px)

Проверяет:

размер окна браузера

Container Query:

@container (max-width: 200px)

Проверяет:

размер родительского контейнера

🎯 Вывод

  • Container Queries позволяют делать адаптивные компоненты
  • работают относительно родителя, а не экрана
  • делают компоненты более независимыми и переиспользуемыми
  • особенно полезны для UI-библиотек и сложных интерфейсов
  • заменяют часть случаев использования media queries

🔗 Связано