Responsives Webdesign – Grundlagen

Da immer mehr Nutzer im Internet mit Mobiltelefonen unterwegs sind, wird es für Webdesigner immer wichtiger, Inhalte so zu gestalten, dass sie auf verschiedenen Bildschirmgrößen gut funktionieren. Responsives Webdesign, ursprünglich von Ethan Marcotte in A List Apart definiert, ist eine Designstrategie, die auf die Bedürfnisse der Nutzer und die Funktionen ihrer Geräte reagiert, indem das Layout einer Website an das verwendete Gerät angepasst wird. So kann eine responsive Website beispielsweise Inhalte auf einem Smartphone in einer einzelnen Spalte, auf einem Tablet in zwei Spalten und auf einem Computer in drei oder vier Spalten anzeigen.

Wenn der Bildschirm breiter wird, ändert das Widget entsprechend seine Form.

Da internetfähige Geräte so viele mögliche Bildschirmgrößen haben, ist es wichtig, dass sich Ihre Website an jede vorhandene oder zukünftige Bildschirmgröße anpasst. Modernes responsives Design berücksichtigt auch Interaktionsmodi wie Touchscreens. Das Ziel ist es, die Nutzung für alle zu optimieren.

Darstellungsbereich festlegen

Seiten, die für eine Vielzahl von Geräten optimiert sind, müssen im Header des Dokuments ein Meta-Viewport-Tag enthalten. Dieses Tag teilt dem Browser mit, wie die Größe und Skalierung der Seite gesteuert werden soll.

Um die beste Darstellung zu ermöglichen, rendern mobile Browser die Seite mit einer Desktop-Bildschirmbreite (in der Regel etwa 980px, variiert jedoch je nach Gerät). Anschließend wird versucht, die Darstellung zu verbessern, indem die Schriftgrößen erhöht und die Inhalte skaliert werden, damit sie auf den Bildschirm passen. Dies kann dazu führen, dass Schriftarten inkonsistent aussehen und Nutzer heranzoomen müssen, um die Inhalte zu sehen und mit ihnen zu interagieren.

<!DOCTYPE html>
<html lang="en">
  <head>
    …
    <meta name="viewport" content="width=device-width, initial-scale=1">
    …
  </head>
  …

Mit dem Meta-Viewport-Wert width=device-width wird die Seite so festgelegt, dass sie der Breite des Bildschirms in geräteunabhängigen Pixeln (DIP) entspricht. Dies ist eine standardmäßige visuelle Pixeleinheit, die auf einem Bildschirm mit hoher Pixeldichte aus vielen physischen Pixeln bestehen kann. So kann der Inhalt der Seite an verschiedene Bildschirmgrößen angepasst werden.

Screenshot einer Seite, auf der der Text schwer zu lesen ist, weil er stark herausgezoomt ist
Eine Seite ohne das Darstellungsbereich-Meta-Tag wird stark herangezoomt geladen, wodurch der Text schwer zu lesen ist. Beispiel auf Glitch ansehen
Screenshot derselben Seite mit Text in einer lesbaren Größe
Wenn das Darstellungsbereich-Meta-Tag festgelegt ist, können Sie die Seite lesen, ohne heranzuzoomen. Siehe dieses Beispiel auf Glitch.

Einige Browser halten die Breite der Seite beim Drehen in den Querformatmodus konstant und zoomen heran, um den Bildschirm auszufüllen, anstatt die Inhalte neu zu formatieren. Wenn Sie den Wert initial-scale=1 hinzufügen, wird Browsern unabhängig von der Geräteausrichtung ein Verhältnis von 1:1 zwischen CSS-Pixeln und geräteunabhängigen Pixeln vorgegeben. So kann die Seite die volle Breite im Querformat nutzen.

Mit der Lighthouse-Prüfung Kein <meta name="viewport">-Tag mit width oder initial-scale können Sie den Prozess automatisieren, um sicherzustellen, dass in Ihren HTML-Dokumenten das Viewport-Meta-Tag richtig verwendet wird.

