Nederlands

Beheers CSS container queries voor echt responsive webdesign. Leer hoe je lay-outs aanpast op basis van containergrootte, niet alleen de viewport, voor een naadloze gebruikerservaring op alle apparaten.

Responsive Design Ontgrendeld: Een Uitgebreide Gids voor CSS Container Queries

Jarenlang was responsive webdesign voornamelijk afhankelijk van media queries, waardoor websites hun lay-out en styling konden aanpassen op basis van de breedte en hoogte van de viewport. Hoewel effectief, kan deze aanpak soms beperkend aanvoelen, vooral bij complexe componenten die zich onafhankelijk van de totale schermgrootte moeten aanpassen. Maak kennis met CSS Container Queries – een krachtig nieuw hulpmiddel waarmee elementen kunnen reageren op de grootte van hun bevattende element, in plaats van de viewport zelf. Dit ontsluit een nieuw niveau van flexibiliteit en precisie in responsive design.

Wat zijn CSS Container Queries?

CSS Container Queries zijn een CSS-functie waarmee je stijlen kunt toepassen op een element op basis van de grootte of andere kenmerken van zijn bovenliggende container. In tegenstelling tot media queries, die zich richten op de viewport, richten container queries zich op een specifiek element. Dit maakt het mogelijk om componenten te creëren die hun styling aanpassen op basis van de beschikbare ruimte binnen hun container, ongeacht de schermgrootte.

Stel je een kaartcomponent voor dat anders wordt weergegeven, afhankelijk van of het in een smalle zijbalk of een breed hoofdinhoudsgebied wordt geplaatst. Met media queries zou je de styling van de kaart moeten aanpassen op basis van de schermgrootte, wat tot inconsistenties kan leiden. Met container queries kun je stijlen definiëren die specifiek van toepassing zijn wanneer de container van de kaart een bepaalde breedte bereikt, wat zorgt voor een consistente en responsieve ervaring in verschillende lay-outs.

Waarom Container Queries Gebruiken?

Container queries bieden verschillende voordelen ten opzichte van traditionele media queries:

Hoe Implementeer je CSS Container Queries

Het implementeren van CSS container queries omvat twee belangrijke stappen: het definiëren van de container en het schrijven van de queries.

1. De Container Definiëren

Eerst moet je een element aanwijzen als een *container*. Dit doe je met de container-type eigenschap. Er zijn twee hoofdwaarden voor container-type:

Je kunt ook container-name gebruiken om je container een naam te geven, wat handig kan zijn om specifieke containers in je queries te targeten. Bijvoorbeeld:

.card-container {
  container-type: inline-size;
  container-name: cardContainer;
}

Deze code declareert het element met de klasse .card-container als een container. We specificeren inline-size om queries op basis van de breedte van de container mogelijk te maken. We hebben het ook de naam cardContainer gegeven.

2. De Container Queries Schrijven

Zodra je de container hebt gedefinieerd, kun je container queries schrijven met de @container at-rule. De syntaxis is vergelijkbaar met media queries:

@container cardContainer (min-width: 400px) {
  .card {
    flex-direction: row;
  }
  .card-image {
    width: 40%;
  }
  .card-content {
    width: 60%;
  }
}

Deze query past de stijlen binnen de accolades alleen toe wanneer de container met de naam cardContainer een minimale breedte van 400px heeft. Het richt zich op het .card element (vermoedelijk een kind van .card-container) en past de lay-out aan. Als de container smaller is dan 400px, worden deze stijlen niet toegepast.

Verkorte Notatie: Je kunt ook de verkorte versie van de `@container` regel gebruiken als je geen containernaam hoeft op te geven:

@container (min-width: 400px) {
  /* Stijlen om toe te passen wanneer de container minstens 400px breed is */
}

Praktische Voorbeelden van Container Queries

Laten we kijken naar enkele praktische voorbeelden van hoe je container queries kunt gebruiken om meer responsieve en aanpasbare lay-outs te creëren.

Voorbeeld 1: Kaartcomponent

Dit voorbeeld laat zien hoe je een kaartcomponent aanpast op basis van de breedte van de container. De kaart zal de inhoud in een enkele kolom weergeven als de container smal is, en in twee kolommen als de container breder is.

HTML:

Card Image

Card Title

This is some sample content for the card.

Learn More

CSS:

.card-container {
  container-type: inline-size;
  border: 1px solid #ccc;
  margin-bottom: 20px;
}

.card {
  display: flex;
  flex-direction: column;
}

.card-image {
  width: 100%;
  height: auto;
}

.card-content {
  padding: 10px;
}

@container (min-width: 500px) {
  .card {
    flex-direction: row;
  }
  .card-image {
    width: 40%;
  }
  .card-content {
    width: 60%;
  }
}

In dit voorbeeld wordt de .card-container als de container gedeclareerd. Wanneer de breedte van de container minder dan 500px is, zal de .card een kolomlay-out gebruiken, waarbij de afbeelding en de inhoud verticaal worden gestapeld. Wanneer de breedte van de container 500px of meer is, schakelt de .card over naar een rijlay-out, waarbij de afbeelding en de inhoud naast elkaar worden weergegeven.

Voorbeeld 2: Navigatiemenu

Dit voorbeeld demonstreert hoe je een navigatiemenu aanpast op basis van de beschikbare ruimte. Wanneer de container smal is, worden de menu-items in een dropdown weergegeven. Wanneer de container breder is, worden de menu-items horizontaal weergegeven.

