PFAD: ./module/css/css5/

DATEI: string(25) "00Inhaltsverzeichnis5.php"
DATEI: string(27) "35Respönsives-Webdesign.php"
DATEI: string(21) "36Flexible Größen.php"
DATEI: string(19) "38Media Queries.php"
DATEI: string(18) "39Mobile-First.php"
DATEI: string(23) "41Responsive Bilder.php"
DATEI: string(27) "42Responsive Typografie.php"
DATEI: string(25) "43Responsive Tabellen.php"
DATEI: string(23) "44Container Queries.php"
DATEI: string(21) "46Feature-Queries.php"

css mit Adi Prinz

Media Queries

Mit Media Queries können CSS-Regeln abhängig von Eigenschaften des Geräts, des Viewports oder der Benutzereinstellungen angewendet werden. Sie bilden damit eine wichtige Grundlage für responsive Layouts.

Media Queries sollten jedoch nur dort eingesetzt werden, wo das Layout eine Anpassung tatsächlich benötigt. Flexible Größen, Flexbox und Grid können viele Änderungen bereits ohne feste Breakpoints übernehmen.

Grundlegender Aufbau

Eine Media Query beginnt mit der Regel @media. Dahinter folgt die Bedingung, unter der die enthaltenen CSS-Regeln angewendet werden.

@media (min-width: 48rem) {
  .card-container {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
  }
}
    

Die Regeln innerhalb dieser Media Query gelten, sobald der Viewport mindestens 48rem breit ist.

Die CSS-Regeln außerhalb einer Media Query bilden die Grundlage. Innerhalb der Media Query werden nur die Eigenschaften ergänzt oder verändert, die am jeweiligen Breakpoint eine Anpassung benötigen.

Media Types

Media Types beschreiben die allgemeine Art des Ausgabemediums.

Media Type Bedeutung
all Gilt für alle Ausgabemedien. Dieser Wert ist auch der Standard, wenn kein Media Type angegeben wird.
screen Gilt hauptsächlich für Bildschirme wie Monitore, Tablets und Smartphones.
print Gilt für die Druckausgabe und die Druckvorschau.
@media screen and (min-width: 48rem) {
  .navigation {
    display: flex;
  }
}

@media print {
  .navigation,
  .sidebar {
    display: none;
  }
}
    

Für responsive Bildschirm-Layouts muss screen normalerweise nicht ausdrücklich angegeben werden. Die kürzere Schreibweise ist ausreichend:

@media (min-width: 48rem) {
  .navigation {
    display: flex;
  }
}
    

Media Features

Media Features prüfen bestimmte Eigenschaften des Ausgabegeräts, des Viewports oder der Benutzereinstellungen.

Media Feature Bedeutung
width Prüft die Breite des Viewports.
height Prüft die Höhe des Viewports.
orientation Unterscheidet Hochformat und Querformat.
aspect-ratio Prüft das Seitenverhältnis des Viewports.
hover Prüft, ob das primäre Eingabegerät bequem hovern kann.
pointer Prüft die Genauigkeit des primären Zeigegeräts.
prefers-color-scheme Berücksichtigt ein bevorzugtes helles oder dunkles Farbschema.
prefers-reduced-motion Berücksichtigt den Wunsch nach weniger Bewegungen und Animationen.
prefers-contrast Berücksichtigt den Wunsch nach einem veränderten Kontrast.
forced-colors Erkennt, ob das System eine eingeschränkte Farbpalette erzwingt.

Mobile First mit min-width

Beim Mobile-First-Prinzip werden zuerst die CSS-Regeln für schmale Viewports festgelegt. Anschließend wird das Layout mit zunehmender Breite erweitert.

.card-container {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
}