Größe von Inhalten an den Darstellungsbereich anpassen

Sowohl auf Computern als auch auf Mobilgeräten sind Nutzer daran gewöhnt, Websites vertikal, aber nicht horizontal zu scrollen. Wenn Nutzer horizontal scrollen oder herauszoomen müssen, um die gesamte Seite zu sehen, ist das nicht nutzerfreundlich.

Beim Entwickeln einer mobilen Website mit einem Meta-Viewport-Tag wird häufig versehentlich Seiteninhalt erstellt, der nicht ganz in den angegebenen Darstellungsbereich passt. Ein Bild, das breiter als der Darstellungsbereich ist, kann beispielsweise zu horizontalem Scrollen führen. Um dies zu vermeiden, passen Sie Ihre Inhalte so an, dass sie in den Darstellungsbereich passen.

Mit der Lighthouse-Prüfung Größe des Inhalts wird nicht korrekt an den Darstellungsbereich angepasst können Sie das Erkennen von überlaufenden Inhalten automatisieren.

Bilder

Wenn ein Bild mit festen Abmessungen größer als der Darstellungsbereich ist, muss auf der Seite gescrollt werden. Wir empfehlen, allen Bildern eine max-width von 100% zuzuweisen. Dadurch werden die Bilder auf die Größe des verfügbaren Bereichs verkleinert und sie werden nicht über ihre ursprüngliche Größe hinaus gedehnt.

In den meisten Fällen können Sie dies tun, indem Sie Ihrem Stylesheet Folgendes hinzufügen:

img {
  max-width: 100%;
  display: block;
}

Dem img-Element die Abmessungen des Bildes hinzufügen

Auch wenn Sie max-width: 100% festlegen, empfehlen wir Ihnen, Ihren <img>-Tags die Attribute width und height hinzuzufügen, damit der Browser Platz für Bilder reservieren kann, bevor sie geladen werden. So lassen sich Layoutverschiebungen vermeiden.

Layout

Da sich die Bildschirmabmessungen und die Breite in CSS-Pixeln zwischen den Geräten stark unterscheiden (z. B. zwischen Smartphones und Tablets und sogar zwischen verschiedenen Smartphones), sollten Inhalte nicht von einer bestimmten Darstellungsbreite abhängen, um richtig gerendert zu werden.

Bisher mussten Layoutelemente in Prozent angegeben werden. Wenn Sie Pixelmessungen verwenden, müssen Nutzer auf kleinen Bildschirmen horizontal scrollen:

Screenshot eines Layouts mit zwei Spalten, bei dem sich der Großteil der zweiten Spalte außerhalb des Darstellungsbereichs befindet
Ein frei bewegliches Layout mit Pixeln. Siehe dieses Beispiel auf Glitch.

Wenn Sie stattdessen Prozentsätze verwenden, werden die Spalten auf kleineren Bildschirmen schmaler, da jede Spalte immer denselben Prozentsatz der Bildschirmbreite einnimmt:

Moderne CSS-Layouttechniken wie Flexbox, Grid Layout und Multicol erleichtern das Erstellen dieser flexiblen Raster erheblich.

Flexbox

Verwenden Sie Flexbox, wenn Sie mehrere Elemente unterschiedlicher Größe haben und diese bequem in einer oder mehreren Zeilen unterbringen möchten, wobei kleinere Elemente weniger Platz und größere Elemente mehr Platz benötigen.

.items {
  display: flex;
  justify-content: space-between;
}

Mit Flexbox können Sie Elemente in einer einzelnen Zeile oder in mehreren Zeilen anzeigen, wenn der verfügbare Platz abnimmt.

Weitere Informationen zu Flexbox

CSS-Rasterlayout

Mit dem CSS-Rasterlayout lassen sich flexible Raster erstellen. Sie können das vorherige Beispiel für das Floating-Element verbessern, indem Sie das Rasterlayout und die Einheit fr verwenden, die einen Teil des verfügbaren Platzes im Container darstellt.

