Nederlands

Ontdek CSS Container Style Queries, een krachtige benadering van responsive design die componenten laat aanpassen op basis van de styling van hun container, niet alleen de viewport-grootte. Leer praktische toepassingen voor diverse wereldwijde websites.

CSS Container Style Queries: op Stijl Gebaseerd Responsive Ontwerp voor Wereldwijde Toepassingen

Traditioneel responsive design is sterk afhankelijk van media queries, waarbij de lay-out en stijlen van een website worden aangepast op basis van de grootte van de viewport. Hoewel dit effectief is, kan deze aanpak leiden tot inconsistenties en moeilijkheden bij complexe componenten die zich moeten aanpassen aan verschillende contexten binnen dezelfde viewport. CSS Container Style Queries bieden een meer granulaire en intuïtieve oplossing, waardoor elementen kunnen reageren op de styling die op hun bevattende element wordt toegepast, wat zorgt voor echt componentgebaseerd responsive gedrag.

Wat zijn CSS Container Style Queries?

Container Style Queries breiden de kracht van container queries uit tot voorbij eenvoudige, op grootte gebaseerde voorwaarden. In plaats van de breedte of hoogte van een container te controleren, stellen ze je in staat om de aanwezigheid van specifieke CSS-eigenschappen en -waarden te controleren die op die container zijn toegepast. Dit stelt componenten in staat hun styling aan te passen op basis van de context van de container, in plaats van alleen de afmetingen.

Zie het op deze manier: in plaats van te vragen "Is de viewport breder dan 768px?", kun je vragen "Heeft deze container de --theme: dark; custom property ingesteld?". Dit opent een hele nieuwe wereld van mogelijkheden voor het creëren van flexibele en herbruikbare componenten die zich naadloos kunnen aanpassen aan verschillende thema's, lay-outs of merkvariaties op je website of applicatie.

Voordelen van Container Style Queries

Hoe gebruik je CSS Container Style Queries?

Hier is een overzicht van hoe je container style queries implementeert:

1. De Container Instellen

Eerst moet je een element aanwijzen als een container. Dit kun je doen met de eigenschap container-type:

.container {
  container-type: inline-size;
}

De waarde inline-size is het meest gebruikelijk en nuttig, omdat het de container in staat stelt zijn inline (horizontale) grootte te bevragen. Je kunt ook size gebruiken, wat zowel de inline- als de block-grootte bevraagt. Het gebruik van alleen size kan prestatie-implicaties hebben als je niet voorzichtig bent.

Je kunt ook container-type: style gebruiken om een container alleen voor style queries te gebruiken, en niet voor size queries, of container-type: size style om beide te gebruiken. Om de containernaam te beheren, gebruik je container-name: my-container en target je deze vervolgens met @container my-container (...).

2. Style Queries Definiëren

Nu kun je de @container style() at-rule gebruiken om stijlen te definiëren die van toepassing zijn wanneer aan een specifieke voorwaarde wordt voldaan:

@container style(--theme: dark) {
  .component {
    background-color: #333;
    color: #fff;
  }
}

In dit voorbeeld worden de stijlen binnen de @container-regel alleen toegepast op het .component-element als op het bevattende element de custom property --theme is ingesteld op dark.

3. Stijlen Toepassen op de Container

Ten slotte moet je de CSS-eigenschappen waar je style queries op controleren, toepassen op het containerelement:

<div class="container" style="--theme: dark;">
  <div class="component">Dit is een component.</div>
</div>

In dit voorbeeld zal de .component een donkere achtergrond en witte tekst hebben omdat de container de stijl --theme: dark; direct in de HTML heeft toegepast (voor de eenvoud). Het is een best practice om stijlen via CSS-klassen toe te passen. Je kunt ook JavaScript gebruiken om de stijlen op de container dynamisch te wijzigen, wat de style query-updates activeert.

Praktische Voorbeelden voor Wereldwijde Toepassingen

1. Themacomponenten

Stel je een website voor die meerdere thema's ondersteunt. Je kunt container style queries gebruiken om de styling van componenten automatisch aan te passen op basis van het actieve thema.

/* CSS */
.app-container {
  --theme: light;
}

@container style(--theme: dark) {
  .card {
    background-color: #333;
    color: #fff;
  }
}

@container style(--theme: light) {
  .card {
    background-color: #f0f0f0;
    color: #333;
  }
}

/* HTML */
<div class="app-container" style="--theme: dark;">
  <div class="card">
    <h2>Titel van de kaart</h2>
    <p>Inhoud van de kaart.</p>
  </div>
</div>

In dit voorbeeld schakelt de .card-component automatisch tussen een donker en licht thema op basis van de --theme-eigenschap van zijn container. Dit is zeer gunstig voor sites waar gebruikers verschillende thema's kunnen kiezen op basis van hun voorkeuren.

2. Lay-outvariaties

Je kunt container style queries gebruiken om verschillende lay-outvariaties voor componenten te creëren op basis van de beschikbare ruimte of de algehele lay-out van de pagina. Denk aan een taalkeuzemenu. In de hoofdnavigatie kan dit een compacte dropdown zijn. In de voettekst kan het een volledige lijst van beschikbare talen zijn.

/* CSS */
.navigation {
  --layout: compact;
}

