Was ist Responsive Design?
Responsive Design ist der Ansatz, ein einziges Layout zu erstellen, das sich an jeden Bildschirm anpasst. Anstatt eine separate mobile Seite zu bauen, schreiben Sie ein fluides Basis-Layout, fügen Breakpoints hinzu, an denen sich die Struktur ändern muss, und lassen Medien schrumpfen oder wachsen, um optimal zu passen.
Es hat sich als Standard durchgesetzt, weil es schlichtweg besseres Engineering ist: eine Codebase, ein Satz an Inhalten und eine einzige URL für das Ranking und zum Teilen. Modernes CSS — Flexbox, Grid, fluide Einheiten und Container Queries — macht die Umsetzung einfacher als je zuvor.
Der Viewport-Tag
Alles beginnt mit dem Viewport-Meta-Tag.
<!-- index.html -->
<meta name="viewport" content="width=device-width, initial-scale=1" />
Ohne diesen Tag nehmen mobile Browser eine Viewport-Breite für Desktops an und zoomen heraus, wodurch Texte winzig werden und deine Breakpoints nicht mehr funktionieren. Mit dem Tag entspricht die CSS-Pixelbreite dem Gerät, sodass Media Queries vorhersehbar reagieren.
Mobile-first
Schreibe deine Basis-Styles für kleine Bildschirme und erweitere sie anschließend für größere Displays mithilfe von min-width.
/* mobile-first.css */
.grid {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
}
@media (min-width: 768px) {
.grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (min-width: 1024px) {
.grid {
grid-template-columns: repeat(3, 1fr);
}
}
Mobile-first führt tendenziell zu einfacherem CSS: Du fügst Regeln hinzu, während der Bildschirm größer wird, anstatt bestehende Regeln zu überschreiben. Zudem bleibt die Experience auf kleinen Bildschirmen die Baseline – was entscheidend ist, da der Großteil des Traffics über mobile Geräte erfolgt.
Breakpoints
Breakpoints definieren die Stellen, an denen sich das Layout ändern muss, und nicht die Maße eines bestimmten Geräts.
- Verändern Sie langsam die Fenstergröße und achten Sie auf Probleme: zu lange Zeilen, zu schmale Spalten oder kollidierende Elemente.
- Fügen Sie an dem Punkt, an dem das Layout bricht, eine
min-width-Query hinzu. - Verwenden Sie projektweit einen kleinen Satz an Breakpoints, um Konsistenz zu gewährleisten.
- Lassen Sie die
auto-fit- undminmax()-Funktionen von Grid viele Fälle ohne jegliche Query handhaben.
/* auto.css */
.cards {
display: grid;
gap: 1.5rem;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}
Diese einzelne Regel ersetzt mehrere Breakpoints, indem sie so viele Spalten erstellt, wie hineinpassen.
Fluide Einheiten
Fixe Pixelbreiten sind nicht anpassungsfähig. Verwende bevorzugt Einheiten, die skalieren:
%relativ zum Elternelement.remrelativ zur Root-Schriftgröße, ideal für Abstände und Typografie.vw/vhrelativ zum Viewport.frBruchteile des verfügbaren Platzes in Grid.chetwa die Breite eines Zeichens, nützlich für die Zeilenlänge.
/* fluid.css */
.page {
width: min(100% - 2rem, 64rem);
margin-inline: auto;
}
.prose {
max-width: 65ch;
}
h1 {
font-size: clamp(1.75rem, 5vw, 3rem);
}
clamp(min, preferred, max) ist besonders nützlich: Es skaliert mit dem Viewport, unterschreitet aber nie das Minimum und überschreitet nie das Maximum. Damit ersetzt es eine Vielzahl von Media Queries für fluide Typografie und Abstände.
Flexible Medien
Bilder und Videos dürfen niemals über ihren Container hinausragen.
/* media.css */
img,
video {
max-width: 100%;
height: auto;
}
Für eine optimale Performance sollten Sie zudem passend skalierte Bilder mittels srcset und sizes bereitstellen sowie width und height (oder aspect-ratio) setzen, damit das Layout beim Laden nicht springt. Der Web Performance Guide behandelt responsive Bilder ausführlich.
Container Queries
Viewport-Media-Queries zwingen Komponenten dazu, Informationen über die gesamte Seite zu haben. Container Queries ermöglichen es einer Komponente stattdessen, auf ihren eigenen Container zu reagieren.
/* container.css */
.card-list {
container-type: inline-size;
}
.card {
display: grid;
gap: 1rem;
}
@container (min-width: 30rem) {
.card {
grid-template-columns: 8rem 1fr;
}
}
Nun passt sich dieselbe Karte an, egal ob sie in einer schmalen Sidebar oder einer breiten Hauptspalte platziert ist, was Komponenten wirklich wiederverwendbar macht. Die Unterstützung ist mittlerweile breit genug, um sie in der Produktion einzusetzen.
Touch, Targets und Typografie
- Gestalten Sie Tap-Targets mit einer Größe von mindestens 44×44 CSS-Pixeln.
- Halten Sie den Fließtext auf mindestens 16px, damit mobile Browser beim Fokussieren nicht automatisch zoomen.
- Begrenzen Sie die Zeilenlänge auf etwa 45–75 Zeichen, um die Lesbarkeit zu verbessern.
- Vermeiden Sie Interaktionen, die ausschließlich auf Hover basieren; bieten Sie touch-freundliche Alternativen an.
- Testen Sie die Bedienung mit der Tastatur und auf einem echten Gerät, nicht nur in einem verkleinerten Browserfenster.
Testing
- Nutze den Responsive-Modus des Browsers, um verschiedene Breiten schnell zu prüfen.
- Teste auf echten Telefonen; die Emulation bildet die tatsächliche Performance und das Touch-Verhalten nicht vollständig ab.
- Prüfe sowohl den Landscape- als auch den Portrait-Modus.
- Zoome auf 200 % und stelle sicher, dass nichts zerschossen wird.
- Teste lange Inhalte und nicht nur den “Happy Path” mit kurzen Strings.
Best Practices
- Füge immer den Viewport-Meta-Tag hinzu.
- Designe Mobile-First und erweitere das Layout mit
min-width-Queries. - Nutze
auto-fitundminmax()von Grid, um viele Breakpoints zu ersetzen. - Verwende fluide Einheiten und
clamp()für Typografie und Abstände. - Sorge dafür, dass Bilder und Medien mit
max-width: 100%skalieren. - Nutze Container Queries für wiederverwendbare Komponenten.
- Halte Tap-Targets groß und den Fließtext gut lesbar.
Häufige Fehler
- Das Vergessen des Viewport-Meta-Tags.
- Desktop-First-Design und das anschließende Anhäufen von Overrides.
- Die Ausrichtung an spezifischen Geräte-Breakpoints statt an inhaltsgesteuerten Breakpoints.
- Fixe Pixelbreiten, die auf kleinen Bildschirmen zu Overflows führen.
- Interaktionen, die nur auf Hover basieren und auf Touch-Displays nicht funktionieren.
- Tests, die ausschließlich in einem verkleinerten Desktop-Fenster durchgeführt werden.
Wie es weitergeht
Responsive Design ist die Grundlage für jede moderne Benutzeroberfläche. Bau auf den CSS-Grundlagen auf, nutze Flexbox und CSS Grid für das Layout und ergänze CSS Variables für konsistente Abstände und Themes. Nimm dir anschließend eine bekannte Seite vor und skaliere sie langsam vom Smartphone-Format bis zum Desktop-Bildschirm, während du jeden Layout-Bruch Schritt für Schritt behebst.