.container {
  display: grid;
  grid-template-columns: 1fr 3fr;
}

Mit dem Rasterlayout können Sie auch regelmäßige Rasterlayouts mit so vielen Elementen erstellen, wie sie passen. Je kleiner das Display ist, desto weniger Titel sind verfügbar. Die folgende Demo zeigt ein Raster mit so vielen Karten, wie in jede Zeile passen, mit einer Mindestgröße von 200px.

Weitere Informationen zum CSS-Rasterlayout

Mehrspaltiges Layout

Für einige Layouttypen können Sie das Layout mit mehreren Spalten (Multicol) verwenden. Dabei wird mithilfe der Property column-width eine responsive Anzahl von Spalten erstellt. In der folgenden Demo werden Spalten auf der Seite hinzugefügt, wenn Platz für eine weitere 200px-Spalte ist.

Weitere Informationen zu Multicol

CSS-Medienabfragen für Responsivität verwenden

Manchmal müssen Sie umfangreichere Änderungen an Ihrem Layout vornehmen, um bestimmte Bildschirmgrößen zu unterstützen, als mit den zuvor beschriebenen Techniken möglich ist. Hier kommen Medienabfragen ins Spiel.

Medienabfragen sind einfache Filter, die Sie auf CSS-Stile anwenden können, um diese Stile je nach Art des Geräts, auf dem die Inhalte gerendert werden, zu ändern. Außerdem kann das Styling je nach Gerätefunktionen wie Breite, Höhe, Ausrichtung und Verwendung als Touchscreen geändert werden.

Wenn Sie unterschiedliche Stile für den Druck bereitstellen möchten, können Sie einen Ausgabetyp anvisieren und ein Stylesheet für Druckstile einschließen:

<!DOCTYPE html>
<html lang="en">
  <head>
    …
    <link rel="stylesheet" href="print.css" media="print">
    …
  </head>
  …

Sie können auch eine Medienabfrage verwenden, um Druckstile in Ihr Hauptstilblatt aufzunehmen:

@media print {
  /* print styles go here */
}

Bei responsivem Webdesign beziehen sich die häufigsten Abfragen auf Gerätefunktionen. Sie können Ihr Layout also für Touchscreens oder kleinere Bildschirme anpassen.

Medienabfragen basierend auf der Größe des Darstellungsbereichs

Mit Medienabfragen können Sie eine responsive Website erstellen, bei der bestimmte Stile auf bestimmte Bildschirmgrößen angewendet werden. Bei Abfragen nach der Bildschirmgröße können folgende Dinge getestet werden:

  • width (min-width, max-width)
  • height (min-height, max-height)
  • orientation
  • aspect-ratio

Alle diese Funktionen werden von den meisten Browsern unterstützt. Weitere Informationen, einschließlich Informationen zur Browserunterstützung, finden Sie auf der MDN unter width, height, orientation und aspect-ratio.

Medienabfragen basierend auf Gerätefunktionen

Angesichts der Vielzahl der verfügbaren Geräte können Entwickler nicht davon ausgehen, dass jedes große Gerät ein normaler Desktop- oder Laptop-Computer ist oder dass jedes kleine Gerät einen Touchscreen verwendet. Mit einigen neueren Ergänzungen der Media-Abfragespezifikation können Sie Funktionen wie den Typ des Cursors testen, der zur Interaktion mit dem Gerät verwendet wird, und ob der Nutzer den Cursor auf Elemente bewegen kann.

  • hover
  • pointer
  • any-hover
  • any-pointer

Sehen Sie sich diese Demo auf verschiedenen Geräten an, z. B. auf einem normalen Computer und einem Smartphone oder Tablet.

Diese neueren Funktionen werden in allen modernen Browsern gut unterstützt. Weitere Informationen finden Sie auf den MDN-Seiten zu hover, any-hover, pointer und any-pointer.

any-hover und any-pointer verwenden

