Na 15 jaar van responsive design met media queries, zijn container queries eindelijk mainstream geworden. Als iemand die dagelijks werkt aan complexe web interfaces voor Defactor, kan ik niet genoeg benadrukken hoe revolutionair dit is.
Het Media Query Probleem
Media queries zijn geweldig, maar ze hebben een fundamenteel probleem: ze reageren op de viewport, niet op de container waarin een component leeft.
/* De oude manier - reageert op viewport */
@media (max-width: 768px) {
.card {
flex-direction: column;
}
}
Dit werkt prima voor pagina-niveau layouts, maar breekt zodra je herbruikbare componenten wilt maken die in verschillende contexten worden gebruikt.
Container Queries in Actie
Met container queries kunnen componenten reageren op hun eigen beschikbare ruimte:
/* De nieuwe manier - reageert op container */
.card-container {
container-type: inline-size;
}
@container (max-width: 400px) {
.card {
flex-direction: column;
}
}
Real-World Voorbeeld: Defactor’s Claim Widgets
Bij Defactor hebben we widgets die politieke claims tonen. Deze widgets moeten werken in:
- De hoofdpagina (breed)
- Sidebar (smal)
- Embedded op externe sites (variabel)
- Mobile apps (responsive)
Voor Container Queries
Voorheen hadden we verschillende versies van hetzelfde component:
.claim-widget-large { /* Voor hoofdpagina */ }
.claim-widget-medium { /* Voor sidebar */ }
.claim-widget-small { /* Voor mobile */ }
Dit leidde tot:
- Code duplicatie
- Inconsistente styling
- Moeilijk onderhoud
- Fragiele layouts
Met Container Queries
Nu hebben we één component die zich aanpast:
.claim-widget {
container-type: inline-size;
border: 1px solid #e2e8f0;
border-radius: 8px;
padding: 1rem;
}
/* Basis layout - compact */
.claim-text {
font-size: 0.9rem;
}
.politician-avatar {
width: 32px;
height: 32px;
}
/* Medium containers */
@container (min-width: 300px) {
.claim-text {
font-size: 1rem;
}
.politician-avatar {
width: 40px;
height: 40px;
}
.claim-meta {
display: flex;
justify-content: space-between;
}
}
/* Large containers */
@container (min-width: 500px) {
.claim-widget {
display: grid;
grid-template-columns: 60px 1fr auto;
gap: 1rem;
align-items: center;
}
.politician-avatar {
width: 60px;
height: 60px;
}
.rating-badge {
margin-left: auto;
}
}
Browser Support en Fallbacks
Container queries worden ondersteund in alle moderne browsers, maar voor legacy support gebruik ik:
/* Fallback voor oude browsers */
.claim-widget {
/* Basis mobile-first styling */
}
/* Container query met feature detection */
@supports (container-type: inline-size) {
.claim-widget {
container-type: inline-size;
}
@container (min-width: 300px) {
/* Enhanced styling */
}
}
Performance Overwegingen
Container queries zijn verbazingwekkend performant. De browser hoeft alleen de container te meten, niet de hele viewport te herberekenen.
In Defactor’s dashboard zie ik:
- 40% minder layout thrashing
- Soepelere animations tijdens resize
- Consistentere frame rates
Praktische Tips
1. Start Klein
Begin met simpele width-based queries voordat je overstapt naar complexere logica.
2. Combineer met CSS Grid
Container queries en CSS Grid zijn een perfecte match:
.dashboard {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1rem;
}
.dashboard-widget {
container-type: inline-size;
}
3. Gebruik Logische Eigenschappen
Combineer container queries met logical properties voor betere internationalisatie:
@container (min-width: 400px) {
.content {
padding-inline: 2rem;
margin-block-start: 1rem;
}
}
De Toekomst is Nu
Container queries zijn niet meer “de toekomst” - ze zijn beschikbaar en production-ready. Voor elke frontend developer die werkt aan component-gebaseerde systemen (en wie doet dat niet?), zijn ze een game-changer.
Bij Defactor hebben ze onze development workflow getransformeerd. We denken nu in termen van intrinsieke component design in plaats van viewport-gebaseerde layouts.
Ga Aan de Slag
Mijn advies: begin vandaag nog met container queries in je volgende project. Start klein, experimenteer, en ervaar zelf hoe ze responsive design fundamenteel veranderen.
Wil je meer weten over moderne CSS technieken? Ik deel regelmatig tips en tricks op Twitter en geef workshops over frontend development.