Deutsch

Entdecken Sie CSS Container-Style-Queries: Ein Ansatz, bei dem sich Komponenten an das Styling ihres Containers anpassen, nicht nur an die Viewport-Größe.

CSS Container-Style-Queries: Stilbasiertes responsives Design für globale Anwendungen

Traditionelles responsives Design stützt sich stark auf Media-Queries, um das Layout und die Stile einer Website an die Größe des Viewports anzupassen. Obwohl dieser Ansatz effektiv ist, kann er zu Inkonsistenzen und Schwierigkeiten führen, wenn komplexe Komponenten sich an verschiedene Kontexte innerhalb desselben Viewports anpassen müssen. CSS Container-Style-Queries bieten eine granularere und intuitivere Lösung, die es Elementen ermöglicht, auf das Styling ihres umschließenden Elements zu reagieren und so ein wirklich komponentenbasiertes responsives Verhalten zu ermöglichen.

Was sind CSS Container-Style-Queries?

Container-Style-Queries erweitern die Mächtigkeit von Container-Queries über einfache größenbasierte Bedingungen hinaus. Anstatt die Breite oder Höhe eines Containers zu überprüfen, ermöglichen sie es Ihnen, das Vorhandensein bestimmter CSS-Eigenschaften und -Werte zu prüfen, die auf diesen Container angewendet werden. Dies ermöglicht es Komponenten, ihr Styling basierend auf dem Kontext des Containers anzupassen, anstatt nur auf seine Dimensionen.

Stellen Sie es sich so vor: Anstatt zu fragen „Ist der Viewport breiter als 768px?“, können Sie fragen „Hat dieser Container die --theme: dark; benutzerdefinierte Eigenschaft gesetzt?“. Dies eröffnet eine ganz neue Welt von Möglichkeiten für die Erstellung flexibler und wiederverwendbarer Komponenten, die sich nahtlos an verschiedene Themes, Layouts oder Markenvariationen auf Ihrer gesamten Website oder Anwendung anpassen können.

Vorteile von Container-Style-Queries

Wie man CSS Container-Style-Queries verwendet

Hier ist eine Aufschlüsselung, wie man Container-Style-Queries implementiert:

1. Den Container einrichten

Zuerst müssen Sie ein Element als Container deklarieren. Dies können Sie mit der container-type-Eigenschaft tun:

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

Der Wert inline-size ist der gebräuchlichste und nützlichste, da er dem Container erlaubt, seine Inline-Größe (horizontal) abzufragen. Sie können auch size verwenden, was sowohl die Inline- als auch die Block-Größe abfragt. Die alleinige Verwendung von size kann Leistungseinbußen haben, wenn Sie nicht vorsichtig sind.

Alternativ können Sie container-type: style verwenden, um einen Container nur für Style-Queries und nicht für Größen-Queries zu nutzen, oder container-type: size style für beides. Um den Namen des Containers zu steuern, verwenden Sie container-name: my-container und zielen dann mit @container my-container (...) darauf ab.

2. Style-Queries definieren

Jetzt können Sie die @container style() At-Regel verwenden, um Stile zu definieren, die angewendet werden, wenn eine bestimmte Bedingung erfüllt ist:

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

In diesem Beispiel werden die Stile innerhalb der @container-Regel nur auf das .component-Element angewendet, wenn für sein umschließendes Element die benutzerdefinierte Eigenschaft --theme auf dark gesetzt ist.

3. Stile auf den Container anwenden

Zuletzt müssen Sie die CSS-Eigenschaften, die Ihre Style-Queries prüfen, auf das Container-Element anwenden:

<div class="container" style="--theme: dark;">
  <div class="component">Dies ist eine Komponente. </div>
</div>

In diesem Beispiel wird die .component einen dunklen Hintergrund und weißen Text haben, da ihr Container den Stil --theme: dark; direkt im HTML (der Einfachheit halber) angewendet hat. Die beste Vorgehensweise ist, Stile über CSS-Klassen anzuwenden. Sie können auch JavaScript verwenden, um die Stile auf dem Container dynamisch zu ändern und so Aktualisierungen der Style-Queries auszulösen.

Praktische Beispiele für globale Anwendungen

1. Komponenten mit Themes

Stellen Sie sich eine Website vor, die mehrere Themes unterstützt. Sie können Container-Style-Queries verwenden, um das Styling von Komponenten automatisch an das aktive Theme anzupassen.

/* 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>Karten-Titel</h2>
    <p>Karten-Inhalt.</p>
  </div>
</div>

In diesem Beispiel wechselt die .card-Komponente automatisch zwischen einem dunklen und einem hellen Theme, basierend auf der --theme-Eigenschaft ihres Containers. Dies ist sehr vorteilhaft für Websites, auf denen Benutzer je nach Vorliebe verschiedene Themes auswählen können.

2. Layout-Variationen

Sie können Container-Style-Queries verwenden, um verschiedene Layout-Variationen für Komponenten zu erstellen, basierend auf dem verfügbaren Platz oder dem Gesamtlayout der Seite. Betrachten Sie eine Sprachauswahl-Komponente. In der Hauptnavigation könnte es ein kompaktes Dropdown-Menü sein. Im Footer könnte es eine vollständige Liste der verfügbaren Sprachen sein.

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

.footer {
  --layout: expanded;
}

@container style(--layout: compact) {
  .language-selector {
    /* Stile für kompaktes Dropdown */
  }
}