Mit den Funktionen any-hover und any-pointer wird getestet, ob der Nutzer den Mauszeiger auf Elemente bewegen kann (häufig als Bewegen des Mauszeigers bezeichnet) oder überhaupt einen Mauszeiger verwenden kann, auch wenn dies nicht die primäre Art und Weise ist, wie er mit seinem Gerät interagiert. Seien Sie bei der Verwendung dieser Funktionen sehr vorsichtig, damit Nutzer mit Touchscreen nicht gezwungen werden, zu einer Maus zu wechseln. any-hover und any-pointer können jedoch nützlich sein, wenn es wichtig ist, die Art des Geräts eines Nutzers zu ermitteln. Ein Laptop mit Touchscreen und Touchpad sollte beispielsweise neben der Möglichkeit zum Schweben auch grobe und feine Zeiger haben.

Unterbrechungen auswählen

Definieren Sie keine Unterbrechungen basierend auf Geräteklassen oder Produkten, Markennamen oder Betriebssystemen. Das erschwert die Wartung des Codes. Lassen Sie stattdessen die Inhalte bestimmen, wie sich das Layout an den Container anpasst.

Wählen Sie wichtige Markierungen aus, indem Sie klein anfangen und sich dann steigern.

Entwerfen Sie die Inhalte zuerst so, dass sie auf einem kleinen Bildschirm passen, und vergrößern Sie den Bildschirm dann so lange, bis ein Seitenaufruf erforderlich wird. So können Sie die Anzahl der Seitenauflösungen auf Ihrer Seite minimieren und sie basierend auf dem Inhalt optimieren.

Im folgenden Beispiel wird das Beispiel für das Wettervorhersage-Widget am Anfang dieser Seite veranschaulicht. Der erste Schritt besteht darin, die Prognose auf einem kleinen Bildschirm gut aussehen zu lassen:

Screenshot einer Wetter-App auf einem Mobilgerät
Die App bei einer schmalen Breite.

Ändern Sie als Nächstes die Größe des Browsers, bis zwischen den Elementen zu viel Weißraum vorhanden ist, um das Widget ansprechend zu gestalten. Die Entscheidung ist subjektiv, aber mehr als 600px ist definitiv zu breit.

Screenshot einer Wetter-App mit großen Lücken zwischen den Elementen
Bei dieser Größe sollte sich das Layout der App wahrscheinlich ändern.

Wenn Sie einen Wendepunkt bei 600px einfügen möchten, erstellen Sie am Ende Ihres CSS für die Komponente zwei Medienabfragen: eine für den Fall, dass der Browser 600px oder schmaler ist, und eine für den Fall, dass er breiter als 600px ist.

@media (max-width: 600px) {

}

@media (min-width: 601px) {

}

Refaktorisieren Sie abschließend das CSS. Fügen Sie in der Medienabfrage für eine max-width von 600px das CSS hinzu, das nur für kleine Bildschirme gilt. Fügen Sie in der Medienabfrage für eine min-width von 601px CSS für größere Bildschirme hinzu.

Wählen Sie bei Bedarf kleinere Markierungen aus.

Neben wichtigen Wendepunkten, die Sie festlegen, wenn sich das Layout erheblich ändert, ist es auch hilfreich, Anpassungen für kleinere Änderungen vorzunehmen. Zwischen wichtigen Wendepunkten kann es beispielsweise hilfreich sein, die Ränder oder Abstände eines Elements anzupassen oder die Schriftgröße zu erhöhen, damit es im Layout natürlicher wirkt.

Dieses Beispiel folgt demselben Muster wie das vorherige und beginnt mit der Optimierung von Layouts für kleinere Bildschirme. Vergrößern Sie zuerst die Schrift, wenn die Breite des Darstellungsbereichs größer als 360px ist. Wenn genügend Platz vorhanden ist, können Sie die Höchst- und Tiefsttemperaturen auf einer Zeile platzieren und die Wettersymbole vergrößern.

@media (min-width: 360px) {
  body {
    font-size: 1.0em;
  }
}

