Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
@container
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Februar 2023.
* Some parts of this feature may have varying levels of support.
Die@containerCSSAt-Regel ist eine bedingte Gruppenregel, die Stile auf einenKapselungskontext anwendet. Stilzuweisungen werden durch eine Bedingung gefiltert und auf den Container angewendet, wenn die Bedingung erfüllt ist. Die Bedingung wird ausgewertet, wenn sich die abgefragte Containergröße,<style-feature> oder der Scroll-Zustand ändert.
Diecontainer-name Eigenschaft spezifiziert eine Liste von Abfragecontainernamen. Diese Namen können von@container Regeln verwendet werden, um zu filtern, welche Abfragecontainer gezielt werden. Der optionale, case-sensitive<container-name> filtert die Abfragecontainer, die von der Abfrage gezielt werden.
Sobald ein geeigneter Abfragecontainer für ein Element ausgewählt wurde, wird jedes Container-Feature im<container-condition> gegen diesen Abfragecontainer ausgewertet.
In diesem Artikel
Syntax
/* With a <size-query> */@container (width > 400px) { h2 { font-size: 1.5em; }}/* With an optional <container-name> */@container tall (height > 30rem) { p { line-height: 1.6; }}/* With a <scroll-state> */@container scroll-state(scrollable: top) { .back-to-top-link { visibility: visible; }}/* With a <container-name> and a <scroll-state> */@container sticky-heading scroll-state(stuck: top) { h2 { background: purple; color: white; }}/* Multiple queries in a single condition */@container (width > 400px) and style(--responsive: true) { h2 { font-size: 1.5em; }}/* Condition list */@container card (width > 400px), style(--responsive: true), scroll-state(stuck: top) { h2 { font-size: 1.5em; }}Parameter
<container-condition>Ein optionaler
<container-name>und ein<container-query>. Stile, die im<stylesheet>definiert sind, werden angewendet, wenn die Bedingung wahr ist.<container-name>Optional. Der Name des Containers, auf den die Stile angewendet werden, wenn die Abfrage als wahr ausgewertet wird, angegeben als
<ident>.<container-query>Ein Satz von Features, die gegen den Abfragecontainer ausgewertet werden, wenn sich die Größe,
<style-feature>oder der Scroll-Zustand des Containers ändert.
Logische Schlüsselwörter in Container-Abfragen
Logische Schlüsselwörter können verwendet werden, um die Containerbedingung zu definieren:
andkombiniert zwei oder mehr Bedingungen.orkombiniert zwei oder mehr Bedingungen.notnegiert die Bedingung. Pro Containerabfrage ist nur eine 'not'-Bedingung zulässig und kann nicht mit den Schlüsselwörternandoderorverwendet werden.
@container (width > 400px) and (height > 400px) { /* <stylesheet> */}@container (width > 400px) or (height > 400px) { /* <stylesheet> */}@container not (width < 400px) { /* <stylesheet> */}Benannte Kapselungskontexte
Ein Kapselungskontext kann mit dercontainer-name Eigenschaft benannt werden.
.post { container-name: sidebar; container-type: inline-size;}Die Kurzschreibweise hierfür ist die Verwendung voncontainer in der Formcontainer: <name> / <type>, beispielsweise:
.post { container: sidebar / inline-size;}In Container-Abfragen wird diecontainer-name Eigenschaft verwendet, um die Menge der Container auf diejenigen mit einem passenden Abfragecontainernamen zu filtern:
@container sidebar (width > 400px) { /* <stylesheet> */}Details über die Verwendung und Benennungseinschränkungen sind auf dercontainer-name Seite beschrieben.
Deskriptoren
Die<container-condition> Abfragen beinhaltenGrößen undScroll-Zustands Containier-Deskriptoren.
Größen-Container-Deskriptoren
Die<container-condition> kann eine oder mehrere boolesche Größenabfragen enthalten, jede innerhalb eines Klammernpaares. Eine Größenabfrage beinhaltet einen Größen-Deskriptor, einen Wert und - abhängig vom Deskriptor - einen Vergleichsoperator. Die Abfragen messen immer dasInhaltsfeld als Vergleichsmaßstab. Die Syntax zum Einbinden mehrerer Bedingungen ist die gleiche wie für@media Größen-Feature-Abfragen.
@container (min-width: 400px) { /* … */}@container (orientation: landscape) and (width > 400px) { /* … */}@container (15em <= block-size <= 30em) { /* … */}aspect-ratioDas
aspect-ratiodes Containers, berechnet als Verhältnis der Breite zur Höhe des Containers, ausgedrückt als<ratio>Wert.block-sizeDie
block-sizedes Containers, ausgedrückt als<length>Wert.heightDie Höhe des Containers, ausgedrückt als
<length>Wert.inline-sizeDie
inline-sizedes Containers, ausgedrückt als<length>Wert.orientationDieAusrichtung des Containers, entweder
landscapeoderportrait.widthDie Breite des Containers, ausgedrückt als
<length>Wert.
Scroll-Zustands-Container-Deskriptoren
Scroll-Zustands-Container-Deskriptoren werden innerhalb der<container-condition> in einem Klammernpaar nach dem Schlüsselwortscroll-state angegeben, beispielsweise:
@container scroll-state(scrollable: top) { /* … */}@container scroll-state(stuck: inline-end) { /* … */}@container scroll-state(snapped: both) { /* … */}Unterstützte Schlüsselwörter für Scroll-Zustands-Container-Deskriptoren umfassen physische undflussrelative Werte
scrollableFragt ab, ob der Container in die angegebene Richtung durch benutzerausgelöstes Scrollen, wie z.B. durch Ziehen des Bildlaufleiste oder Verwenden einer Trackpad-Geste, gescrollt werden kann. Anders ausgedrückt, gibt es überlaufenden Inhalt in der angegebenen Richtung, zu dem gescrollt werden kann? Gültige
scrollableWerte umfassen die folgenden Schlüsselwörter:noneDer Container ist keinBlättercontainer oder kann auf keine Weise gescrollt werden.
topDer Container kann zum oberen Rand gescrollt werden.
rightDer Container kann zum rechten Rand gescrollt werden.
bottomDer Container kann zum unteren Rand gescrollt werden.
leftDer Container kann zum linken Rand gescrollt werden.
xDer Container kann horizontal zu seinen linken und/oder rechten Rändern gescrollt werden.
yDer Container kann vertikal zu seinen oberen und/oder unteren Rändern gescrollt werden.
block-startDer Container kann zum Block-Start-Rand gescrollt werden.
block-endDer Container kann zum Block-End-Rand gescrollt werden.
inline-startDer Container kann zum Inline-Start-Rand gescrollt werden.
inline-endDer Container kann zum Inline-End-Rand gescrollt werden.
blockDer Container kann in seiner Blockrichtung zu seinen Block-Start-oder Block-End-Rändern gescrollt werden.
inlineDer Container kann in seiner Inlinerichtung zu seinen Inline-Start- und/oder Inline-End-Rändern gescrollt werden.
Wenn der Test besteht, werden die Regeln innerhalb des
@containerBlocks auf Nachkommen des Blättercontainers angewendet.Um zu evaluieren, ob ein Container blätterbar ist, ohne sich um die Richtung zu kümmern, verwenden Sie den
noneWert mit demnotOperator:css@container not scroll-state(scrollable: none) { /* … */}snappedFragt ab, ob der Container an einemScroll-Snap Container-Vorfahren entlang der angegebenen Achse anhaften wird. Gültige
snappedWerte umfassen die folgenden Schlüsselwörter:noneDer Container ist kein Scroll-Snap-Ziel für seinen Vorfahren Blättercontainer. Bei der Implementierung einer
snapped: noneAbfrage werden Container, die Snap-Ziele für den Blättercontainer sind, die@containerStilenicht angewendet haben, während Container, die keine Snap-Ziele sind, die Stilehaben.xDer Container ist ein horizontales Scroll-Snap-Ziel für seinen Vorfahren Blättercontainer, das heißt, er rastet horizontal an seinem Vorfahren ein.
yDer Container ist ein vertikales Scroll-Snap-Ziel für seinen Vorfahren Blättercontainer, das heißt, er rastet vertikal an seinem Vorfahren ein.
blockDer Container ist ein Block-Achsenscroll-Snap-Ziel für seinen Vorfahren Blättercontainer, das heißt, er rastet in der Blockrichtung bei seinem Vorfahren ein.
inlineDer Container ist ein Inline-Achsenscroll-Snap-Ziel für seinen Vorfahren Blättercontainer, das heißt, er rastet in der Inlinerichtung bei seinem Vorfahren ein.
bothDer Container ist sowohl ein horizontales als auch vertikales Scroll-Snap-Ziel für seinen Vorfahren Blättercontainer und rastet an seinem Vorfahren in beiden Richtungen ein. Der Container wird nicht übereinstimmen, wenn er nur entlang der horizontalenoder vertikalen Achse an seinem Vorfahren einrastet. Es muss beides sein.
Um einen Container mit einer
snappedScroll-Zustandsabfrage zu evaluieren, die nichtnoneist, muss es sich um einen Container mit einem Blättercontainer-Vorfahren handeln, der einenscroll-snap-typeWert ungleichnonehat. Einesnapped: noneAbfrage wird auch dann übereinstimmen, wenn es keinen Blättercontainer-Vorfahren gibt.Auswertungen treten auf, wenn
scrollsnapchangingEreignisse auf dem Scroll-Snap-Container ausgelöst werden. Wenn der Test besteht, werden die Regeln innerhalb des@containerBlocks auf Nachkommen des Containers angewendet.Um zu evaluieren, ob ein Container ein Snap-Ziel ist, ohne sich um die Richtung zu kümmern, verwenden Sie den
noneWert mit demnotOperator:css@container not scroll-state(snapped: none) { /* … */}stuckFragt ab, ob ein Container mit einem
positionWert vonstickyan einer Kante seines scrollenden Container-Vorfahren festklebt. GültigestuckWerte umfassen die folgenden Schlüsselwörter:noneDer Container ist an keiner Kante seines Containers festgeklebt. Beachten Sie, dass
noneAbfragen auch dann übereinstimmen, wenn der Container nichtposition: stickydarauf gesetzt hat.topDer Container ist an der oberen Kante seines Containers festgeklebt.
rightDer Container ist an der rechten Kante seines Containers festgeklebt.
bottomDer Container ist an der unteren Kante seines Containers festgeklebt.
leftDer Container ist an der linken Kante seines Containers festgeklebt.
block-startDer Container ist an der Block-Start-Kante seines Containers festgeklebt.
block-endDer Container ist an der Block-End-Kante seines Containers festgeklebt.
inline-startDer Container ist an der Inline-Start-Kante seines Containers festgeklebt.
inline-endDer Container ist an der Inline-End-Kante seines Containers festgeklebt.
Um einen Container mit einer
stuckScroll-Zustandsabfrage zu evaluieren, die nichtnoneist, mussposition: stickydarauf gesetzt sein und innerhalb eines Blättercontainers sein. Wenn der Test besteht, werden die Regeln innerhalb des@containerBlocks auf Nachkommen desposition: stickyContainers angewendet.Es ist möglich, dass zwei Werte von gegenüberliegenden Achsen gleichzeitig übereinstimmen:
css@container scroll-state((stuck: top) and (stuck: left)) { /* … */}Jedoch werden zwei Werte von gegenüberliegenden Kanten niemals gleichzeitig übereinstimmen:
css@container scroll-state((stuck: left) and (stuck: right)) { /* … */}Um zu evaluieren, ob ein Container festklebt, ohne sich um die Richtung zu kümmern, verwenden Sie den
noneWert mit demnotOperator:css@container not scroll-state(stuck: none) { /* … */}
Formale Syntax
@container =
@container<container-condition># {<block-contents> }
<container-condition> =
[<container-name>?<container-query>?]!
<container-name> =
<custom-ident>
<container-query> =
not<query-in-parens>|
<query-in-parens>[[and<query-in-parens>]*|[or<query-in-parens>]*]
<query-in-parens> =
(<container-query>)|
(<size-feature>)|
style(<style-query>)|
scroll-state(<scroll-state-query>)|
<general-enclosed>Siehe auch