@container style(--layout: expanded) {
  .language-selector {
    /* Stile für vollständige Liste der Sprachen */
  }
}

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

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

Dieser Ansatz ist wertvoll für Websites, die auf verschiedene Benutzeroberflächen über unterschiedliche Geräte und Plattformen hinweg ausgerichtet sind. Bedenken Sie, dass sich die Strukturen von mobilen und Desktop-Websites oft stark unterscheiden, und dies kann Komponenten helfen, sich anzupassen.

3. Anpassung an den Inhaltstyp

Stellen Sie sich eine Nachrichten-Website mit Artikelzusammenfassungen vor. Sie können Container-Style-Queries verwenden, um die Darstellung der Zusammenfassungen anzupassen, je nachdem, ob sie ein Bild enthalten oder nicht.

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

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

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

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

Dies ermöglicht eine visuell ansprechendere und informativere Darstellung von Artikelzusammenfassungen und verbessert die Benutzererfahrung. Beachten Sie, dass das direkte Setzen der Eigenschaft `--has-image` im HTML nicht ideal ist. Ein besserer Ansatz wäre, JavaScript zu verwenden, um das Vorhandensein eines Bildes zu erkennen und dynamisch eine Klasse (z. B. .has-image) zum .article-summary-Element hinzuzufügen oder zu entfernen und dann die benutzerdefinierte Eigenschaft `--has-image` innerhalb der CSS-Regel für die Klasse .has-image zu setzen.

4. Lokalisierte Stile

Für internationale Websites können Container-Style-Queries verwendet werden, um Stile basierend auf der Sprache oder Region anzupassen. Zum Beispiel könnten Sie unterschiedliche Schriftgrößen oder Abstände für Sprachen mit längerem Text verwenden wollen.

/* 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>

Dies ermöglicht die Schaffung maßgeschneiderter und benutzerfreundlicherer Erlebnisse für verschiedene Sprachzielgruppen. Bedenken Sie, dass einige Sprachen wie Arabisch und Hebräisch von rechts nach links geschrieben werden und spezifische Stile angewendet werden müssen. Für Japanisch und andere ostasiatische Sprachen können unterschiedliche Abstände und Schriftgrößen erforderlich sein, um die Zeichen korrekt darzustellen.

5. Überlegungen zur Barrierefreiheit

Container-Style-Queries können auch die Barrierefreiheit verbessern, indem sie Komponentenstile an Benutzerpräferenzen oder Gerätefähigkeiten anpassen. Sie können beispielsweise den Kontrast einer Komponente erhöhen, wenn der Benutzer in seinem Betriebssystem den Hochkontrastmodus aktiviert hat.

/* 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">...

Dies stellt sicher, dass Ihre Website für jeden nutzbar und zugänglich ist, unabhängig von seinen Fähigkeiten. Beachten Sie die Verwendung der Media-Query @media (prefers-contrast: more), um den Hochkontrastmodus auf Betriebssystemebene zu erkennen und dann die benutzerdefinierte Eigenschaft `--high-contrast` zu setzen. Dies ermöglicht es Ihnen, Stiländerungen mithilfe einer Style-Query basierend auf den Systemeinstellungen des Benutzers auszulösen.

Best Practices

Browser-Unterstützung

Container-Style-Queries haben eine ausgezeichnete Browser-Unterstützung in modernen Browsern wie Chrome, Firefox, Safari und Edge. Ältere Browser unterstützen diese Funktion jedoch möglicherweise nicht vollständig. Stellen Sie sicher, dass Sie Feature-Queries verwenden, um Fallback-Stile für diese Browser bereitzustellen oder einen Polyfill zu verwenden.

Fazit

CSS Container-Style-Queries bieten einen leistungsstarken und flexiblen Ansatz für responsives Design, mit dem Sie wirklich komponentenbasiert und anpassungsfähige Websites und Anwendungen erstellen können. Indem Sie das Styling von Container-Elementen nutzen, können Sie eine neue Ebene der Kontrolle und Granularität in Ihren Designs erschließen, was zu wartbareren, skalierbareren und benutzerfreundlicheren Erlebnissen für ein globales Publikum führt.

Nutzen Sie Container-Style-Queries, um responsive Komponenten zu erstellen, die sich nahtlos an verschiedene Themes, Layouts, Sprachen und Barrierefreiheitsanforderungen anpassen und so ein wirklich globales Weberlebnis schaffen.

Ressourcen