Skip to content

Kapitel 15: Fortgeschrittene Techniken

🎯 Lernziele

In diesem Kapitel lernen Sie:

  • minmax() fortgeschritten verwenden
  • fit-content() verstehen
  • ✅ CSS Grid subgrid verwenden
  • ✅ masonry Layout mit Grid simulieren

15.1 minmax() fortgeschritten

📖 Grundlegende Syntax

css
.element {
  grid-template-columns: minmax(Min, Max);
}

💻 Beispiel 1: Responsives Grid mit minmax()

CSS:

css
.container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 20px;
}

Erklärung:

  • auto-fit: So viele Spalten wie möglich erstellen
  • minmax(250px, 1fr): Jede Spalte mindestens 250px, maximal 1fr (gleicher Anteil)
  • Ergebnis: Responsives Grid, das sich automatisch anpasst

💻 Beispiel 2: minmax() mit auto

CSS:

css
.container {
  display: grid;
  grid-template-columns: minmax(100px, auto) 1fr;
  gap: 20px;
}

Erklärung:

  • Erste Spalte: mindestens 100px, kann wachsen basierend auf Inhalt (auto)
  • Zweite Spalte: nimmt restlichen Platz ein (1fr)

💻 Beispiel 3: minmax() für Zeilenhöhe

CSS:

css
.container {
  display: grid;
  grid-template-rows: minmax(100px, auto) minmax(200px, 1fr);
  gap: 20px;
}

Erklärung:

  • Erste Zeile: mindestens 100px, passt sich Inhalt an (auto)
  • Zweite Zeile: mindestens 200px, kann wachsen (1fr)

15.2 fit-content() Funktion

📖 Definition

fit-content() macht eine Spalte oder Zeile so breit/hoch wie nötig, aber nicht breiter/höher als angegebener Maximalwert.

💻 Syntax

css
.container {
  grid-template-columns: fit-content(500px) 1fr;
}

💻 Beispiel

HTML:

html
<div class="container">
  <div class="sidebar">Sidebar mit langem Text...</div>
  <div class="main">Main Content</div>
</div>

CSS:

css
.container {
  display: grid;
  /* Sidebar: so breit wie nötig, max 500px */
  grid-template-columns: fit-content(500px) 1fr;
  gap: 20px;
}

.sidebar {
  background-color: #ecf0f1;
  padding: 20px;
}

.main {
  background-color: #3498db;
  color: white;
  padding: 20px;
}

Verhalten:

  • Wenn Sidebar-Inhalt < 500px breit ist → Sidebar is so breit wie Inhalt
  • Wenn Sidebar-Inhalt > 500px breit ist → Sidebar is 500px breit (Text umbrecht)

15.3 CSS Grid subgrid

📖 Definition

subgrid erlaubt einem verschachtelten Grid, die Spalten/Zeilen seines Elternelements zu übernehmen.

⚠️ Wichtig

subgrid wird derzeit (2026) nur von Firefox vollständig unterstützt. Chrome und Safari sind in der Entwicklung.

💻 Syntax

Eltern-Grid:

css
.parent {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(2, 100px);
}

Kind-Grid (subgrid):

css
.child {
  display: grid;
  grid-columns: subgrid;  /* Übernimmt Spalten vom Eltern-Grid */
  grid-rows: subgrid;     /* Übernimmt Zeilen vom Eltern-Grid */
  grid-column: 1 / -1;    /* Spannt über alle Spalten */
  grid-row: 1 / -1;       /* Spannt über alle Zeilen */
}

💻 Beispiel

HTML:

html
<div class="parent">
  <div class="child">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
  </div>
</div>

CSS:

css
.parent {
  display: grid;
  grid-template-columns: repeat(3, 100px);
  grid-template-rows: repeat(2, 100px);
  gap: 10px;
  background-color: #f0f0f0;
  padding: 20px;
}

.child {
  display: grid;
  grid-columns: subgrid;
  grid-rows: subgrid;
  grid-column: 1 / -1;
  grid-row: 1 / -1;
  gap: 10px;
}

.item {
  background-color: #3498db;
  color: white;
  padding: 20px;
  text-align: center;
}