.footer {
  --layout: expanded;
}

@container style(--layout: compact) {
  .language-selector {
    /* Stijlen voor compacte dropdown */
  }
}

@container style(--layout: expanded) {
  .language-selector {
    /* Stijlen voor volledige lijst van talen */
  }
}

/* HTML */
<nav class="navigation" style="--layout: compact;">
  <div class="language-selector">...

<footer class="footer" style="--layout: expanded;">
  <div class="language-selector">...

Deze aanpak is waardevol voor websites die zich richten op diverse gebruikersinterfaces op verschillende apparaten en platforms. Bedenk dat de structuren van mobiele en desktopsites vaak sterk verschillen, en dit kan componenten helpen zich aan te passen.

3. Aanpassen aan Inhoudstype

Denk aan een nieuwswebsite met artikelsamenvattingen. Je kunt container style queries gebruiken om de presentatie van samenvattingen aan te passen op basis van of ze een afbeelding bevatten of niet.

/* CSS */
.article-summary {
  --has-image: false;
}

@container style(--has-image: true) {
  .article-summary {
    display: grid;
    grid-template-columns: 1fr 2fr;
    gap: 1rem;
  }
}

/* HTML (met afbeelding) */
<div class="article-summary" style="--has-image: true;">
  <img src="..." alt="..." />
  <div>...
</div>

/* HTML (zonder afbeelding) */
<div class="article-summary" style="--has-image: false;">
  <div>...
</div>

Dit zorgt voor een visueel aantrekkelijkere en informatievere presentatie van artikelsamenvattingen, wat de gebruikerservaring verbetert. Merk op dat het direct instellen van de eigenschap `--has-image` in HTML niet ideaal is. Een betere aanpak zou zijn om JavaScript te gebruiken om de aanwezigheid van een afbeelding te detecteren en dynamisch een klasse (bijv. `.has-image`) toe te voegen aan of te verwijderen van het `.article-summary`-element, en vervolgens de custom property `--has-image` in te stellen binnen de CSS-regel voor de `.has-image`-klasse.

4. Gelokaliseerde Styling

Voor internationale websites kunnen container style queries worden gebruikt om stijlen aan te passen op basis van de taal of regio. Je zou bijvoorbeeld verschillende lettergroottes of spatiëring willen gebruiken voor talen met langere tekst.

/* CSS */
.locale-container {
  --language: en;
}

@container style(--language: ja) {
  .text {
    font-size: 1.1em;
    letter-spacing: 0.05em;
  }
}

@container style(--language: ar) {
  .text {
    direction: rtl;
  }
}

/* HTML */
<div class="locale-container" style="--language: ja;">
  <p class="text">...</p>
</div>

Dit maakt het mogelijk om meer op maat gemaakte en gebruiksvriendelijke ervaringen te creëren voor verschillende taalpublieken. Bedenk dat sommige talen, zoals Arabisch en Hebreeuws, van rechts naar links worden geschreven en dat specifieke stijlen moeten worden toegepast. Voor Japans en andere Oost-Aziatische talen kan een andere spatiëring en lettergrootte nodig zijn om de karakters correct weer te geven.

5. Toegankelijkheidsoverwegingen

Container style queries kunnen ook de toegankelijkheid verbeteren door componentstijlen aan te passen op basis van gebruikersvoorkeuren of apparaatmogelijkheden. Je kunt bijvoorbeeld het contrast van een component verhogen als de gebruiker de modus voor hoog contrast in zijn besturingssysteem heeft ingeschakeld.

/* CSS */
body {
  --high-contrast: false;
}

@media (prefers-contrast: more) {
  body {
    --high-contrast: true;
  }
}

@container style(--high-contrast: true) {
  .component {
    background-color: black;
    color: white;
  }
}

/* HTML */
<div class="component">...

Dit zorgt ervoor dat je website voor iedereen bruikbaar en toegankelijk is, ongeacht hun vaardigheden. Let op het gebruik van de @media (prefers-contrast: more) media query om de modus voor hoog contrast op het niveau van het besturingssysteem te detecteren, en vervolgens de custom property `--high-contrast` in te stellen. Hiermee kun je stijlwijzigingen activeren met een style query op basis van de systeeminstellingen van de gebruiker.

Best Practices

Browserondersteuning

Container style queries hebben uitstekende browserondersteuning in moderne browsers, waaronder Chrome, Firefox, Safari en Edge. Oudere browsers ondersteunen deze functie mogelijk echter niet volledig. Zorg ervoor dat je feature queries gebruikt om fallback-stijlen voor deze browsers te bieden of gebruik een polyfill.

Conclusie

CSS Container Style Queries bieden een krachtige en flexibele benadering van responsive design, waarmee je echt componentgebaseerde en aanpasbare websites en applicaties kunt maken. Door gebruik te maken van de styling van containerelementen, kun je een nieuw niveau van controle en granulariteit in je ontwerpen ontsluiten, wat resulteert in beter onderhoudbare, schaalbare en gebruiksvriendelijke ervaringen voor een wereldwijd publiek.

Omarm container style queries om responsieve componenten te bouwen die zich naadloos aanpassen aan verschillende thema's, lay-outs, talen en toegankelijkheidseisen, en zo een werkelijk wereldwijde webervaring creëren.

Bronnen