В этот день святого Валентина мы отмечаем появление запросов к контейнерам размера и единиц запросов контейнеров во всех стабильных браузерах.
Любовь к контейнерным запросам витает в воздухе! В этот день святого Валентина запросы размера контейнера и единицы запроса контейнера стабильны во всех современных браузерах.
С помощью контейнерных запросов вы можете запросить информацию о стиле родительского элемента, например его inline-size
. С помощью медиа-запросов вы можете запросить размер области просмотра, а контейнерные запросы включают компоненты, которые могут меняться в зависимости от того, где они находятся в пользовательском интерфейсе.
Контейнерные запросы особенно удобны для адаптивного дизайна и повторно используемых компонентов. Например, включение компонента карточки, который может располагаться одним образом при размещении на боковой панели и в другой конфигурации в сетке продуктов.
Используйте контейнерные запросы
Чтобы использовать контейнерные запросы, сначала установите включение родительского элемента. Сделайте это, установив container-type
для родительского контейнера или используйте сокращение container
, чтобы одновременно присвоить ему тип и имя:
.card-container {
container: card / inline-size;
}
Установка container-type
в inline-size
запрашивает размер родителя в линейном направлении. В латинских языках, таких как английский, это будет ширина карточки, поскольку текст движется по строкам слева направо.
Теперь вы можете использовать этот контейнер для применения стилей к любому из его дочерних элементов с помощью @container
:
.card-child {
display: grid;
grid-template-columns: 1fr 1fr;
}
@container (max-width: 400px) {
.card-child {
grid-template-columns: 1fr;
}
}
Кроме того, вы можете использовать значения единиц длины запроса контейнера так же, как и значения единиц на основе области просмотра. Разница в том, что единицы контейнера соответствуют контейнеру, а не окну просмотра. В следующем примере демонстрируется адаптивная типографика с использованием единиц запроса контейнера и функции clamp()
для задания минимального и максимального значения размера:
.card-child h2 {
font-size: clamp(2rem, 15cqi, 4rem);
}
Вышеуказанные 15cqi
относятся к 15% встроенного размера контейнера. Функция clamp()
дает минимальное значение 2rem и максимальное 4rem. В то же время, если 15cqi
находится между этими значениями, текст будет соответственно уменьшаться и увеличиваться.
Контейнерный запрос Валентина
Чтобы отпраздновать контейнерный запрос «Любовь к этому празднику», мы сделали валентинку для всех вас, независимо от того, в каком стабильном браузере (последней версии) вы это просматриваете!