Die neue CSS-Medienabfragebereichssyntax PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Die neue CSS-Medienabfrage-Bereichssyntax

Wir verlassen uns auf CSS-Medienabfragen zum Auswählen und Stylen von Elementen basierend auf einer Zielbedingung. Diese Bedingung kann alle möglichen Dinge sein, fällt aber normalerweise in zwei Lager: (1) die Art der verwendeten Medien und (2) eine bestimmte Funktion des Browsers, des Geräts oder sogar der Umgebung des Benutzers.

Angenommen, wir möchten ein bestimmtes CSS-Styling auf ein gedrucktes Dokument anwenden:

@media print {
  .element {
    /* Style away! */
  }
}

Die Tatsache, dass wir Stile bei einer bestimmten Viewport-Breite anwenden können, hat CSS Media Queries seit Ethan Marcotte zu einem Kernbestandteil des responsiven Webdesigns gemacht prägte den Begriff. Wenn die Viewport-Breite des Browsers eine bestimmte Größe hat, wenden Sie eine Reihe von Stilregeln an, die es uns ermöglichen, Elemente zu entwerfen, die auf die Größe des Browsers reagieren.

/* When the viewport width is at least 30em... */
@media screen and (min-width: 30em) {
  .element {
    /* Style away! */
  }
}

Beachten Sie die and da drin? Das ist ein Operator, mit dem wir Anweisungen kombinieren können. In diesem Beispiel haben wir eine Bedingung kombiniert, dass der Medientyp a ist screen und das ist es min-width Funktion eingestellt ist 30em (oder höher). Wir können dasselbe tun, um auf eine Reihe von Darstellungsbereichsgrößen abzuzielen:

/* When the viewport width is between 30em - 80em */
@media screen and (min-width: 30em) and (max-width: 80em) {
  .element {
    /* Style away! */
  }
}

Jetzt gelten diese Stile für einen expliziten Bereich von Ansichtsfensterbreiten und nicht für eine einzelne Breite!

Aber die Media Queries Level 4-Spezifikation hat eine neue Syntax eingeführt, um eine Reihe von Viewport-Breiten anzusprechen, indem gängige mathematische Vergleichsoperatoren verwendet werden – Dinge wie <, > und = – die syntaktisch sinnvoller sind und weniger Code schreiben.

Lassen Sie uns untersuchen, wie das funktioniert.

Neue Vergleichsoperatoren

Das letzte Beispiel ist ein gutes Beispiel dafür, wie wir Bereiche „gefälscht“ haben, indem wir Bedingungen mithilfe von kombiniert haben and Operator. Die große Änderung in der Media Queries Level 4-Spezifikation besteht darin, dass wir neue Operatoren haben, die Werte vergleichen, anstatt sie zu kombinieren:

  • < wertet aus, ob ein Wert ist weniger als ein anderer Wert
  • > wertet aus, ob ein Wert ist größer als ein anderer Wert
  • = wertet aus, ob ein Wert ist gleich auf einen anderen Wert
  • <= wertet aus, ob ein Wert ist kleiner oder gleich to ein anderer Wert
  • >= wertet aus, ob ein Wert ist größer oder gleich to ein anderer Wert

So könnten wir eine Medienabfrage geschrieben haben, die Stile anwendet, wenn der Browser es ist 600px breit oder größer:

@media (min-width: 600px) {
  .element {
    /* Style away! */
  }
}

So sieht es aus, dasselbe mit einem Vergleichsoperator zu schreiben:

@media (width >= 600px) {
  .element {
    /* Style away! */
  }
}

Ausrichtung auf eine Reihe von Darstellungsbereichsbreiten

Wenn wir CSS-Medienabfragen schreiben, erstellen wir oft eine sogenannte Haltepunkt — ein Zustand, bei dem das Design „bricht“ und eine Reihe von Stilen angewendet wird, um es zu reparieren. Ein Design kann viele Haltepunkte haben! Und sie basieren normalerweise darauf, dass das Ansichtsfenster zwischen zwei Breiten liegt: wo der Haltepunkt beginnt und wo der Haltepunkt endet.

So haben wir das mit dem gemacht and -Operator zum Kombinieren der beiden Breakpoint-Werte:

/* When the browser is between 400px - 1000px */
@media (min-width: 400px) and (max-width: 1000px) {
  /* etc. */
}

