Modul 05 · Doppelstunde 3

CSS-Layout vertieft

Flexbox-Feinheiten, CSS Grid und Responsive Design — die drei Werkzeuge, mit denen professionelle Layouts entstehen.

Modul 01

Flexbox vertieft

In A4 habt ihr die Basics kennengelernt: display: flex, justify-content, align-items. Jetzt geht es ans Eingemachte: Wie verhalten sich die einzelnen Kinder im Flex-Container?

flex-grow

Bestimmt, wie viel Platz ein Element vom verfügbaren Restplatz bekommt.

↓ Klick für Details

Standardwert: 0 — das Element wächst nicht.

Setzt man flex-grow: 1 auf alle Kinder, teilen sie den Restplatz gleichmäßig. Ein Kind mit flex-grow: 2 bekommt doppelt so viel Restplatz wie eines mit flex-grow: 1.

Merke: flex-grow verteilt nur den übrigen Platz — nicht die Gesamtbreite!

flex-shrink

Bestimmt, wie stark ein Element schrumpft, wenn der Container zu klein wird.

↓ Klick für Details

Standardwert: 1 — Elemente schrumpfen gleichmäßig.

Mit flex-shrink: 0 verhinderst du, dass ein Element schrumpft (z.B. für eine fixe Sidebar). flex-shrink: 2 schrumpft doppelt so schnell wie flex-shrink: 1.

Typisch: Navigation mit fester Breite (shrink: 0) + Inhaltsbereich (shrink: 1).

flex-basis

Die „ideale Startgröße" eines Elements, bevor grow/shrink greifen.

↓ Klick für Details

Standardwert: auto — nutzt die natürliche Breite (Inhalt oder width).

Man kann z.B. flex-basis: 300px setzen — das Element startet bei 300px und wird dann per grow/shrink angepasst.

Die Kurzform flex: 1 1 300px bedeutet: grow=1, shrink=1, basis=300px.

flex (Shorthand)

Die Kurzschreibweise für grow, shrink und basis in einer Zeile.

↓ Klick für Details

flex: 1 = flex: 1 1 0% — wächst und schrumpft gleichmäßig, Startgröße 0.

flex: 0 0 250px — fixe 250px, wächst und schrumpft nicht.

flex: 2 1 auto — bekommt doppelten Restplatz, schrumpft normal, Startgröße = Inhalt.

Pro-Tipp: In der Praxis nutzt man fast immer die Shorthand statt der Einzeleigenschaften.

🧪 Flex-Kinder Playground

Ändere flex-grow, flex-shrink und flex-basis für jedes Kind und sieh, wie sich das Layout verändert.

Flexbox-Challenges

Versuche zuerst, die Lösung im Kopf zu finden — dann deckst du auf.

Challenge 1: Holy Grail Layout

Drei Spalten: Sidebar (200px fix), Hauptinhalt (wächst), Sidebar rechts (150px fix). Wie sieht das CSS für die drei Kinder aus?

Sidebar L
Hauptinhalt
Sidebar R
/* Sidebar links */
flex: 0 0 200px;

/* Hauptinhalt */
flex: 1 1 auto;

/* Sidebar rechts */
flex: 0 0 150px;

Challenge 2: Gleichmäßig + Doppelt

Vier Boxen. Box 3 soll doppelt so viel Restplatz bekommen wie die anderen. Alle sollen bei 100px starten.

1
2
3
4
/* Box 1, 2, 4 */
flex: 1 1 100px;

/* Box 3 (doppelter Anteil) */
flex: 2 1 100px;
Modul 02

CSS Grid

Flexbox ist eindimensional — eine Achse. CSS Grid arbeitet zweidimensional: Zeilen und Spalten gleichzeitig. Damit baut man komplexe Seitenlayouts, die mit Flexbox allein schwierig wären.

Flexbox

  • Eindimensional (Zeile oder Spalte)
  • Inhalt bestimmt die Größe
  • Ideal für Navigationen, Toolbars
  • Kinder verteilen sich entlang einer Achse
  • Einfacher für kleine Komponenten

Grid

  • Zweidimensional (Zeilen und Spalten)
  • Container bestimmt die Größe
  • Ideal für Seitenlayouts, Dashboards
  • Kinder werden in Zellen platziert
  • Mächtiger für komplexe Strukturen

Die wichtigsten Grid-Eigenschaften

grid-template-columns

Definiert Anzahl und Breite der Spalten.

↓ Klick für Details

grid-template-columns: 200px 1fr 1fr — eine fixe Spalte (200px) + zwei flexible.

grid-template-columns: repeat(3, 1fr) — drei gleichbreite Spalten.

fr = „fraction" — teilt den verfügbaren Platz proportional auf.

grid-template-rows

Definiert die Höhe der Zeilen.

↓ Klick für Details

grid-template-rows: 80px auto 60px — Header (80px), Inhalt (passt sich an), Footer (60px).

Mit minmax(100px, auto) setzt man eine Mindest- und Maximalhöhe.

gap

Abstand zwischen Zeilen und Spalten.

↓ Klick für Details

gap: 16px — gleicher Abstand überall.

gap: 20px 10px — 20px zwischen Zeilen, 10px zwischen Spalten.

Funktioniert auch bei Flexbox! Ersetzt margin-Hacks.

grid-column / grid-row