Ergebnis:

  • .child verwendet dieselben Spalten und Zeilen wie .parent
  • Elemente innerhalb von .child richten sich nach dem Eltern-Grid aus

15.4 Masonry Layout mit Grid simulieren

📖 Was ist Masonry Layout?

Masonry Layout (wie bei Pinterest) ordnet Elemente so an, dass sie vertikal so wenig Leerraum wie möglich lassen.

⚠️ Wichtig

CSS Grid hat kein natives masonry Schlüsselwort (noch nicht standardisiert). Aber wir können es simulieren!

💻 Methode 1: grid-auto-flow: dense

CSS:

css
.container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: 100px;  /* Feste Zeilenhöhe */
  grid-auto-flow: dense;     /* Füllt Lücken auf */
  gap: 20px;
}

HTML:

html
<div class="container">
  <div class="item item1">1 (2 Zeilen hoch)</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
</div>

CSS (für das höhere Element):

css
.item1 {
  grid-row: span 2;  /* Spannt über 2 Zeilen */
}

Ergebnis:

  • grid-auto-flow: dense füllt Lücken automatisch auf
  • Elemente werden nach oben geschoben, um Leerraum zu vermeiden

💻 Methode 2: JavaScript-Bibliothek verwenden

Für echtes Masonry Layout verwenden Sie besser eine JavaScript-Bibliothek:

Empfehlungen:

  1. Masonry.js: https://masonry.desandro.com/
  2. CSS Columns (einfacher, aber weniger flexibel):
    css
    .container {
      column-count: 4;
      column-gap: 20px;
    }
    
    .item {
      break-inside: avoid;
      margin-bottom: 20px;
    }

15.5 grid-auto-flow richtig verwenden

📖 Definition

grid-auto-flow bestimmt, wie automatisch platzierte Elemente im Grid angeordnet werden.

💻 Syntax

css
.container {
  grid-auto-flow: row | column | row dense | column dense;
}

📊 Vergleich

WertVerhalten
row (Standard)Elemente werden in Zeilen angeordnet (von links nach rechts, dann neue Zeile)
columnElemente werden in Spalten angeordnet (von oben nach unten, dann neue Spalte)
row denseWie row, aber füllt Lücken auf
column denseWie column, aber füllt Lücken auf

💻 Beispiel

CSS:

css
.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-flow: row dense;  /* Füllt Lücken auf */
  gap: 20px;
}

HTML:

html
<div class="container">
  <div class="item">1</div>
  <div class="item item2">2 (2 Spalten breit)</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
</div>

CSS (für das breitere Element):

css
.item2 {
  grid-column: span 2;  /* Spannt über 2 Spalten */
}

Ohne dense:

┌────┬────┬────┐
│ 1  │ 2      │  ← Lücke bei 3
├────┼────┼────┤
│ 3  │ 4  │ 5  │
└────┴────┴────┘

Mit dense:

┌────┬────┬────┐
│ 1  │ 2      │
├────┼────┼────┤
│ 3  │ 4  │ 5  │  ← 3 rutscht nach oben
└────┴────┴────┘

15.6 Praktische Übung: Fortgeschrittene Techniken

🎯 Übungsziel

Erstellen Sie ein Layout mit minmax(), fit-content() und grid-auto-flow: dense.

📝 Schritt 1: HTML erstellen

html
<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <title>Fortgeschrittene Grid Techniken</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <div class="container">
    <div class="item item1">1 (2 Zeilen hoch)</div>
    <div class="item item2">2 (2 Spalten breit)</div>
    <div class="item">3</div>
    <div class="item">4</div>
    <div class="item">5</div>
    <div class="item">6</div>
    <div class="item">7</div>
    <div class="item">8</div>
  </div>
</body>
</html>

📝 Schritt 2: CSS erstellen

css
/* style.css */

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: Arial, sans-serif;
  padding: 20px;
}

.container {
  display: grid;
  /* Fortgeschritten: minmax() mit auto-fit */
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  grid-auto-rows: minmax(100px, auto);  /* Zeilenhöhe passt sich an */
  grid-auto-flow: dense;  /* Füllt Lücken auf */
  gap: 20px;
}