Sie bekommen ein gutes Gefühl dafür, wie viel kürzer und einfacher es ist, eine Medienabfrage zu schreiben, wenn wir den booleschen Wert fallen lassen and Operator zugunsten der neuen Bereichsvergleichssyntax:

@media (400px <= width <= 1000px) {
  /* etc. */
}

Viel einfacher, oder? Und es ist klar, was genau diese Medienabfrage tut.

Browser-Unterstützung

Diese verbesserte Medienabfragesyntax befindet sich zum Zeitpunkt des Verfassens dieses Artikels noch in den Anfängen und wird derzeit nicht so umfassend unterstützt wie der kombinierte Ansatz min-width und max-width. Wir sind aber nah dran! Safari ist zu diesem Zeitpunkt der einzige große Überbleibsel, aber Dafür gibt es ein offenes Ticket dem du folgen kannst.

Diese Browserunterstützungsdaten stammen von Kann ich benutzen, die mehr Details enthält. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.

Desktop

Chrome Firefox IE Edge Safari
104 63 Nein 104 Nein

Handy / Tablet

Android-Chrome Android-Firefox Android iOS Safari
106 106 106 Nein

Schauen wir uns ein Beispiel an

Hier ist ein Layout, das sich gut für größere Bildschirme wie einen Desktop eignet:

Die neue CSS-Medienabfrage-Bereichssyntax

Dieses Layout hat Basisstile, die allen Haltepunkten gemeinsam sind. Aber wenn der Bildschirm schmaler wird, beginnen wir, Stile anzuwenden, die bedingt an verschiedenen kleineren Haltepunkten angewendet werden, die ideal für Tablets bis hinunter zu Mobiltelefonen geeignet sind:

Screenshots der Mobil- und Tablet-Layouts nebeneinander mit überlagerten CSS-Rasterspuren.
Die neue CSS-Medienabfrage-Bereichssyntax

Um zu sehen, was passiert, sehen Sie hier, wie das Layout zwischen den beiden kleineren Haltepunkten reagiert. Die versteckte Navigationsliste wird ebenfalls angezeigt title der main wird erhöht font-size.

Diese Änderung wird ausgelöst, wenn die Änderungen des Darstellungsbereichs von der Übereinstimmung mit den Bedingungen eines Mediums zu einem anderen übergehen:

/* Base styles (any screen size) */
header {
  display: flex;
  justify-content: center;
}

header ul {
  display: none;
}

.title p {
  font-size: 3.75rem;
}

/* When the media type is a screen with a width greater or equal to 768px */
@media screen and (width >= 768px) {
  header {
    justify-content: space-between;
  }

  header ul {
    display: flex;
    justify-content: space-between;
    gap: 3rem;
  }

  .title p {
    font-size: 5.75rem;
  }
}

Wir haben einige der Konzepte, die wir behandelt haben, kombiniert! Wir zielen auf Geräte mit a screen Medientyp, Auswerten, ob die Breite des Ansichtsfensters größer oder gleich einem bestimmten Wert ist, unter Verwendung der neuen Medienfunktionsbereichssyntax, und Kombinieren der beiden Bedingungen mit der and Betreiber.

Diagramm der Medienabfragesyntax mit Einzelheiten zu Medientyp, Operator und Bereichsmedienfunktion.
Die neue CSS-Medienabfrage-Bereichssyntax

OK, das ist also großartig für die unten aufgeführten Mobilgeräte 768px und für andere Geräte gleich oder größer als 768px. Aber was ist mit diesem Desktop-Layout ... wie kommen wir dorthin?

Was das Layout angeht:

  • Das main Element wird zu einem 12-Spalten-Raster.
  • Auf dem Bild wird eine Schaltfläche angezeigt.
  • Die grosse von .title Die Schriftart des Elements wird vergrößert und überlappt das Bild.

Angenommen, wir haben unsere Hausaufgaben gemacht und genau festgelegt, wo diese Änderungen vorgenommen werden sollen, können wir diese Stile anwenden, wenn das Ansichtsfenster mit dem übereinstimmt width Bedingung für diesen Haltepunkt. Wir werden sagen, dass der Haltepunkt bei ist 1000px:

