Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Responsives Layout mit Viewport und Media Queries

Nach dieser Lektion: Ich kann eine Seite so bauen, dass sie auf jede Bildschirmbreite passt, und sagen, welche Media Query bei einer Breite gilt.

Lektion, 55 Min.3 BefehleLab für das mobile Web: eine responsive, installierbare Web-App im Browser bauen

Wie passt sich eine Webseite jedem Bildschirm an?

Responsives Webdesign heißt, dass sich eine Webseite an die Breite des Bildschirms anpasst: Dieselbe Seite passt auf ein Smartphone, ein Tablet und einen Laptop. Wer das Viewport-Tag und Media Queries versteht, baut etwa einen Mensaplan, der auf dem Telefon lesbar ist, ohne dass jemand zoomen muss.

Dieses Modul behandelt mobile Web-Apps, also Seiten und Skripte im Browser. Werkzeuge für native Apps, etwa ein Emulator oder ein App-Store, gehören nicht dazu.

Am Ende dieser Lektion

Notiz

Ich kann eine Seite so bauen, dass sie auf jede Bildschirmbreite passt, und sagen, welche Media Query bei einer Breite gilt.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Viewportder Bereich des Bildschirms, in dem die Seite gezeichnet wird
Responsivein Layout, das sich an die Breite des Bildschirms anpasst
Media Queryeine CSS-Regel, die nur gilt, wenn eine Bedingung stimmt@media (min-width: 600px)
Breakpointdie Breite, bei der sich das Layout ändert
Mobile Firsterst das Layout für das Telefon, dann Regeln für größere Bildschirme
CSS-Pixeldie Einheit px in CSS, unabhängig davon, wie fein der Bildschirm ist

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ohne Viewport-Tag zeichnet das Telefon die Seite klein

Ein Telefon kennt nicht von sich aus die Absicht Ihrer Seite. Fehlt eine Angabe, zeichnet es die Seite so, als wäre der Bildschirm viel breiter, oft rund 980 Pixel. Dann verkleinert es alles.

Das Ergebnis kennen Sie: winzige Schrift, die Sie mit zwei Fingern aufziehen müssen. Ein einziges meta-Tag im Kopf der Seite löst das.

Das Viewport-Tag im Kopf der Seite

Code: web
<meta name="viewport" content="width=device-width, initial-scale=1">
<h1>Mensaplan</h1>
<p>Heute: Gemüsecurry mit Reis, 3,20 Euro.</p>

Was width=device-width und initial-scale=1 bedeuten

width=device-width sagt: Zeichne die Seite so breit wie der Bildschirm. initial-scale=1 sagt: Beginne ohne Vergrößerung.

Beides zusammen ist die Grundlage jedes responsiven Layouts. Ohne diese Zeile greifen Ihre Media Queries auf dem Telefon nicht so, wie Sie es erwarten.

Das Lab sucht das Viewport-Tag für Sie

Im Lab liegt eine kleine Web-App im Ordner app. Ein Skript liest ihre Seite und sucht das Viewport-Tag. Die Ausgabe des Skripts ist englisch: found heißt gefunden, MISSING heißt fehlt, content ist der Inhalt des Tags, True heißt wahr.

Öffnen Sie danach den Vorschau-Link des Labs in Ihrem eigenen Browser und machen Sie das Fenster schmal.

Den Ordner der Web-App ansehen

Befehl
docker exec jupyter ls app

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Viewport-Tag suchen

Befehl
docker exec jupyter python3 steps/viewport.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Media Queries schalten Regeln bei einer Breite ein

Eine Media Query ist eine CSS-Regel mit einer Bedingung. @media (min-width: 600px) heißt: Die Regeln darin gelten, wenn der Bildschirm mindestens 600 Pixel breit ist.

Es gibt auch max-width, also höchstens so breit. Eine Query kann auch etwas anderes fragen, etwa prefers-color-scheme: dark, die Vorliebe für einen dunklen Modus. Das ist dann keine Breite.

Prüfen, ob eine min-width-Query gilt

Code: python
abfragen = ["(min-width: 600px)", "(min-width: 900px)"]
breite = 700

for abfrage in abfragen:
    # Zahl zwischen dem Doppelpunkt und px herausholen
    zahl = int(abfrage.split(":")[1].replace("px)", "").strip())
    print(abfrage, "gilt" if breite >= zahl else "gilt nicht")
# Ändern Sie breite auf 950 und starten Sie noch einmal.

Ein Beispiel: welche Regeln gelten bei welcher Breite

Gerät, Breitemin-width: 600pxmin-width: 900px
Smartphone, 360 pxgilt nichtgilt nicht
Tablet hochkant, 768 pxgiltgilt nicht
Laptop, 1280 pxgiltgilt

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Das Lab zählt die Media Queries der Web-App

Das nächste Skript liest die Stylesheet-Datei und listet jede Media Query. Es gibt -> width und die Zahl aus, wenn die Query eine Breite nennt, sonst not a width, a preference, also keine Breite, eine Vorliebe.

Schätzen Sie vorher: Wie viele Queries hat die App, und welche Breiten kommen vor?

Die Media Queries der App auflisten

Befehl
docker exec jupyter python3 steps/breakpoints.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Mobile First: die einfachen Regeln sind das Telefon

Bei Mobile First schreiben Sie zuerst die Regeln ohne Query. Sie gelten für das Telefon: eine Spalte, volle Breite. Danach fügen Sie mit min-width Regeln für größere Bildschirme hinzu.

Das Gegenteil ist Desktop First mit max-width. Es zwingt das Telefon, viele Regeln wieder zurückzunehmen, und lädt oft mehr als nötig.

Ein häufiger Fehler

Warnung

Viele denken, ein Breakpoint gehöre zu einem bestimmten Gerät, etwa zu einem Telefonmodell. Geräte ändern sich jedes Jahr. Setzen Sie einen Breakpoint dort, wo Ihr Inhalt schlecht aussieht, und nicht bei einer Gerätebreite.

Über dieses Lab und seinen Quellcode: Lab für das mobile Web: eine responsive, installierbare Web-App im Browser bauen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.