container-type CSS property
Baseline
Weitgehend verfügbar
*
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Februar 2023 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Ein Element kann als Abfrage-Container mit der container-type CSS-Eigenschaft eingerichtet werden. container-type wird verwendet, um den Typ des Container-Kontexts zu definieren, der in einer Container-Abfrage verwendet wird. Die verfügbaren Container-Kontexte sind:
- Größe: Ermöglicht die selektive Anwendung von CSS-Regeln auf die Kinder eines Containers basierend auf einer allgemeinen Größen- oder Innenmaßbedingung, wie z.B. einer maximalen oder minimalen Dimension, einem Seitenverhältnis oder einer Ausrichtung.
- Scrollzustand: Ermöglicht die selektive Anwendung von CSS-Regeln auf die Kinder eines Containers basierend auf einer Scrollzustandsbedingung, wie z.B. ob der Container ein teilweise gescrollter Container ist oder ob der Container ein Snap-Ziel ist, das auf seinen Snap-Container gesnappt wird.
- Verankert: Ermöglicht die selektive Anwendung von CSS-Regeln auf die Kinder eines Containers basierend darauf, ob der Container ankerpositioniert ist und eine Position-Try-Fallback-Option auf ihn angewendet wird.
Syntax
/* 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;
Werte
Die container-type-Eigenschaft kann einen einzelnen Wert aus der folgenden Liste annehmen oder zwei Werte — einer muss scroll-state sein und der andere kann inline-size oder size sein. Mit anderen Worten, ein Element kann als Größenabfrage-Container, Scrollzustandsabfrage-Container, beides oder keines eingerichtet werden.
anchored-
Richtet einen Abfrage-Container für verankerte Container-Abfragen auf dem Container ein. In diesem Fall wird die Größe des Elements nicht isoliert berechnet; es wird keine Containment angewendet.
inline-size-
Richtet einen Abfrage-Container für dimensionale Abfragen auf der Inline-Achse des Containers ein. Wendet style und inline-size Containment auf das Element an. Die Inline-Größe des Elements kann isoliert berechnet werden, wobei die Kindelemente ignoriert werden (siehe CSS-Containment verwenden).
normal-
Standardwert. Das Element ist kein Abfrage-Container für Containergrößenabfragen, bleibt jedoch ein Abfrage-Container für Container-Stilabfragen.
scroll-state-
Richtet einen Abfrage-Container für Scrollzustandsabfragen auf dem Container ein. In diesem Fall wird die Größe des Elements nicht isoliert berechnet; es wird kein Containment angewendet.
size-
Richtet einen Abfrage-Container für Containergrößenabfragen in beiden Inline- und Block- Dimensionen ein. Wendet style und size Containment auf das Element an. Größencontainment wird sowohl in Inline- als auch Blockrichtung auf das Element angewendet. Die Größe des Elements kann isoliert berechnet werden, wobei die Kindelemente ignoriert werden.
Formale Definition
| Anfangswert | normal |
|---|---|
| Anwendbar auf | alle Elemente |
| Vererbt | Nein |
| Berechneter Wert | wie angegeben |
| Animationstyp | Farbe |
Formale Syntax
container-type =
normal |
[ [ size | inline-size ] || scroll-state ]
Beschreibung
Container-Abfragen ermöglichen es, Stile innerhalb eines Containers selektiv basierend auf bedingten Abfragen, die am Container durchgeführt werden, anzuwenden. Die @container-Regel wird verwendet, um die Tests zu spezifizieren, die an einem Container durchgeführt werden, und die Regeln, die auf die Inhalte des Containers angewendet werden, wenn die Abfrage true zurückgibt.
Die Container-Abfragetests werden nur an Elementen mit einer container-type-Eigenschaft durchgeführt, die die Elemente als Größen-, Scrollzustands- oder verankerte Abfrage-Container oder eine Kombination davon definiert.
Containergrößenabfragen
Containergrößenabfragen ermöglichen es, CSS-Regeln selektiv auf die Nachkommen eines Containers basierend auf einer Größenbedingung anzuwenden, wie z.B. einer maximalen oder minimalen Dimension, einem Seitenverhältnis oder einer Ausrichtung.
Größencontainer haben zusätzliches Größencontainment, das ihnen angewendet wird — dies deaktiviert die Möglichkeit eines Elements, Größeninformationen von seinen Inhalten zu erhalten, was für Container-Abfragen wichtig ist, um Endlosschleifen zu vermeiden. Wäre dies nicht der Fall, könnte eine CSS-Regel innerhalb einer Container-Abfrage die Inhaltsgröße ändern, was wiederum die Abfrage falsch auswerten und die Größe des Elternelements ändern könnte, was wiederum die Inhaltsgröße ändern und die Abfrage wieder auf wahr zurücksetzen könnte, und so weiter. Diese Sequenz würde sich dann in einer Endlosschleife wiederholen.
Die Containergröße muss durch den Kontext festgelegt werden, wie z.B. Blockebenen-Elemente, die sich über die gesamte Breite ihres Elternteils erstrecken, oder explizit definiert sein. Wenn keine kontextuelle oder explizite Größe verfügbar ist, werden Elemente mit Größencontainment kollabieren.
Container-Scrollzustandsabfragen
Container-Scrollzustandsabfragen ermöglichen es, CSS-Regeln selektiv auf die Kinder eines Containers basierend auf einer Scrollzustandsbedingung anzuwenden, wie:
- Ob die Inhalte des Containers teilweise gescrollt sind.
- Ob der Container ein Snap-Ziel ist, das auf einen Scroll-Snap-Container gesnappt wird.
- Ob der Container über
position: stickypositioniert und an eine Grenze eines Scroll-Containers geheftet ist.
Im ersten Fall ist der abgefragte Container der Scroll-Container selbst. In den anderen beiden Fällen ist der abgefragte Container ein Element, das von der Scrollposition eines übergeordneten Scroll-Containers betroffen ist.
Verankerte Containerabfragen
Verankerte Containerabfragen ermöglichen es, CSS-Regeln selektiv auf die Nachkommen eines ankerpositionierten Containers anzuwenden, wenn auf ihn ein aktives Position-Try-Fallback, wie über die position-try-fallbacks-Eigenschaft spezifiziert, angewendet ist.
Sie könnten zum Beispiel ein ankerpositioniertes Tooltip-Element haben, das standardmäßig oberhalb seines Ankers über einen position-area-Wert von top positioniert ist, aber einen position-try-fallbacks-Wert von flip-block spezifiziert hat. Dies führt dazu, dass das Tooltip in Blockrichtung an die Unterseite seines Ankers springt, wenn es anfängt, über den oberen Rand des Viewports hinaus zu gehen. Wenn wir container-type: anchored darauf setzen, können wir erkennen, wann das Position-Try-Fallback über eine @container-Regel angewendet wird und CSS entsprechend anwenden.
.tooltip {
position: absolute;
position-anchor: --myAnchor;
position-area: top;
position-try-fallbacks: flip-block;
container-type: anchored;
}
Beispiele
>Einrichtung des Inline-Größencontaintments
Angenommen, Sie haben das folgende HTML-Beispiel, welches eine Kartenkomponente mit einem Bild, einem Titel und etwas Text darstellt:
<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>
Um einen Container-Kontext zu erstellen, fügen Sie dem Element die container-type-Eigenschaft hinzu.
Das Folgende verwendet den Wert inline-size, um einen Containment-Kontext für die Inline-Achse des Containers zu erstellen:
.container {
container-type: inline-size;
width: 300px;
height: 120px;
}
.wide {
width: 500px;
}
Eine Container-Abfrage durch die @container-Regel zu schreiben, wird die Stile auf die Elemente des Containers anwenden, wenn dieser breiter als 400px ist:
@container (width > 400px) {
.card {
display: grid;
grid-template-columns: 1fr 2fr;
}
}
Spezifikationen
| Spezifikation |
|---|
| CSS Conditional Rules Module Level 5> # container-type> |
| CSS Anchor Positioning Module Level 2> # container-type-anchored> |
Browser-Kompatibilität
Siehe auch
- CSS-Container-Abfragen
- Verwendung von Containergrößen- und Stilabfragen
- Verwendung von Container-Scrollzustandsabfragen
- Verwendung von verankerten Containerabfragen
@container-Regel- CSS-
container-Kurzschreibweise - CSS-
container-name-Eigenschaft - CSS-
content-visibility-Eigenschaft