Das Bootstrap-Grid-System ist ein flexibles, 12-spaltiges Layout-System, das auf CSS Flexbox basiert. Es ermöglicht die Erstellung responsiver Layouts, die sich automatisch an verschiedene Bildschirmgrößen anpassen. Das System besteht aus drei Hauptkomponenten: Containern, Rows (Zeilen) und Columns (Spalten), die in einer hierarchischen Struktur organisiert sind.
Die Wahl von 12 Spalten ist strategisch: 12 ist durch 1, 2, 3, 4, 6 und 12 teilbar, was gleichmäßige Teilungen in verschiedene Spaltenanzahlen ermöglicht. Diese Flexibilität deckt die meisten Layout-Anforderungen ab, ohne komplexe Berechnungen zu erfordern.
Container definieren die maximale Breite des Inhalts und zentrieren ihn horizontal auf der Seite. Bootstrap bietet verschiedene Container-Typen für unterschiedliche Anforderungen.
Der .container hat feste maximale Breiten bei
verschiedenen Breakpoints:
<div class="container">
<p>Feste maximale Breiten: 540px, 720px, 960px, 1140px, 1320px</p>
</div>Die maximalen Breiten sind:
Der .container-fluid nutzt immer 100% der verfügbaren
Breite:
<div class="container-fluid">
<p>Nimmt immer die volle Bildschirmbreite ein</p>
</div>Responsive Container verhalten sich bis zu einem bestimmten Breakpoint fluid und haben darüber hinaus feste Breiten:
<div class="container-sm">Fluid bis Small, dann feste Breite</div>
<div class="container-md">Fluid bis Medium, dann feste Breite</div>
<div class="container-lg">Fluid bis Large, dann feste Breite</div>
<div class="container-xl">Fluid bis Extra Large, dann feste Breite</div>
<div class="container-xxl">Fluid bis Extra Extra Large, dann feste Breite</div>Rows (.row) schaffen horizontale Gruppen von Spalten und
implementieren das negative Margin-System, das das Padding der Container
neutralisiert. Rows sind notwendig, um Spalten korrekt auszurichten.
<div class="container">
<div class="row">
<!-- Spalten kommen hier hinein -->
</div>
</div>Rows verwenden display: flex, wodurch alle direkten
Kindelemente (Spalten) zu Flex-Items werden. Dies ermöglicht
gleichmäßige Höhenverteilung und flexible Ausrichtung.
Spalten sind die Grundbausteine des Layouts. Sie können auf verschiedene Weise dimensioniert werden und verhalten sich responsiv basierend auf Breakpoint-Klassen.
Alle Spalten benötigen eine Basis-Klasse, die mit col
beginnt:
<div class="container">
<div class="row">
<!-- Gleichmäßige automatische Verteilung -->
<div class="col">Automatische Breite</div>
<div class="col">Automatische Breite</div>
<!-- Feste Spaltenanzahl (von 12) -->
<div class="col-4">4 von 12 Spalten</div>
<div class="col-8">8 von 12 Spalten</div>
</div>
</div>Spalten können unterschiedliche Breiten bei verschiedenen Bildschirmgrößen haben:
<div class="container">
<div class="row">
<!-- Responsive Spalte: Mobile volle Breite, Desktop ein Drittel -->
<div class="col-12 col-md-4">
<p>Mobile: 12/12 (100%), Desktop: 4/12 (33%)</p>
</div>
<div class="col-12 col-md-8">
<p>Mobile: 12/12 (100%), Desktop: 8/12 (67%)</p>
</div>
</div>
</div>Bootstrap definiert sechs Breakpoints für verschiedene Gerätetypen:
Breakpoint-Klassen gelten ab ihrer definierten Größe und vererben sich nach oben, bis sie von einer größeren Breakpoint-Klasse überschrieben werden:
<div class="col-sm-6 col-lg-4">
<!--
xs (<576px): col-12 (Standard, da nicht definiert)
sm (≥576px): col-sm-6 (6 von 12 Spalten)
md (≥768px): col-sm-6 (vererbt von sm)
lg (≥992px): col-lg-4 (4 von 12 Spalten)
xl+ (≥1200px): col-lg-4 (vererbt von lg)
-->
</div>Für präzise Kontrolle über Layout-Proportionen:
<div class="container">
<div class="row">
<!-- Sidebar: 25% Breite -->
<div class="col-3">
<div class="bg-light p-3">Sidebar (25%)</div>
</div>
<!-- Hauptinhalt: 75% Breite -->
<div class="col-9">
<div class="bg-secondary text-white p-3">Hauptinhalt (75%)</div>
</div>
</div>
<!-- Dreispaltige Aufteilung -->
<div class="row mt-3">
<div class="col-4">Spalte 1 (33%)</div>
<div class="col-4">Spalte 2 (33%)</div>
<div class="col-4">Spalte 3 (33%)</div>
</div>
</div>Spalten ohne Zahlenangabe teilen sich den verfügbaren Platz gleichmäßig:
<div class="container">
<div class="row">
<!-- Drei Spalten: jede 33.33% breit -->
<div class="col">
<div class="bg-primary text-white p-3">Auto 1</div>
</div>
<div class="col">
<div class="bg-primary text-white p-3">Auto 2</div>
</div>
<div class="col">
<div class="bg-primary text-white p-3">Auto 3</div>
</div>
</div>
</div>Die .col-auto Klasse dimensioniert Spalten basierend auf
ihrem Inhalt:
<div class="container">
<div class="row">
<!-- Logo: nur so breit wie der Inhalt -->
<div class="col-auto">
<div class="bg-dark text-white p-3">Logo</div>
</div>
<!-- Navigation: nimmt restlichen Platz -->
<div class="col">
<div class="bg-secondary text-white p-3">Navigation</div>
</div>
<!-- Login: nur so breit wie der Inhalt -->
<div class="col-auto">
<div class="bg-success text-white p-3">Login</div>
</div>
</div>
</div>Beginnen Sie mit dem Design für kleine Bildschirme und erweitern Sie für größere:
<div class="container">
<div class="row">
<!-- Produktkarten: responsives Grid -->
<div class="col-12 col-sm-6 col-lg-4 col-xl-3">
<div class="card mb-3">
<div class="card-body">
<h5>Produkt 1</h5>
<p>Mobile: 1 pro Zeile, Tablet: 2 pro Zeile, Desktop: 3-4 pro Zeile</p>
</div>
</div>
</div>
<!-- Weitere Produktkarten mit identischer Klassenstruktur -->
<div class="col-12 col-sm-6 col-lg-4 col-xl-3">
<div class="card mb-3">
<div class="card-body">
<h5>Produkt 2</h5>
<p>Konsistentes responsives Verhalten</p>
</div>
</div>
</div>
</div>
</div>Verschiedene Breakpoints für unterschiedliche Layout-Anforderungen:
<div class="container">
<div class="row">
<!-- Hauptinhalt: variable Breite je nach Bildschirmgröße -->
<div class="col-12 col-md-8 col-xl-9">
<article>
<h2>Hauptartikel</h2>
<p>Responsive Inhaltsbereich mit variabler Breite</p>
</article>
</div>
<!-- Sidebar: angepasste Breite -->
<div class="col-12 col-md-4 col-xl-3">
<aside>
<h3>Sidebar</h3>
<p>Komplementäre Inhalte</p>
</aside>
</div>
</div>
</div>Grids können innerhalb von Spalten verschachtelt werden, um komplexere Layouts zu erstellen:
<div class="container">
<div class="row">
<div class="col-8">
<!-- Verschachteltes Grid in einer Spalte -->
<div class="row">
<div class="col-6">
<div class="bg-light p-3">Verschachtelt 1</div>
</div>
<div class="col-6">
<div class="bg-light p-3">Verschachtelt 2</div>
</div>
</div>
</div>
<div class="col-4">
<div class="bg-secondary text-white p-3">Sidebar</div>
</div>
</div>
</div>Wichtig: Verschachtelte Rows können direkt in Spalten platziert werden, ohne zusätzliche Container.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard-Layout</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container-fluid">
<div class="row">
<!-- Sidebar Navigation -->
<div class="col-12 col-md-3 col-lg-2 bg-dark text-white p-0">
<div class="p-3">
<h4>Dashboard</h4>
<nav>
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link text-white" href="#">Übersicht</a>
</li>
<li class="nav-item">
<a class="nav-link text-white" href="#">Analytics</a>
</li>
<li class="nav-item">
<a class="nav-link text-white" href="#">Berichte</a>
</li>
</ul>
</nav>
</div>
</div>
<!-- Hauptinhalt -->
<div class="col-12 col-md-9 col-lg-10">
<!-- Header -->
<div class="row bg-light border-bottom">
<div class="col-12 p-3">
<h1>Dashboard-Übersicht</h1>
</div>
</div>
<!-- Content Area -->
<div class="p-4">
<!-- Statistik-Karten -->
<div class="row mb-4">
<div class="col-12 col-sm-6 col-lg-3 mb-3">
<div class="card text-center">
<div class="card-body">
<h3 class="text-primary">1,234</h3>
<p class="mb-0">Benutzer</p>
</div>
</div>
</div>
<div class="col-12 col-sm-6 col-lg-3 mb-3">
<div class="card text-center">
<div class="card-body">
<h3 class="text-success">€45,678</h3>
<p class="mb-0">Umsatz</p>
</div>
</div>
</div>
<div class="col-12 col-sm-6 col-lg-3 mb-3">
<div class="card text-center">
<div class="card-body">
<h3 class="text-info">567</h3>
<p class="mb-0">Bestellungen</p>
</div>
</div>
</div>
<div class="col-12 col-sm-6 col-lg-3 mb-3">
<div class="card text-center">
<div class="card-body">
<h3 class="text-warning">89%</h3>
<p class="mb-0">Zufriedenheit</p>
</div>
</div>
</div>
</div>
<!-- Charts und Details -->
<div class="row">
<div class="col-12 col-lg-8">
<div class="card">
<div class="card-header">
<h5 class="mb-0">Verkaufs-Chart</h5>
</div>
<div class="card-body">
<div class="bg-light p-5 text-center">
Chart-Platzhalter
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-4">
<div class="card">
<div class="card-header">
<h5 class="mb-0">Aktivitäten</h5>
</div>
<div class="card-body">
<ul class="list-group list-group-flush">
<li class="list-group-item">Benutzer registriert</li>
<li class="list-group-item">Bestellung eingegangen</li>
<li class="list-group-item">Zahlung erhalten</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html><div class="container">
<!-- Filter und Sortierung -->
<div class="row mb-4 align-items-center">
<div class="col-12 col-md-6">
<h2>Produktkatalog</h2>
</div>
<div class="col-12 col-md-6">
<select class="form-select">
<option>Sortieren nach Preis</option>
<option>Sortieren nach Bewertung</option>
<option>Sortieren nach Datum</option>
</select>
</div>
</div>
<!-- Produktgrid -->
<div class="row">
<!-- Produkt 1 -->
<div class="col-12 col-sm-6 col-md-4 col-lg-3 mb-4">
<div class="card h-100">
<div class="card-img-top bg-light d-flex align-items-center justify-content-center" style="height: 200px;">
Produktbild
</div>
<div class="card-body d-flex flex-column">
<h5 class="card-title">Bluetooth Kopfhörer</h5>
<p class="card-text flex-grow-1">Premium Sound-Qualität mit aktiver Geräuschunterdrückung</p>
<div class="d-flex justify-content-between align-items-center">
<span class="h5 text-primary mb-0">€149</span>
<button class="btn btn-primary btn-sm">In den Warenkorb</button>
</div>
</div>
</div>
</div>
<!-- Weitere Produkte mit identischer Struktur -->
<div class="col-12 col-sm-6 col-md-4 col-lg-3 mb-4">
<div class="card h-100">
<div class="card-img-top bg-light d-flex align-items-center justify-content-center" style="height: 200px;">
Produktbild
</div>
<div class="card-body d-flex flex-column">
<h5 class="card-title">Gaming-Maus</h5>
<p class="card-text flex-grow-1">Präzise Gaming-Maus mit programmierbaren Tasten</p>
<div class="d-flex justify-content-between align-items-center">
<span class="h5 text-primary mb-0">€79</span>
<button class="btn btn-primary btn-sm">In den Warenkorb</button>
</div>
</div>
</div>
</div>
<!-- Das Pattern wiederholt sich für alle Produkte -->
</div>
</div><!-- FALSCH: Mehr als 12 Spalten in einer Row -->
<div class="row">
<div class="col-6">Spalte 1</div>
<div class="col-8">Spalte 2</div> <!-- 6 + 8 = 14 > 12 -->
</div>
<!-- Resultat: Ungewollte Zeilenumbrüche -->
<!-- RICHTIG: Spalten summieren sich zu 12 -->
<div class="row">
<div class="col-8">Hauptinhalt</div>
<div class="col-4">Sidebar</div> <!-- 8 + 4 = 12 -->
</div><!-- FALSCH: Spalten direkt im Container -->
<div class="container">
<div class="col-6">Direkt im Container</div>
<div class="col-6">Fehlende Row</div>
</div>
<!-- RICHTIG: Spalten immer in Rows -->
<div class="container">
<div class="row">
<div class="col-6">Korrekt strukturiert</div>
<div class="col-6">Mit Row-Container</div>
</div>
</div><!-- Verwirrend: Was passiert bei md? -->
<div class="col-sm-6 col-lg-4">Unklar bei Medium-Bildschirmen</div>
<!-- Klar: Alle Breakpoints explizit definiert -->
<div class="col-12 col-sm-6 col-md-6 col-lg-4">
Klares Verhalten bei allen Größen
</div><!-- PROBLEM: Unterschiedliche Card-Höhen -->
<div class="row">
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h5>Kurzer Titel</h5>
<p>Kurzer Text</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h5>Sehr langer Titel der mehrere Zeilen umfasst</h5>
<p>Sehr langer Text der die Card höher macht...</p>
</div>
</div>
</div>
</div>
<!-- LÖSUNG: h-100 für gleiche Höhen -->
<div class="row">
<div class="col-md-4">
<div class="card h-100">
<div class="card-body d-flex flex-column">
<h5>Kurzer Titel</h5>
<p class="flex-grow-1">Kurzer Text</p>
<button class="btn btn-primary mt-auto">Button am Ende</button>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100">
<div class="card-body d-flex flex-column">
<h5>Sehr langer Titel der mehrere Zeilen umfasst</h5>
<p class="flex-grow-1">Sehr langer Text...</p>
<button class="btn btn-primary mt-auto">Button am Ende</button>
</div>
</div>
</div>
</div>Zum Debuggen von Grid-Problemen können Sie temporäres CSS verwenden:
<style>
/* Temporäres Debug-CSS */
.debug-grid .container,
.debug-grid .container-fluid {
outline: 2px solid red;
}
.debug-grid .row {
outline: 2px solid blue;
background-color: rgba(0, 0, 255, 0.1);
}
.debug-grid [class*="col-"] {
outline: 2px solid green;
background-color: rgba(0, 255, 0, 0.1);
min-height: 50px;
}
</style>
<!-- Debug-Klasse aktivieren -->
<div class="container debug-grid">
<div class="row">
<div class="col-md-8">Hauptinhalt</div>
<div class="col-md-4">Sidebar</div>
</div>
</div>Testen Sie Ihre Grid-Layouts systematisch:
<div class="container">
<div class="row">
<!-- Spalte mit Offset: lässt 2 Spalten frei, nimmt dann 8 -->
<div class="col-8 offset-2">
<div class="bg-primary text-white p-3">Zentrierte Spalte</div>
</div>
</div>
<!-- Responsive Offsets -->
<div class="row">
<div class="col-6 offset-3 col-md-4 offset-md-4">
<div class="bg-success text-white p-3">Responsive zentriert</div>
</div>
</div>
</div><div class="container">
<div class="row">
<!-- Visuell erste Spalte, aber im HTML zweite -->
<div class="col-6 order-2 order-md-1">
<div class="bg-primary text-white p-3">Erste (responsive)</div>
</div>
<!-- Visuell zweite Spalte, aber im HTML erste -->
<div class="col-6 order-1 order-md-2">
<div class="bg-secondary text-white p-3">Zweite (responsive)</div>
</div>
</div>
</div>Das Bootstrap-Grid-System bietet umfassende Möglichkeiten für responsive Layouts. Durch das Verständnis der Grundprinzipien von Containern, Rows und Columns sowie der Breakpoint-Logik können Sie flexible und professionelle Layouts für alle Gerätetypen erstellen. Die systematische Anwendung dieser Konzepte führt zu konsistenten und wartbaren Code-Strukturen.