.item {
  background-color: #3498db;
  color: white;
  padding: 40px;
  text-align: center;
  font-size: 24px;
  border-radius: 8px;
}

/* Höheres Element */
.item1 {
  grid-row: span 2;  /* Spannt über 2 Zeilen */
  background-color: #e74c3c;
}

/* Breiteres Element */
.item2 {
  grid-column: span 2;  /* Spannt über 2 Spalten */
  background-color: #2ecc71;
}

🔍 Schritt 3: Ergebnis beobachten

Was passiert ist:

  1. repeat(auto-fit, minmax(200px, 1fr)): Responsives Grid
  2. grid-auto-rows: minmax(100px, auto): Zeilen sind mindestens 100px hoch, passen sich aber an Inhalt an
  3. grid-auto-flow: dense: Lücken werden automatisch gefüllt
  4. .item1 und .item2 sind größer als andere Elemente

15.7 Häufige Fehler bei fortgeschrittenen Techniken

❌ Fehler 1: subgrid wird nicht unterstützt

Problem: subgrid funktioniert nicht in Chrome/Safari.

Lösung:

css
/* Fallback für Browser ohne subgrid Unterstützung */
.child {
  display: grid;
  grid-template-columns: repeat(3, 1fr);  /* Muss manuell angepasst werden */
}

/* Moderne Browser */
@supports (grid-template-columns: subgrid) {
  .child {
    grid-template-columns: subgrid;
  }
}

❌ Fehler 2: fit-content() wird falsch verstanden

Falsche Annahme:

css
.container {
  grid-template-columns: fit-content(500px) 1fr;
  /* Denkt: Erste Spalte ist immer 500px breit */
}

Tatsächliches Verhalten:

  • Erste Spalte ist so breit wie ihr Inhalt, aber maximal 500px

Richtig:

css
.container {
  grid-template-columns: minmax(100px, 500px) 1fr;
  /* Erste Spalte: mindestens 100px, maximal 500px */
}

❌ Fehler 3: grid-auto-flow: dense verursacht Lesereihenfolge-Probleme

Problem: dense kann die visuelle Reihenfolge von der DOM-Reihenfolge abweichen lassen.

Für Screenreader schlecht!

Lösung:

  • Verwenden Sie dense nur für rein visuelle Layouts (z.B. Bildergalerien)
  • Für interaktive Elemente: grid-auto-flow: row (Standard) beibehalten

📝 Zusammenfassung

In diesem Kapitel haben Sie gelernt:

minmax() fortgeschritten:

  • minmax(250px, 1fr) für responsive Grids
  • minmax(100px, auto) für Zeilenhöhe

fit-content():

  • Spalten/Zeilen so breit wie nötig, aber mit Maximalwert
  • fit-content(500px)

subgrid:

  • Übernimmt Grid-Definitionen vom Elternelement
  • Noch nicht vollständig unterstützt

Masonry Layout simulieren:

  • grid-auto-flow: dense verwenden
  • Oder JavaScript-Bibliothek verwenden

grid-auto-flow:

  • row (Standard): Zeilenweise Anordnung
  • column: Spaltenweise Anordnung
  • dense: Füllt Lücken auf

Praktische Übung:

  • Layout mit fortgeschrittenen Techniken erstellt

Häufige Fehler:

  • subgrid Browser-Unterstützung
  • fit-content() Missverständnisse
  • dense und Accessibility

🎯 Nächste Schritte

Im nächsten Kapitel lernen Sie:

  • 📖 Grid Layout Interviewfragen beantworten
  • 🎯 Häufige Prüfungsaufgaben lösen
  • 🛠️ Best Practices für Grid Layout

👉 Weiter zu Kapitel 16: Interviewfragen


💡 Tipps für fortgeschrittene Techniken

  1. Verwenden Sie minmax(): Unverzichtbar für responsive Design
  2. Testen Sie subgrid in Firefox: Beste Implementierung
  3. Seien Sie vorsichtig mit dense: Accessibility beachten!
  4. Verwenden Sie fit-content() sparsam: Kann unvorhersehbare Ergebnisse liefern
  5. Fallback für alte Browser: Verwenden Sie @supports Abfragen

Viel Erfolg beim Grid-Lernen! 🚀

Frei für alle Anfänger