/* When the media type is a screen with a width greater or equal to 1000px  */
@media screen and (width >= 1000px) {
  /* Becomes a 12-column grid */
  main {
    display: grid;
    grid-template-columns: repeat(12, 1fr);
    grid-template-rows: auto 250px;
  }

  /* Places the .title on the grid */
  .title {
    grid-row: 1;
  }

  /* Bumps up the font-size */
  .title p {
    font-size: 7.75rem;
  }

  /* Places .images on the grid */
  .images {
    grid-row: 1 / span 2;
    align-self: end;
    position: relative;
  }

  /* Displays the button */
  .images .button {
    display: block;
    position: absolute;
    inset-block-end: 5rem;
    inset-inline-end: -1rem;
  }
}
Anzeigen der CSS-Rasterspuren für ein Desktop-Layout mithilfe einer CSS-Medienabfrage mit der neuen Bereichssyntax.
Die neue CSS-Medienabfrage-Bereichssyntax

Spielen Sie damit:

Warum die neue Syntax einfacher zu verstehen ist

Fazit: Es ist einfacher, einen Vergleichsoperator (z width >= 320px) als es ist, den Unterschied zwischen zu erkennen min-width und max-width Verwendung der and Operator. Indem die Nuance dazwischen entfernt wird min- und max-, wir haben eine einzige width Parameter, mit dem gearbeitet werden soll, und die Operatoren sagen uns den Rest.

Abgesehen von den visuellen Unterschieden dieser Syntaxen machen sie auch etwas andere Dinge. Verwenden min- und max- entspricht der Verwendung mathematischer Vergleichsoperatoren:

  • max-width entspricht dem <= Betreiber (zB (max-width: 320px) ist die gleiche wie (width <= 320px)).
  • min-width entspricht dem >= Betreiber (zB (min-width: 320px) ist die gleiche wie (width >= 320px)).

Beachten Sie, dass keines von beiden das Äquivalent von ist > or < Operatoren.

Lassen Sie uns ein Beispiel direkt aus der Media Queries Level 4-Spezifikation ziehen, in der wir verschiedene Stile basierend auf einem Haltepunkt bei definieren 320px in der Ansichtsfensterbreite mit min-width und max-width:

@media (max-width: 320px) { /* styles for viewports = 320px */ }

Beide Medienabfragen stimmen mit einer Bedingung überein, wenn die Breite des Darstellungsbereichs gleich ist 320px. Das ist nicht genau das, was wir wollen. Wir wollen entweder eine dieser Bedingungen und nicht beide gleichzeitig. Um diese impliziten Änderungen zu vermeiden, fügen wir der Abfrage möglicherweise ein Pixel hinzu, das auf basiert min-width:

@media (max-width: 320px){ /* styles for viewports = 321px */ }

Dadurch wird zwar sichergestellt, dass die beiden Stilsätze nicht gleichzeitig angewendet werden, wenn die Ansichtsfensterbreite gleich ist 320px, jede Viewport-Breite, die dazwischen liegt 320px und 321px führt zu einer superkleinen Zone, in der keiner der Stile in beiden Abfragen angewendet wird – eine seltsame „Flash of Unstyled Content“-Situation.

Eine Lösung besteht darin, den zweiten Vergleichsskalenwert (Zahlen nach dem Komma) zu erhöhen 320.01px:

@media (max-width: 320px) { /* styles for viewports = 320.01px */ }

Aber das wird langsam albern und zu kompliziert. Aus diesem Grund ist die Syntax des neuen Medienfunktionsbereichs ein geeigneterer Ansatz:

@media (width <= 320px) { /* styles for viewports  320px) { /* styles for viewports > 320px */ }

Wrapping up

Puh, wir haben viel über die neue Syntax für das Targeting von Anzeigebereichsbreitenbereichen in CSS-Medienabfragen gesprochen. Jetzt, da die Media Queries Level 4-Spezifikation die Syntax eingeführt hat und sie in den Firefox- und Chromium-Browsern übernommen wurde, nähern wir uns der Möglichkeit, die neuen Vergleichsoperatoren zu verwenden und sie auch mit anderen Medienfunktionen zu kombinieren width, mögen height und aspect-ratio

Und das ist nur eine der neueren Funktionen, die die Level-4-Spezifikation neben a Reihe von Abfragen, die wir basierend auf Benutzereinstellungen stellen können. Es endet nicht dort! Probier das aus Vollständiger Leitfaden für CSS-Medienabfragen für einen kleinen Vorgeschmack was in Media Queries Level 5 enthalten sein könnte.

Zeitstempel:

Mehr von CSS-Tricks