Kurz: Webseiten werden auf Handys, Tablets, Laptops und riesigen Monitoren angezeigt. Responsives Design bedeutet: Eine Seite passt sich an jede Bildschirmgröße an. Dazu gehören vier Bausteine.
Teil des Kurses HTML + CSS
Kapitel 21 von 27 im Kurs HTML + CSS. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.
Webseiten werden auf Handys, Tablets, Laptops und riesigen Monitoren angezeigt. Responsives Design bedeutet: Eine Seite passt sich an jede Bildschirmgröße an. Dazu gehören vier Bausteine.
1. Viewport-Meta
Ohne diese Zeile im <head> zeigen Handys die Seite als verkleinerte Desktop-Ansicht:
<meta name="viewport" content="width=device-width, initial-scale=1">2. Flexible Einheiten und Bilder
- Breiten in
%,fr,remoder mitmax-widthstatt fester Pixel - Bilder:
max-width: 100%; height: auto; - Schrift mit
remundclamp()
<style>
.seite { max-width: 700px; margin: auto; padding: 0 1rem; }
img, svg.bild { max-width: 100%; height: auto; display: block; }
h1 { font-size: clamp(1.4rem, 1rem + 2vw, 2.4rem); }
</style>
<div class="seite">
<h1>Passt sich an</h1>
<svg class="bild" width="800" height="200" viewBox="0 0 800 200"><rect width="800" height="200" fill="#a5b4fc"/><text x="400" y="110" text-anchor="middle" font-size="40" fill="#1e1b4b">800 × 200 Bild</text></svg>
<p>Das Bild ist 800 Pixel breit, schrumpft aber mit dem Container.</p>
</div>3. Media Queries
Mit @media gelten Regeln nur unter bestimmten Bedingungen:
<style>
.box { padding: 16px; color: white; background: #dc2626; }
.box::after { content: " (klein: unter 500px)"; }
@media (min-width: 500px) {
.box { background: #16a34a; }
.box::after { content: " (mittel: ab 500px)"; }
}
@media (min-width: 800px) {
.box { background: #2563eb; }
.box::after { content: " (groß: ab 800px)"; }
}
</style>
<div class="box">Ändere die Breite des Ergebnisfensters:</div>Mobile First
Schreibe zuerst das Design für kleine Bildschirme und erweitere es mit min-width für größere. Das ist einfacher, schneller auf Handys und wartbarer.
Übliche Breakpoints (richte sie nach deinem Inhalt, nicht nach Geräten):
| Breakpoint | Typisch für |
|---|---|
| bis 600px | Handy |
| ab 600px | Tablet hochkant |
| ab 900px | Tablet quer / kleiner Laptop |
| ab 1200px | Desktop |
Weitere Bedingungen
@media (max-width: 600px) { ... } /* höchstens 600px breit */
@media (min-width: 600px) and (max-width: 900px) { ... }
@media (orientation: landscape) { ... } /* Querformat */
@media (hover: hover) { ... } /* Gerät kann "hovern" (Maus) */
@media (pointer: coarse) { ... } /* Touch: größere Ziele */
@media (prefers-color-scheme: dark) { ... } /* Dunkelmodus des Systems */
@media (prefers-reduced-motion: reduce) { ... } /* weniger Animation gewünscht */
@media (prefers-contrast: more) { ... } /* höherer Kontrast */
@media print { ... } /* beim Drucken */Dunkelmodus:
<style>
:root { --bg: #ffffff; --text: #111827; --akzent: #2563eb; }
@media (prefers-color-scheme: dark) {
:root { --bg: #0f172a; --text: #e5e7eb; --akzent: #60a5fa; }
}
body { background: var(--bg); color: var(--text); font-family: system-ui, sans-serif; padding: 1rem; }
a { color: var(--akzent); }
</style>
<h2>Hell oder dunkel</h2>
<p>Die Seite folgt der Einstellung deines Systems. <a href="#">Ein Link</a></p>Ein Drucklayout versteckt Navigation und Werbung:
@media print {
nav, .werbung, button { display: none; }
body { font: 12pt/1.4 Georgia, serif; color: black; background: white; }
a::after { content: " (" attr(href) ")"; }
}4. Flexible Layouts
Flexbox und Grid erledigen vieles ohne Media Queries:
<style>
.karten { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr)); }
.karten div { background: #fde68a; padding: 20px; border-radius: 8px; }
</style>
<div class="karten"><div>A</div><div>B</div><div>C</div><div>D</div><div>E</div></div>Typisches Muster: Menü wird zum Burger
<style>
nav { background: #1e293b; }
nav ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
nav a { display: block; padding: 12px 16px; color: white; text-decoration: none; }
nav a:hover { background: #334155; }
@media (min-width: 600px) {
nav ul { flex-direction: row; }
}
</style>
<nav aria-label="Beispiel"><ul><li><a href="#">Start</a></li><li><a href="#">Kurse</a></li><li><a href="#">Kontakt</a></li></ul></nav>
<p>Unter 600px: untereinander, darüber nebeneinander.</p>Container Queries
Media Queries reagieren auf das Fenster. Container Queries reagieren auf die Größe des Elternelements, ideal für wiederverwendbare Komponenten:
<style>
.platz { container-type: inline-size; border: 2px dashed #94a3b8; padding: 8px; resize: horizontal; overflow: auto; width: 380px; max-width: 100%; }
.produkt { display: grid; gap: 8px; background: #e0f2fe; padding: 10px; }
@container (min-width: 320px) {
.produkt { grid-template-columns: 80px 1fr; background: #dcfce7; }
}
</style>
<div class="platz">
<div class="produkt"><div style="background:#0ea5e9;height:60px"></div><div>Produkt: breit genug, daher zweispaltig (ziehe die untere rechte Ecke zum Verkleinern)</div></div>
</div>Touch-Bedienung
- Klickziele mindestens 44 × 44 px groß, mit Abstand
hovernicht als einzigen Weg zu Inhalten (Handys haben kein Hover)- Auf Formularfelder passende
types undinputmodesetzen <meta name="viewport">nie mituser-scalable=noeinschränken (Zoom muss möglich bleiben)
Testen
- Browser-Entwicklerwerkzeuge (
F12), dann Geräte-Symbol: Größen und Geräte simulieren - Fenster verkleinern; Zoom auf 200 %
- Auf echten Handys testen
- Hoch- und Querformat prüfen
Merke
- Viewport-Meta, flexible Einheiten und
max-width: 100%für Bilder - Mobile First: Basis für klein,
@media (min-width: ...)für groß - Breakpoints nach dem Inhalt setzen, nicht nach Geräten
- Grid mit
auto-fit/minmaxund Flexbox mitwrapreduzieren Media Queries prefers-color-schemeundprefers-reduced-motionrespektieren- Container Queries passen Komponenten an ihren Platz an
Übungsaufgabe
Mache eine Seite mit Kopf, Karten und Fuß responsiv: einspaltig auf dem Handy, mehrspaltig am Desktop, mit Dunkelmodus.
Quiz zur Selbstkontrolle
Was bedeutet Mobile First?
- Zuerst das Design für kleine Bildschirme schreiben, dann mit min-width erweitern (richtig)
- Nur für Handys entwickeln
- Handy-Apps bauen
- Desktop zuerst
Was ist die Aufgabe des Viewport-Meta-Tags?
- Die richtige Skalierung auf Handys (richtig)
- Bilder zu verkleinern
- Schriften zu laden
- Cookies zu setzen
Worauf reagiert eine Container Query?
- Auf die Größe des Elternelements (richtig)
- Auf die Fenstergröße
- Auf die Bildschirmauflösung
- Auf die Farbe
Weiter im Kurs
Zurück: Layout mit CSS Grid
Weiter: CSS-Variablen und Funktionen
Alle Kapitel: HTML + CSS im Überblick