Bestimmt, welche Zellen ein Element einnimmt.

↓ Klick für Details

grid-column: 1 / 3 — spannt von Linie 1 bis Linie 3 (= 2 Spalten).

grid-column: span 2 — kürzer: „nimm 2 Spalten ein".

grid-row: 1 / -1 — von der ersten bis zur letzten Zeile.

🧪 Grid-Playground

Verändere Spalten, Zeilen und Gap — sieh sofort, wie sich das Grid anpasst.

1
2
3
4
5
6

Grid Areas — Layout mit Namen

Statt mit Zeilennummern zu arbeiten, kannst du Bereiche benennen — wie ein Grundriss:

display: grid;
grid-template-columns: 200px 1fr;
grid-template-rows: 60px auto 40px;
grid-template-areas:
  "header header"
  "sidebar main"
  "footer footer";

/* Kinder zuweisen: */
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }
header
sidebar
main
footer

auto-fit vs. auto-fill

Für responsive Grids ohne Media Queries — die magische Zeile:

grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));

/* Erstellt so viele Spalten wie reinpassen, mindestens 250px breit.
   auto-fit: leere Spalten kollabieren → Elemente dehnen sich.
   auto-fill: leere Spalten bleiben → Elemente bleiben bei minmax. */
Modul 03

Responsive Design

Eine Website muss auf dem Handy genauso gut funktionieren wie auf dem Desktop. Responsive Design passt das Layout automatisch an — mit Media Queries, flexiblen Einheiten und cleverem CSS.

Die Mobile-First-Strategie

Basis-CSS für Mobile
@media (min-width: 640px)
@media (min-width: 1024px)
Desktop-Ansicht

Man schreibt zuerst das CSS für die kleinste Ansicht, dann erweitert man per min-width nach oben. Das ist effizienter, weil Mobile weniger Regeln braucht.

Media Queries

CSS-Regeln, die nur unter bestimmten Bedingungen gelten.

↓ Klick für Details

@media (min-width: 640px) { ... } — ab 640px Breite aktiv.

@media (max-width: 1024px) { ... } — bis 1024px aktiv.

Man kann auch kombinieren: @media (min-width: 640px) and (max-width: 1024px)

Typische Breakpoints: 480px (Phone), 640px (Tablet), 1024px (Desktop).

Flexible Einheiten

rem, em, vw, vh, % — statt starrer Pixelwerte.

↓ Klick für Details

rem — relativ zur Schriftgröße von <html> (meist 16px).

vw / vh — 1% der Viewport-Breite / -Höhe.

% — relativ zum Elternelement.

clamp(1rem, 4vw, 3rem) — Minimum, Ideal, Maximum in einer Zeile!

Viewport Meta-Tag

Ohne dieses Tag funktioniert Responsive auf dem Handy nicht.

↓ Klick für Details

<meta name="viewport" content="width=device-width, initial-scale=1.0">

Sagt dem Browser: „Nutze die echte Bildschirmbreite, nicht eine simulierte Desktop-Breite."

Fehlt in A1 — aber ihr habt ihn alle schon in euren Dateien!

Live-Demo: Responsive Grid

Klicke auf die Ansichten und beobachte, wie das gleiche Grid reagiert:

Card 1
Card 2
Card 3
Card 4
/* Mobile First: Basis */
.grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
}

/* Tablet */
@media (min-width: 640px) {
  .grid { grid-template-columns: repeat(2, 1fr); }
}

/* Desktop */
@media (min-width: 1024px) {
  .grid { grid-template-columns: repeat(4, 1fr); }
}
Interaktive Aufgabe

Sortieraufgabe: CSS-Spezifikation

Ordne die CSS-Layout-Methoden nach ihrer Einführung in den CSS-Standard — von der ältesten zur neuesten.

display: inline-block (CSS 2.1)
CSS Grid (2017)
float + clear (CSS 1, 1996)
Subgrid (2019+)
Flexbox (2012)

Quiz: Layout-Profis

7 Fragen — teste dein Wissen aus dieser Einheit.

Nachschlagen

Glossar Flip-Karten

Klicke auf eine Karte, um die Definition aufzudecken.

flex-grow klicken Bestimmt, wie viel vom verfügbaren Restplatz ein Flex-Kind bekommt. Standard: 0.
fr (fraction) klicken Eine Grid-Einheit, die den verfügbaren Platz proportional aufteilt. 2fr = doppelt so viel wie 1fr.
Media Query klicken CSS-Regel, die nur unter bestimmten Bedingungen (z.B. Bildschirmbreite) aktiv wird. Syntax: @media (Bedingung) { ... }
grid-template-areas klicken Ermöglicht benannte Bereiche im Grid. Man zeichnet das Layout quasi als ASCII-Art im CSS.
Mobile First klicken Designstrategie: Zuerst für kleine Bildschirme entwickeln, dann per min-width nach oben erweitern.
auto-fit klicken Grid-Funktion in repeat(): Erstellt so viele Spalten wie passen. Leere Spuren kollabieren, sodass Elemente sich dehnen.

Diskussion

„Öffnet eure bisherigen JIA-Projekte und die DevTools (F12). Findet heraus: Wo würde ein Grid-Layout euren Code vereinfachen? Refactored eine Stelle von Flexbox zu Grid — oder umgekehrt. Begründet eure Entscheidung."