Свойство CSS `container-type`
Baseline Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с февраля 2023 года.
Свойство CSS container-type CSS задаёт тип контекста контейнера, используемый в запросе контейнера.
Синтаксис
/* Keyword values */ container-type: normal; container-type: size; container-type: inline-size; container-type: scroll-state; container-type: anchored; /* Two values */ container-type: size scroll-state; /* Global Values */ container-type: inherit; container-type: initial; container-type: revert; container-type: revert-layer; container-type: unset;
Значения
Для этого свойства указывается одно или два ключевых значения из следующего списка. Если указаны два значения, одно должно быть scroll-state, а другое — inline-size или size:
-
anchored - Создаёт контейнер запроса для запросов привязанных контейнеров. В этом случае размер элемента не вычисляется изолированно; изоляция не применяется.
-
inline-size - Создаёт контейнер запроса для запросов размеров по строчной оси контейнера. К элементу применяются изоляция стиля и изоляция строчного размера. Строчный размер элемента можно вычислить изолированно, не учитывая дочерние элементы (см. Использование изоляции CSS).
-
normal - Значение по умолчанию. Элемент не является контейнером запроса для запросов размера контейнера, состояния прокрутки или привязки, но может использоваться в качестве контейнера запроса для запросов стиля контейнера и запросов контейнера только по имени.
-
scroll-state - Создаёт контейнер запроса для запросов состояния прокрутки. В этом случае размер элемента не вычисляется изолированно; изоляция не применяется.
-
size - Создаёт контейнер запроса для запросов размера контейнера по обоим измерениям — строчному и блочному. К элементу применяются изоляция стиля и изоляция размера. Изоляция размера применяется к элементу как в строчном, так и в блочном направлении. Размер элемента можно вычислить изолированно, не учитывая дочерние элементы.
Формальное определение
| Исходное значение | normal |
|---|---|
| Применяется к | всем элементам |
| Наследуется | нет |
| Вычисленное значение | как задано |
| Тип анимации | a <a href="/en-US/docs/Web/CSS/Reference/Values/color_value#interpolation" title="Значения CSS-типа данных <color> интерполируются по каждой из их красной, зелёной и синей компонент, каждая из которых обрабатывается как вещественное число с плавающей точкой. Обратите внимание, что интерполяция цветов выполняется в цветовом пространстве sRGBA с предварительно умноженной альфой, чтобы избежать появления неожиданных серых цветов.">color</a> |
Формальный синтаксис
container-type =
normal |
[ [ size | inline-size ] || scroll-state ]
Описание
Запросы контейнера позволяют выборочно применять стили внутри контейнера в зависимости от результатов условных запросов, выполняемых для этого контейнера. Правило @container используется для задания проверок, выполняемых для контейнера, и правил, которые будут применяться к содержимому контейнера, если запрос вернёт true.
Некоторые типы запросов контейнера можно выполнять только для элементов, которым заданы определённые значения свойства container-type, создающие в этих контейнерах определённые контексты контейнера:
- Размер: позволяет выборочно применять правила CSS к дочерним элементам контейнера в зависимости от условия общего размера или строчного размера, например максимального или минимального измерения, соотношения сторон или ориентации.
- Состояние прокрутки: позволяет выборочно применять правила CSS к дочерним элементам контейнера в зависимости от состояния прокрутки, например от того, является ли контейнер прокручиваемым и частично прокручен ли он, или является ли контейнер целевым элементом привязки, который будет привязан к контейнеру привязки прокрутки.
- Привязка: позволяет выборочно применять правила CSS к дочерним элементам контейнера в зависимости от того, позиционирован ли контейнер относительно якоря и применяется ли к нему резервный вариант position-try.
Если для контейнера не задано container-type, элемент не является контейнером запроса для запросов размера контейнера, состояния прокрутки или привязки, но по-прежнему может использоваться в качестве контейнера запроса для запросов стиля контейнера и запросов контейнера только по имени.
Запросы размера контейнера
Запросы размера контейнера позволяют выборочно применять правила CSS к потомкам контейнера в зависимости от условия размера, например максимального или минимального измерения, соотношения сторон или ориентации.
К контейнерам размера дополнительно применяется изоляция размера — она не позволяет элементу получать сведения о размере из своего содержимого, что важно для запросов контейнера, чтобы избежать бесконечных циклов. Если бы это было не так, правило CSS внутри запроса контейнера могло бы изменить размер содержимого, из-за чего запрос мог бы вернуть значение false и изменить размер родительского элемента, что, в свою очередь, могло бы изменить размер содержимого и снова сделать запрос истинным, и так далее. Эта последовательность повторялась бы бесконечно.
Размер контейнера должен задаваться контекстом, например для блочных элементов, растягивающихся на всю ширину родителя, или определяться явно. Если контекстный или явный размер недоступен, элементы с изоляцией размера схлопнутся.
Примечание: Для потомков контейнеров размера можно задавать размеры с помощью единиц длины запросов контейнера.
Запросы состояния прокрутки контейнера
Запросы состояния прокрутки контейнера позволяют выборочно применять правила CSS к дочерним элементам контейнера в зависимости от состояния прокрутки, например:
- Частично ли прокручено содержимое контейнера.
- Является ли контейнер целевым элементом привязки, который будет привязан к контейнеру привязки прокрутки.
- Позиционирован ли контейнер с помощью
position: stickyи зафиксирован ли у границы прокручиваемого контейнера.
В первом случае запрашиваемый контейнер — это сам прокручиваемый контейнер. В двух других случаях запрашиваемый контейнер — это элемент, на который влияет положение прокрутки родительского прокручиваемого контейнера.
Запросы привязанных контейнеров
Запросы привязанных контейнеров позволяют выборочно применять правила CSS к потомкам позиционированного относительно якоря контейнера, когда для него активен резервный вариант position-try, заданный свойством position-try-fallbacks.
Например, у вас может быть элемент всплывающей подсказки, позиционированный относительно якоря и расположенный по умолчанию над ним с помощью значения position-area top, но для него задано значение position-try-fallbacks flip-block. Это приведёт к тому, что всплывающая подсказка переместится в блочном направлении под якорь, когда начнёт выходить за верхнюю границу области просмотра. Если задать для неё container-type: anchored, можно обнаружить применение резервного варианта position-try с помощью правила @container и соответствующим образом применить CSS.
.tooltip {
position: absolute;
position-anchor: --myAnchor;
position-area: top;
position-try-fallbacks: flip-block;
container-type: anchored;
}
Примеры
Создание изоляции строчного размера
Рассмотрим следующий пример HTML — компонент карточки с изображением, заголовком и текстом:
<div class="container">
<div class="card">
<h3>Normal card</h3>
<div class="content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
</div>
</div>
</div>
<div class="container wide">
<div class="card">
<h3>Wider card</h3>
<div class="content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
</div>
</div>
</div>
Чтобы создать контекст контейнера строчного размера, добавьте к элементу свойство container-type со значением inline-size:
.container {
container-type: inline-size;
width: 300px;
height: 120px;
}
.wide {
width: 500px;
}
h3 {
height: 2rem;
margin: 0.5rem;
}
.card {
height: 100%;
}
.content {
background-color: wheat;
height: 100%;
}
.container {
margin: 1rem;
border: 2px dashed red;
overflow: hidden;
}
Запрос контейнера с помощью правила @container применит стили к элементам контейнера, если его ширина превышает 400px:
@container (width > 400px) {
.card {
display: grid;
grid-template-columns: 1fr 2fr;
}
}
Спецификации
| Спецификация |
|---|
| Модуль условных правил CSS, уровень 5 # container-type |
| Модуль позиционирования якорей CSS, уровень 2 # container-type-anchored |
Совместимость с браузерами
| Настольные | Мобильные | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
container-type |
105 |
105 |
110 |
91 |
16 |
105 |
110 |
72 |
16 |
20.0 |
105 |
16 |
anchored |
143 |
143 |
Нет |
127 |
Нет |
143 |
Нет |
94 |
Нет |
30.0 |
143 |
Нет |
inline-size |
105 |
105 |
110 |
91 |
16 |
105 |
110 |
72 |
16 |
20.0 |
105 |
16 |
name-only_queries |
148 |
148 |
149 |
132 |
26.4 |
148 |
149 |
99 |
26.4 |
Нет |
148 |
26.4 |
normal |
105 |
105 |
110 |
91 |
16 |
105 |
110 |
72 |
16 |
20.0 |
105 |
16 |
scroll-state |
133 |
133 |
Нет |
118 |
Нет |
133 |
Нет |
88 |
Нет |
29.0 |
133 |
Нет |
size |
105 |
105 |
110 |
91 |
16 |
105 |
110 |
72 |
16 |
20.0 |
105 |
16 |
weak_containment |
129 |
129 |
133 |
115 |
18.4 |
129 |
133 |
86 |
18.4 |
28.0 |
129 |
18.4 |
См. также
- Запросы контейнера CSS
- Использование запросов размера и стиля контейнера
- Использование запросов состояния прокрутки контейнера
- Использование запросов привязанных контейнеров
-
@container— правило - Сокращённое свойство CSS
container - Свойство CSS
container-name - Свойство CSS
content-visibility
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/container-type