Container Queries
Container Queries sind ein Paradigmenwechsel für CSS: Statt auf die Viewport-Breite zu reagieren, passen sich Elemente an die Größe ihres Containers an. Das macht Komponenten wirklich wiederverwendbar: eine Card-Komponente kann sich in einer schmalen Sidebar anders verhalten als im breiten Content-Bereich, ohne dass du etwas am CSS ändern musst.
- Syntax
- @container [name] (<bedingung>) { ... }
- Initialwert
- N/A (At-Rule)
- Vererbt
- Nein
- Animierbar
- Nein
- Kategorie
- Responsive Design
- Werte
- 9
- Beispiele
- 6
- Browser
- 5 von 5
- 0 von 5
- Stand
- 15.02.2026
Grundlagen
Bei Media Queries ist der Viewport die Bezugsgröße. Bei Container Queries ist es ein Eltern-Element, das du explizit als Container markierst. Die Kinder-Elemente können dann auf die Größe dieses Containers reagieren.
Damit ein Element als Container fungiert, brauchst du container-type. Der häufigste Wert ist inline-size, der die Breite des Containers abfragbar macht. size macht zusätzlich die Höhe abfragbar, ist aber selten nötig und hat Performance-Kosten. Mit container-name gibst du dem Container einen Namen, um bei verschachtelten Containern gezielt den richtigen anzusprechen.
Container Queries haben auch eigene Einheiten: cqw (1% der Container-Breite), cqh (1% der Container-Höhe), cqi (1% der Inline-Größe) und cqb (1% der Block-Größe). Damit kannst du Schriftgrößen und Abstände relativ zum Container skalieren.
Syntax & Werte
9 Wertecontainer-type
container-name & Shorthand
Container Query Units
Beispiele
6 BeispieleEine Card wechselt von gestapeltem zu horizontalem Layout, wenn ihr Container breit genug ist.
.wrapper {
container-type: inline-size;
}
.card {
display: flex;
flex-direction: column;
}
@container (min-width: 500px) {
.card {
flex-direction: row;
}
.card-image {
width: 200px;
}
}<div class="cq-wrapper">
<div class="cq-card">
<div class="cq-card-img"></div>
<div class="cq-card-body">
<h4>Container Query Card</h4>
<p>Diese Card wechselt das Layout basierend auf der Container-Breite.</p>
</div>
</div>
</div> Die gleiche Card-Komponente passt sich automatisch an die Breite ihres Containers an, ohne dass du das CSS ändern musst.
/* Beide Spalten als Container */
.sidebar, .content {
container-type: inline-size;
}
/* Die Card passt sich automatisch an */
.card { flex-direction: column; }
@container (min-width: 400px) {
.card { flex-direction: row; }
}<div class="cq-layout">
<div class="cq-col">
<div class="cq-label">Schmale Sidebar</div>
<div class="cq-item">
<div class="cq-item-img"></div>
<div class="cq-item-body">
<h4>Gleiche Card</h4>
<p>Passt sich an</p>
</div>
</div>
</div>
<div class="cq-col">
<div class="cq-label">Breiter Content</div>
<div class="cq-item">
<div class="cq-item-img"></div>
<div class="cq-item-body">
<h4>Gleiche Card</h4>
<p>Horizontal im breiten Container</p>
</div>
</div>
</div>
</div> Mit container-name sprichst du bei verschachtelten Containern gezielt den richtigen an.
.outer {
container: layout / inline-size;
}
.inner {
container: card-area / inline-size;
}
/* Reagiert auf den äußeren Container */
@container layout (min-width: 800px) {
.badge { background: green; }
}
/* Reagiert auf den inneren Container */
@container card-area (min-width: 400px) {
.text { font-size: 1.125rem; }
}<div class="cq-named-outer">
<div class="cq-named-inner">
<span class="cq-named-badge">Benannter Container</span>
<h4>Verschachtelte Container</h4>
<p>Reagiert auf den richtigen Container per Name.</p>
</div>
</div> cqw-Einheiten skalieren relativ zum Container: perfekt für Überschriften, die sich der verfügbaren Breite anpassen.
.container {
container-type: inline-size;
}
.heading {
/* Mindestens 1rem, maximal 2.5rem,
skaliert mit 5% der Container-Breite */
font-size: clamp(1rem, 5cqw, 2.5rem);
}
.text {
font-size: clamp(0.875rem, 2.5cqw, 1.125rem);
}<div class="cqu-demo">
<h3 class="cqu-heading">Fluid Typography</h3>
<p class="cqu-text">Diese Texte skalieren mit der Container-Breite. Ändere die Vorschau-Größe, um den Effekt zu sehen.</p>
</div>