HTML:


CSS:

.nav-container {
  container-type: inline-size;
  background-color: #f0f0f0;
  padding: 10px;
}

.nav-container ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

.nav-container li {
  margin-bottom: 5px;
}

.nav-container a {
  display: block;
  padding: 5px 10px;
  text-decoration: none;
  color: #333;
}

@container (min-width: 600px) {
  .nav-container ul {
    display: flex;
  }

  .nav-container li {
    margin-right: 10px;
    margin-bottom: 0;
  }

  .nav-container a {
    display: inline-block;
  }
}

In dit voorbeeld wordt de .nav-container als de container gedeclareerd. Wanneer de breedte van de container minder dan 600px is, worden de menu-items als een verticale lijst weergegeven. Wanneer de breedte van de container 600px of meer is, worden de menu-items horizontaal weergegeven met behulp van flexbox.

Voorbeeld 3: Productenlijst

Een productenlijst van een e-commercesite kan zijn lay-out aanpassen op basis van de breedte van de container. In kleinere containers kan een eenvoudige lijst met de productafbeelding, titel en prijs goed werken. Naarmate de container groeit, kan extra informatie zoals een korte beschrijving of klantbeoordeling worden toegevoegd om de presentatie te verbeteren. Dit maakt ook een meer granulaire controle mogelijk dan wanneer je je alleen op de viewport richt.

HTML:

Product 1

Product Name 1

$19.99

Product 2

Product Name 2

$24.99

CSS:

.product-listing-container {
  container-type: inline-size;
  display: flex;
  flex-wrap: wrap;
}

.product-item {
  width: 100%;
  margin-bottom: 20px;
  border: 1px solid #eee;
  padding: 10px;
}

.product-item img {
  width: 100%;
  height: auto;
  margin-bottom: 10px;
}

.product-item h3 {
  margin-top: 0;
  font-size: 1.2em;
}

.product-item .price {
  font-weight: bold;
  color: #007bff;
}

@container (min-width: 400px) {
  .product-item {
    width: 50%;
    padding: 15px;
  }
}

@container (min-width: 768px) {
  .product-item {
    width: 33.33%;
  }
}

Deze CSS-code stelt eerst de `product-listing-container` in als een container. Voor smalle containers (minder dan 400px), neemt elk productitem 100% van de breedte in beslag. Naarmate de container groter wordt dan 400px, worden de productitems in twee kolommen gerangschikt. Boven de 768px worden de productitems in drie kolommen weergegeven.

Browserondersteuning en Polyfills

Container queries hebben goede browserondersteuning in moderne browsers, waaronder Chrome, Firefox, Safari en Edge. Oudere browsers ondersteunen ze echter mogelijk niet standaard.

Om oudere browsers te ondersteunen, kun je een polyfill gebruiken. Een populaire optie is de container-query-polyfill, die te vinden is op npm en GitHub. Polyfills vullen de leemte op voor niet-ondersteunde functies, waardoor je container queries zelfs in oudere browsers kunt gebruiken.

Best Practices voor het Gebruik van Container Queries

Hier zijn enkele best practices om in gedachten te houden bij het gebruik van container queries:

Veelvoorkomende Valkuilen en Hoe Ze te Vermijden

Container Queries vs. Media Queries: Het Juiste Hulpmiddel Kiezen

Hoewel container queries aanzienlijke voordelen bieden, hebben media queries nog steeds hun plaats in responsive design. Hier is een vergelijking om je te helpen beslissen welk hulpmiddel het beste is voor verschillende situaties:

Kenmerk Container Queries Media Queries
Doel Containergrootte Viewportgrootte
Responsiviteit Componentgebaseerd Pagina-gebaseerd
Flexibiliteit Hoog Gemiddeld
Codeduplicatie Lager Hoger
Gebruiksscenario's Herbruikbare componenten, complexe lay-outs Globale lay-outaanpassingen, basisresponsiviteit

Over het algemeen gebruik je container queries wanneer je de styling van een component moet aanpassen op basis van de grootte van de container, en gebruik je media queries wanneer je globale lay-outaanpassingen moet doen op basis van de viewportgrootte. Vaak is een combinatie van beide technieken de beste aanpak.

De Toekomst van Responsive Design met Container Queries

Container queries vertegenwoordigen een belangrijke stap voorwaarts in responsive design en bieden meer flexibiliteit en controle over hoe elementen zich aanpassen aan verschillende contexten. Naarmate de browserondersteuning blijft verbeteren, zullen container queries waarschijnlijk een steeds belangrijker hulpmiddel voor webontwikkelaars worden. Ze stellen ontwerpers en ontwikkelaars in staat om echt adaptieve en gebruiksvriendelijke websites te creëren die een naadloze ervaring bieden op alle apparaten en schermgroottes.

Conclusie

CSS Container Queries zijn een krachtige toevoeging aan de toolkit voor responsive design. Door elementen te laten reageren op de grootte van hun bevattende element, maken ze echte componentgebaseerde responsiviteit mogelijk en ontsluiten ze nieuwe niveaus van flexibiliteit en precisie in webdesign. Door te begrijpen hoe je container queries effectief implementeert en gebruikt, kun je meer aanpasbare, onderhoudbare en gebruiksvriendelijke websites creëren die een betere ervaring voor iedereen bieden.

Bronnen

Responsive Design Ontgrendeld: Een Uitgebreide Gids voor CSS Container Queries | MLOG