@media (min-width: 500px) {
  .seven-day-fc .temp-low,
  .seven-day-fc .temp-high {
    display: inline-block;
    width: 45%;
  }

  .seven-day-fc .seven-day-temp {
    margin-left: 5%;
  }

  .seven-day-fc .icon {
    width: 64px;
    height: 64px;
  }
}

Bei großen Bildschirmen empfehlen wir, die maximale Breite des Vorhersagebereichs so festzulegen, dass er nicht die gesamte Bildschirmbreite einnimmt.

@media (min-width: 700px) {
  .weather-forecast {
    width: 700px;
  }
}

Text für das Lesen optimieren

Die klassische Lesbarkeitstheorie besagt, dass eine ideale Spalte 70 bis 80 Zeichen pro Zeile enthalten sollte (etwa 8 bis 10 Wörter auf Deutsch). Fügen Sie einen Umbruch hinzu, sobald die Breite eines Textblocks auf etwa 10 Wörter ansteigt.

Screenshot einer Textseite auf einem Mobilgerät
SMS auf einem Mobilgerät.
Screenshot einer Textseite in einem Desktopbrowser
Derselbe Text in einem Desktop-Browser mit einem Haltepunkt, um die Zeilenlänge einzuschränken.

In diesem Beispiel werden mit der Roboto-Schriftart bei 1em auf dem kleineren Bildschirm 10 Wörter pro Zeile dargestellt, auf größeren Bildschirmen ist jedoch ein Umbruch erforderlich. Wenn die Browserbreite in diesem Fall größer als 575px ist, beträgt die ideale Inhaltsbreite 550px.

@media (min-width: 575px) {
  article {
    width: 550px;
    margin-left: auto;
    margin-right: auto;
  }
}

Inhalte nicht ausblenden (:#avoid-hiding-content)

Achten Sie darauf, welche Inhalte Sie je nach Bildschirmgröße ausblenden oder anzeigen lassen. Blenden Sie Inhalte nicht nur aus, weil sie nicht auf dem Bildschirm angezeigt werden können. Die Bildschirmgröße sagt nicht voraus, was ein Nutzer sehen möchte. Wenn Sie beispielsweise die Pollenbelastung aus der Wettervorhersage entfernen, kann das für Allergiker im Frühling ein ernstes Problem darstellen, da sie diese Informationen benötigen, um zu entscheiden, ob sie nach draußen gehen können.

Mediaabfrage-Bruchstellen in den Chrome-Entwicklertools ansehen

Nachdem Sie die Media-Query-Bruchpunkte eingerichtet haben, prüfen Sie, wie sich diese auf das Erscheinungsbild Ihrer Website auswirken. Sie können die Größe Ihres Browserfensters ändern, um die Grenzwerte auszulösen. Die Chrome-Entwicklertools haben jedoch eine integrierte Funktion, mit der Sie sehen können, wie eine Seite bei verschiedenen Grenzwerten aussieht.

Screenshot der DevTools mit geöffneter Wetter-App und einer ausgewählten Breite von 822 Pixeln
Wetter-App in den DevTools mit größerem Darstellungsbereich.
Screenshot der DevTools mit geöffneter Wetter-App und einer ausgewählten Breite von 436 Pixeln
Wetter-App in den DevTools mit einem schmaleren Darstellungsbereich.

So rufen Sie Ihre Seite unter verschiedenen Seitenauflösungen auf:

  1. Öffnen Sie die Entwicklertools.
  2. Aktivieren Sie den Gerätemodus. Dieser wird standardmäßig im responsiven Modus geöffnet.
  3. Wenn Sie Ihre Medienabfragen sehen möchten, öffnen Sie das Menü „Gerätemodus“ und wählen Sie Medienabfragen anzeigen aus. Die Seitenaufteilung wird dann als farbige Balken über der Seite angezeigt.
  4. Klicken Sie auf eine der Balken, um die Seite aufzurufen, während diese Medienabfrage aktiv ist. Klicken Sie mit der rechten Maustaste auf einen Balken, um zur Definition dieser Medienabfrage zu gelangen.