@media (min-width: 48rem) {
  .card-container {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (min-width: 75rem) {
  .card-container {
    grid-template-columns: repeat(4, 1fr);
  }
}
    

Das Beispiel erzeugt:

  • standardmäßig eine Spalte,
  • ab 48rem zwei Spalten,
  • ab 75rem vier Spalten.
Mobile First bedeutet nicht, dass nur für Smartphones entwickelt wird. Es bedeutet, dass mit der einfachsten Darstellung begonnen und das Layout anschließend für zusätzlichen Platz erweitert wird.

Desktop First mit max-width

Beim Desktop-First-Prinzip wird zunächst die Darstellung für große Viewports festgelegt. Mit max-width wird das Layout anschließend für kleinere Breiten angepasst.

.card-container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1rem;
}

@media (max-width: 74.999rem) {
  .card-container {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 47.999rem) {
  .card-container {
    grid-template-columns: 1fr;
  }
}
    

Diese Vorgehensweise ist technisch möglich. Bei neuen Projekten ist Mobile First jedoch häufig übersichtlicher, weil Erweiterungen mit zunehmendem Platz ergänzt werden.

Mobile First und Desktop First sollten innerhalb eines Layoutsystems nicht unüberlegt vermischt werden. Eine einheitliche Richtung erleichtert die Wartung.

Breakpoints nach dem Inhalt wählen

Breakpoints sollten nicht ausschließlich nach bekannten Gerätebezeichnungen ausgewählt werden. Entscheidend ist der Punkt, an dem das vorhandene Layout nicht mehr ausreichend Platz besitzt.

Typische Hinweise für einen notwendigen Breakpoint sind:

  • Navigationseinträge passen nicht mehr in eine Zeile.
  • Textspalten werden zu schmal oder zu breit.
  • Karten wirken stark zusammengedrückt.
  • Bedienelemente überlagern sich.
  • große leere Flächen entstehen.
  • Inhalte verlieren ihre sinnvolle visuelle Reihenfolge.
Ein Breakpoint gehört an die Stelle, an der ihn der Inhalt benötigt – nicht an die Stelle, an der ein bestimmtes Smartphone- oder Tablet-Modell beginnt.

Typische Breakpoint-Bereiche

Für Lernbeispiele und einheitliche Projekte können vordefinierte Breakpoints hilfreich sein. Sie sind jedoch keine festen Gerätegrenzen.

Bezeichnung Beispielhafter Beginn Mögliche Verwendung
Small Grundlayout ohne Media Query Schmale Viewports und einspaltige Darstellung
Medium 48rem beziehungsweise ungefähr 768px Mehrspaltige Inhalte oder eine erweiterte Navigation
Large 62rem beziehungsweise ungefähr 992px Zusätzliche Spalten oder Seitenbereiche
Extra Large 75rem beziehungsweise ungefähr 1200px Breite Desktop-Layouts

Die Umrechnung in Pixel dient nur der Orientierung. Bei der üblichen Browser-Schriftgröße entsprechen 48rem ungefähr 768px.

Warum Breakpoints häufig in rem angegeben werden

Breakpoints können in px, em oder rem angegeben werden.

@media (min-width: 48rem) {
  /* Regeln für breitere Viewports */
}
    

Relative Einheiten können besser auf veränderte Browser- und Schriftgrößeneinstellungen reagieren. Dadurch kann das Layout früher umschalten, wenn größere Texte mehr Platz benötigen.

Wichtig ist vor allem eine einheitliche Vorgehensweise. Die Breakpoints sollten zentral dokumentiert und nicht willkürlich über viele Dateien verteilt werden.

Bereiche mit Mindest- und Höchstbreite

Mehrere Bedingungen können mit and verbunden werden. Damit lässt sich ein begrenzter Breitenbereich definieren.

@media (min-width: 48rem) and (max-width: 74.999rem) {
  .sidebar {
    display: none;
  }
}
    

Die enthaltenen Regeln gelten ab 48rem und unterhalb von 75rem.

Mit der modernen Bereichssyntax kann dieselbe Bedingung kürzer geschrieben werden:

@media (48rem <= width < 75rem) {
  .sidebar {
    display: none;
  }
}
    
Eine begrenzte Media Query ist nur erforderlich, wenn eine Änderung ausschließlich innerhalb dieses Bereichs gelten soll. Bei Mobile First reicht häufig eine aufsteigende Folge von min-width-Abfragen.

Mehrere Media Queries mit Komma verbinden

Ein Komma innerhalb einer Media Query funktioniert wie eine logische Oder-Verknüpfung. Es genügt, wenn eine der Bedingungen erfüllt ist.

@media (max-width: 30rem), (orientation: landscape) {
  .notice {
    display: block;
  }
}
    

Die Regeln gelten, wenn:

  • der Viewport höchstens 30rem breit ist oder
  • sich das Gerät beziehungsweise der Viewport im Querformat befindet.

Bedingungen mit not umkehren

Mit not kann das Ergebnis einer Media Query umgekehrt werden.

@media not (hover: hover) {
  .tooltip {
    display: none;
  }
}
    

Im Beispiel wird die Regel angewendet, wenn das primäre Eingabegerät nicht bequem hovern kann.

Negierte Bedingungen können schwerer zu lesen sein. Wenn eine positive Formulierung möglich ist, ist diese häufig verständlicher.

Hochformat und Querformat

Das Media Feature orientation unterscheidet die beiden grundlegenden Ausrichtungen des Viewports.

@media (orientation: portrait) {
  .gallery {
    grid-template-columns: 1fr;
  }
}

@media (orientation: landscape) {
  .gallery {
    grid-template-columns: repeat(2, 1fr);
  }
}
    
Wert Bedeutung
portrait Die Höhe des Viewports ist mindestens so groß wie seine Breite.
landscape Die Breite des Viewports ist größer als seine Höhe.

Die Ausrichtung sagt nichts über die Geräteart aus. Auch ein Desktopfenster kann schmaler als hoch und damit im Hochformat sein.

Hover-Fähigkeit erkennen

Hover-Effekte sollten nur verwendet werden, wenn das Eingabegerät sie sinnvoll unterstützt. Touchscreens besitzen normalerweise keinen dauerhaften Hover-Zustand.

.card-link {
  text-decoration: underline;
}

@media (hover: hover) {
  .card-link {
    text-decoration: none;
  }

  .card-link:hover {
    text-decoration: underline;
  }
}
    
Wert Bedeutung
hover: hover Das primäre Eingabegerät kann bequem hovern.
hover: none Das primäre Eingabegerät kann nicht oder nur unzuverlässig hovern.
Wichtige Inhalte oder Funktionen dürfen nicht ausschließlich über einen Hover-Effekt erreichbar sein.

Genauigkeit des Zeigegeräts

Das Media Feature pointer beschreibt die Genauigkeit des primären Zeigegeräts.

Wert Typische Bedeutung
fine Ein genaues Zeigegerät ist vorhanden, beispielsweise eine Maus oder ein Eingabestift.
coarse Das Zeigegerät ist weniger genau, beispielsweise ein Finger auf einem Touchscreen.
none Es ist kein primäres Zeigegerät vorhanden.
@media (pointer: coarse) {
  .button {
    min-height: 3rem;
    padding: 0.875rem 1.25rem;
  }
}
    

Auf weniger genauen Eingabegeräten können größere Schaltflächen die Bedienung erleichtern.

Dunkles Farbschema berücksichtigen

Mit prefers-color-scheme kann die Farbschema-Einstellung des Systems berücksichtigt werden.

:root {
  color-scheme: light dark;

  --page-background: #ffffff;
  --text-color: #212529;
}

@media (prefers-color-scheme: dark) {
  :root {
    --page-background: #1f2328;
    --text-color: #f0f3f6;
  }
}

body {
  color: var(--text-color);
  background-color: var(--page-background);
}
    

Durch CSS Custom Properties können die verwendeten Farben an einer zentralen Stelle ausgetauscht werden.

Die automatische Systemeinstellung kann zusätzlich durch eine manuelle Auswahl auf der Webseite ergänzt werden. Eine bewusste Benutzerauswahl sollte dabei Vorrang erhalten.

Reduzierte Bewegung berücksichtigen

Manche Menschen reagieren empfindlich auf starke Bewegungen, Zoom-Effekte oder automatisch ablaufende Animationen. Mit prefers-reduced-motion kann diese Einstellung berücksichtigt werden.

.card {
  transition:
    transform 300ms ease,
    box-shadow 300ms ease;
}

.card:hover {
  transform: translateY(-0.5rem);
}

@media (prefers-reduced-motion: reduce) {
  .card {
    transition: none;
  }

  .card:hover {
    transform: none;
  }
}
    
Bei reduzierter Bewegung sollten nicht alle Zustandsänderungen entfernt werden. Wichtige Rückmeldungen müssen weiterhin erkennbar bleiben, beispielsweise durch Farben, Rahmen oder andere nicht bewegte Darstellungen.

Media Queries für den Druck

Eine Webseite kann für die Druckausgabe angepasst werden. Navigation, interaktive Bedienelemente und dekorative Bereiche werden dabei häufig ausgeblendet.

@media print {
  .main-navigation,
  .sidebar,
  .button,
  video {
    display: none;
  }

  body {
    color: #000000;
    background: #ffffff;
    font-size: 12pt;
  }

  a {
    color: inherit;
    text-decoration: underline;
  }

  article {
    break-inside: avoid;
  }
}
    

Druckregeln sollten in der Druckvorschau geprüft werden. Besonders Seitenumbrüche, ausgeblendete Inhalte und Linkdarstellungen können dort kontrolliert werden.

Media Queries ohne feste Geräteklassen

Ein flexibles Grid benötigt häufig weniger Breakpoints als ein Layout mit festen Spaltenzahlen.

.card-container {
  display: grid;
  grid-template-columns:
    repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
  gap: 1rem;
}
    

Die Spalten werden automatisch erzeugt. Ein zusätzlicher Breakpoint ist nur erforderlich, wenn sich nicht nur die Spaltenanzahl, sondern beispielsweise auch Navigation, Reihenfolge oder Darstellung der Inhalte verändern soll.

Media Queries ergänzen flexible Layouts. Sie müssen nicht jede mögliche Bildschirmbreite einzeln steuern.

Navigation mit einem Breakpoint

Eine typische responsive Navigation verwendet zunächst einen Menü-Button. Sobald genügend Platz vorhanden ist, werden die Navigationslinks direkt angezeigt.

.nav-toggle {
  display: inline-flex;
}

.nav-list {
  display: none;
}

.nav-list.is-open {
  display: flex;
  flex-direction: column;
}

@media (min-width: 48rem) {
  .nav-toggle {
    display: none;
  }

  .nav-list,
  .nav-list.is-open {
    display: flex;
    flex-direction: row;
  }
}
    

Der Breakpoint sollte dort liegen, wo alle Navigationseinträge ausreichend Platz besitzen. Er muss nicht automatisch mit einer bestimmten Geräteklasse übereinstimmen.

Überschreibungen möglichst klein halten

Innerhalb einer Media Query müssen nur die Eigenschaften wiederholt werden, deren Werte sich ändern.

Unnötig umfangreich

.card {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  padding: 1rem;
  border: 1px solid #cccccc;
}

@media (min-width: 48rem) {
  .card {
    display: flex;
    flex-direction: row;
    gap: 1rem;
    padding: 1rem;
    border: 1px solid #cccccc;
  }
}
    

Besser

.card {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  padding: 1rem;
  border: 1px solid #cccccc;
}

@media (min-width: 48rem) {
  .card {
    flex-direction: row;
  }
}
    

Die zweite Version zeigt sofort, welche Änderung am Breakpoint vorgenommen wird, und lässt sich leichter warten.

Media Queries sinnvoll anordnen

Bei Mobile First werden die Breakpoints normalerweise von klein nach groß angeordnet.

/* Grundlayout */

@media (min-width: 36rem) {
  /* Small */
}

@media (min-width: 48rem) {
  /* Medium */
}

@media (min-width: 62rem) {
  /* Large */
}

@media (min-width: 75rem) {
  /* Extra Large */
}
    

Spätere Regeln können frühere Regeln überschreiben. Eine nachvollziehbare Reihenfolge hilft deshalb, unbeabsichtigte Konflikte zu vermeiden.

Häufige Fehler

  • Das Grundlayout funktioniert nur innerhalb einer Media Query.
  • Breakpoints werden ausschließlich nach bestimmten Geräten gewählt.
  • Zu viele kleine Breakpoints machen das Stylesheet schwer wartbar.
  • min-width und max-width werden ohne klares System vermischt.
  • Innerhalb einer Media Query werden unveränderte CSS-Regeln vollständig wiederholt.
  • Hover-Effekte enthalten wichtige Funktionen, die auf Touchscreens nicht zugänglich sind.
  • Animationen berücksichtigen prefers-reduced-motion nicht.
  • Media Queries werden verwendet, obwohl Flexbox oder Grid die Anpassung automatisch übernehmen könnten.
  • Das Viewport-Meta-Element fehlt im HTML-Dokument.
  • Das Layout wird nur mit wenigen festen Fensterbreiten getestet.

Zusammenfassung

  • Media Queries wenden CSS-Regeln nur unter bestimmten Bedingungen an.
  • Mobile First verwendet ein Grundlayout für schmale Viewports und erweitert es mit min-width.
  • Breakpoints sollten vom Inhalt und nicht von einzelnen Gerätemodellen bestimmt werden.
  • Mehrere Bedingungen können mit and verbunden werden.
  • Ein Komma stellt eine Oder-Verknüpfung dar.
  • orientation, hover und pointer berücksichtigen weitere Eigenschaften der Nutzungssituation.
  • prefers-color-scheme und prefers-reduced-motion berücksichtigen persönliche Systemeinstellungen.
  • Flexible Layouts mit Flexbox und Grid können die Anzahl notwendiger Media Queries deutlich reduzieren.
  • Innerhalb einer Media Query sollten nur tatsächlich notwendige Änderungen stehen.
Gute Media Queries reagieren auf den tatsächlichen Platzbedarf der Inhalte und ergänzen ein bereits flexibles Grundlayout.