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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Viewport | der Bereich des Bildschirms, in dem die Seite gezeichnet wird | |
| Responsiv | ein Layout, das sich an die Breite des Bildschirms anpasst | |
| Media Query | eine CSS-Regel, die nur gilt, wenn eine Bedingung stimmt | @media (min-width: 600px) |
| Breakpoint | die Breite, bei der sich das Layout ändert | |
| Mobile First | erst das Layout für das Telefon, dann Regeln für größere Bildschirme | |
| CSS-Pixel | die 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
<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
docker exec jupyter ls appHier 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
docker exec jupyter python3 steps/viewport.pyHier 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
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, Breite | min-width: 600px | min-width: 900px |
|---|---|---|
| Smartphone, 360 px | gilt nicht | gilt nicht |
| Tablet hochkant, 768 px | gilt | gilt nicht |
| Laptop, 1280 px | gilt | gilt |
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
docker exec jupyter python3 steps/breakpoints.pyHier 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.