CSS/Media Queries/Container Queries

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Während Medienabfragen eine Methode zur Abfrage von Aspekten des Browsers oder der Geräteumgebung bieten, in der ein Dokument angezeigt wird (z. B. Abmessungen des Viewports oder Benutzereinstellungen), ermöglichen Containerabfragen das Testen von Aspekten von Elementen innerhalb des Dokuments (z. B. Rahmenabmessungen oder berechnete Stile).

Ein Abfragecontainer wird durch die Angabe der möglichen Abfragetypen unter Verwendung der Eigenschaft container-type (oder der shorthand container) erstellt. Stilregeln, die auf seine Nachkommen angewendet werden, können dann durch Abfragen mit der bedingten Gruppenregel @container konditioniert werden.

Browserunterstützung
caniuse.com

Einsatz[Bearbeiten]

Bei der Erstellung eines responsiven Designs verwenden Sie häufig eine Medienabfrage, um das Layout des Dokuments auf der Grundlage der Viewportbreite zu ändern.

Viele Designs haben jedoch gemeinsame Komponenten, die das Layout in Abhängigkeit von der verfügbaren Breite ihres Containers ändern. Dies muss sich nicht immer auf den Viewport beziehen, sondern auch darauf, wo im Layout die Komponente platziert ist.[1]

Screenshot of Container examples

Ahmad Shadeed hat sich schon früh mit Containerabfragen beschäftigt und verfügt über eine wachsende Sammlung von Beispielen, die auf alltäglichen Mustern basieren.[2][3]

container[Bearbeiten]

Ein Container für eine Visitenkarte
.card-container {
  contain: layout inline-size;
  width: 100%;
}

container-type[Bearbeiten]

Durch Hinzufügen der Eigenschaft container-type mit einem Größenwert wird ein containment-context für dieses Element erstellt. Das bedeutet, dass der Browser weiß, dass wir diesen Container später abfragen wollen. Sie können dann eine Abfrage schreiben, die sich auf diesen Containment-Kontext bezieht und nicht auf die Viewport-Größe, um Layout-Entscheidungen für eine Komponente zu treffen.

Eine Container-Abfrage wird mit @container erstellt. Damit wird der nächstgelegene containment-context abgefragt. Um die Karte nur dann zweispaltig darzustellen, wenn die Seitenleiste breiter als 40em ist, verwenden wir das folgende CSS:

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

@container (min-width: 40em){
  .card {
    display: grid;
    grid-template-columns: 2fr 1fr;
  }
}


container-name[Bearbeiten]

Polyfill[Bearbeiten]

Chris Coyier stellt einen Polyfill vor, der trotz mangelnder Browserunterstützung bereits alle Funktionalitäten ermöglicht. So kann heute schon mit Container Queries experimentiert werden.[4][5]

Laden des Polyfills
// Support Test
const supportsContainerQueries = "container" in document.documentElement.style;

// Conditional Import
if (!supportsContainerQueries) {
  import("https://cdn.skypack.dev/container-query-polyfill");
}


Siehe auch[Bearbeiten]

Container-Einheiten

  • cqw
  • cqh
  • cqi
  • cqb
  • cqmin - cqmax

@-Regeln

Weblinks[Bearbeiten]

Quellen

  1. Wann Media Queries an ihre Grenzen stoßen im Blog von kulturbanause
  2. css-tricks: iShadeed’s Container Queries Lab Geoff Graham on Sep 1, 2022
  3. iShadeed Lab - Container queries
  4. css-tricks: A New Container Query Polyfill That Just Works vom 06.01.2022
  5. github: GoogleChromeLabs /container-query-polyfill von surma


deutsch