Von Lawrence Dauchy
Veröffentlicht am 3. Oktober 2026

Ein Bento Grid mit Tailwind baust du mit CSS Grid, unterschiedlich großen Karten und einer responsiven Spaltenstruktur. Du beginnst mit einer Spalte auf kleinen Bildschirmen und ergänzt auf größeren Displays breite oder hohe Elemente. Entscheidend sind eine klare Reihenfolge, passende Abstände und Karten, deren Größe zum Inhalt passt. Das folgende Beispiel liefert dir eine vollständige React-Komponente für ein bereits eingerichtetes Tailwind-Projekt. Sie kommt ohne zusätzliche Komponentenbibliothek, externe Bilder oder JavaScript für das Layout aus. Anschließend kannst du das Raster für eine Produktseite, ein Portfolio oder ein Dashboard anpassen.
Ein Bento Grid ist ein Kartenlayout, das unterschiedlich große Inhaltsbereiche in einem gemeinsamen Raster verbindet. Eine große Karte setzt den Schwerpunkt, kleinere Karten ergänzen Funktionen, Kennzahlen oder Beispiele.
Der Name erinnert an eine Bento-Box mit mehreren Fächern. Im Webdesign entsteht daraus eine Fläche, auf der jedes Element eine eigene Aufgabe bekommt. Die Karten teilen sich Abstände und Gestaltung, müssen aber nicht dieselbe Größe haben.
Das funktioniert besonders gut, wenn du mehrere Informationen gleichzeitig zeigen möchtest:
Die Kartengröße sollte dabei eine Bedeutung haben. Ein ausführlicher Produktüberblick darf mehr Platz bekommen als ein kurzer Status. Wenn jede Karte gleich laut wirkt, fehlt dem Raster eine erkennbare Hierarchie.
Ein Bento Grid unterscheidet sich außerdem von einem Masonry-Layout. Bei Masonry werden Elemente unterschiedlicher Höhe typischerweise möglichst lückenarm angeordnet. Ein Bento Grid arbeitet meist mit bewusst gesetzten Zeilen, Spalten und Flächen.
Für einen langen Text, eine lineare Anleitung oder ein umfangreiches Formular ist eine normale Seitenstruktur häufig angenehmer. Das Raster lohnt sich, wenn die Inhalte eigenständig verständlich bleiben und gemeinsam einen schnellen Überblick ermöglichen.
Für den Einstieg reichen grid, eine Spaltenanzahl, ein Abstand und responsive Klassen für die einzelnen Karten. Tailwind übersetzt diese Utilities in die entsprechenden CSS-Grid-Eigenschaften.
Die Grundstruktur sieht so aus:
<div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4">
<!-- Karten -->
</div>
grid-cols-1 legt eine Spalte fest. Mit md:grid-cols-2 und lg:grid-cols-4 erweitert sich das Raster an den jeweiligen Breakpoints. Die Karten bleiben dadurch auf schmalen Bildschirmen untereinander lesbar.
Die wichtigsten Klassen für unterschiedlich große Karten sind:
lg:col-span-2 lässt eine Karte ab dem großen Breakpoint zwei Spalten belegen.lg:row-span-2 lässt sie dort zwei Zeilen belegen.gap-4 setzt einen gemeinsamen Abstand zwischen den Karten.min-w-0 hilft, Inhalte innerhalb einer Karte schrumpfen zu lassen.h-full lässt eine innere Fläche die verfügbare Höhe ausfüllen.Spalten- und Zeilenüberspannungen verändern die belegte Fläche einer Karte. Sie legen allerdings nicht automatisch eine sinnvolle Höhe für deren Inhalt fest.
Deshalb ist es hilfreich, zwei Entscheidungen zu trennen: Wie viele Rasterfelder bekommt die Karte, und wie viel Platz braucht ihr Inhalt?
Für eine Funktionsübersicht funktionieren natürliche Höhen oft gut. Für ein bewusst geometrisches Desktoplayout kannst du zusätzlich eine minimale Zeilenhöhe verwenden:
<div
class="grid grid-cols-1 gap-4 md:grid-cols-2
lg:auto-rows-[minmax(180px,auto)] lg:grid-cols-4"
>
<!-- Karten -->
</div>
Damit dürfen die Zeilen bei längeren Inhalten wachsen. Eine starre Höhe würde dagegen schneller zu abgeschnittenen Texten führen.

Die folgende Komponente erstellt fünf Karten: eine große Einführung, zwei kompakte Funktionskarten, eine hohe Ablaufkarte und eine breite Abschlusskarte. Auf kleinen Bildschirmen stehen sie untereinander.
Voraussetzung ist ein React-Projekt mit funktionierender Tailwind-Einbindung. Speichere die Komponente beispielsweise als BentoGrid.jsx und rendere sie auf deiner Seite.
export default function BentoGrid() {
const card =
"min-w-0 rounded-3xl border border-slate-200 " +
"bg-white p-6 shadow-sm sm:p-8";
return (
<main className="min-h-screen bg-slate-50 px-4 py-16 sm:px-6">
<section
aria-labelledby="bento-heading"
className="mx-auto max-w-6xl"
>
<header className="mb-8 max-w-2xl">
<p className="text-sm font-semibold text-indigo-700">
Dein Arbeitsbereich
</p>
<h1
id="bento-heading"
className="mt-3 text-4xl font-semibold tracking-tight
text-slate-950 sm:text-5xl"
>
Mehr Überblick für deine Projekte.
</h1>
<p className="mt-4 text-lg leading-8 text-slate-600">
Aufgaben, Fortschritt und Zusammenarbeit
an einem gemeinsamen Ort.
</p>
</header>
<div
className="grid grid-cols-1 gap-4 md:grid-cols-2
lg:auto-rows-[minmax(180px,auto)]
lg:grid-cols-4"
>
<article
className={`${card} flex flex-col justify-between
md:col-span-2 lg:row-span-2`}
>
<div>
<p className="text-sm font-medium text-indigo-700">
Projekte
</p>
<h2
className="mt-3 text-3xl font-semibold
tracking-tight text-slate-950"
>
Ein Plan, den dein Team versteht.
</h2>
<p className="mt-4 max-w-md leading-7 text-slate-600">
Sammle Aufgaben, halte Entscheidungen fest
und erkenne, was als Nächstes ansteht.
</p>
</div>
<div className="mt-8 rounded-2xl bg-slate-100 p-4">
<p className="text-sm font-semibold text-slate-800">
Beispielprojekt: Website
</p>
<ul className="mt-4 space-y-3 text-sm text-slate-700">
<li className="rounded-xl bg-white p-3">
Inhalte vorbereiten
</li>
<li className="rounded-xl bg-white p-3">
Layout abstimmen
</li>
<li className="rounded-xl bg-white p-3">
Veröffentlichung prüfen
</li>
</ul>
</div>
</article>
<article className={card}>
<p className="text-sm font-medium text-slate-500">
Fokus
</p>
<h2 className="mt-3 text-xl font-semibold text-slate-950">
Klare Prioritäten
</h2>
<p className="mt-3 leading-7 text-slate-600">
Zeige zuerst die Aufgaben,
die dein Projekt weiterbringen.
</p>
</article>
<article
className={`${card} bg-indigo-50 lg:row-span-2`}
>
<p className="text-sm font-medium text-indigo-700">
Ablauf
</p>
<h2 className="mt-3 text-xl font-semibold text-slate-950">
Vom Entwurf zur Freigabe
</h2>
<ol className="mt-6 space-y-5 text-sm text-slate-700">
<li>
<span className="font-semibold">1. Sammeln</span>
<p className="mt-1 leading-6">
Ideen und Anforderungen festhalten.
</p>
</li>
<li>
<span className="font-semibold">2. Umsetzen</span>
<p className="mt-1 leading-6">
Aufgaben verteilen und bearbeiten.
</p>
</li>
<li>
<span className="font-semibold">3. Prüfen</span>
<p className="mt-1 leading-6">
Ergebnisse gemeinsam freigeben.
</p>
</li>
</ol>
</article>
<article className={card}>
<p className="text-sm font-medium text-slate-500">
Zusammenarbeit
</p>
<h2 className="mt-3 text-xl font-semibold text-slate-950">
Weniger Rückfragen
</h2>
<p className="mt-3 leading-7 text-slate-600">
Halte Zuständigkeiten direkt
bei der jeweiligen Aufgabe fest.
</p>
</article>
<article
className={`${card} md:col-span-2 lg:col-span-4`}
>
<div
className="flex flex-col gap-4 sm:flex-row
sm:items-center sm:justify-between"
>
<div>
<h2 className="text-xl font-semibold text-slate-950">
Starte mit einem überschaubaren Projekt.
</h2>
<p className="mt-2 leading-7 text-slate-600">
Ergänze weitere Abläufe,
sobald die Grundstruktur funktioniert.
</p>
</div>
<span
className="self-start rounded-full bg-slate-100
px-4 py-2 text-sm font-medium
text-slate-700"
>
Beispielansicht
</span>
</div>
</article>
</div>
</section>
</main>
);
}
Die Inhalte beschreiben eine fiktive Projektoberfläche. Ersetze sie durch echte Funktionen deines Produkts. Das Beispiel enthält bewusst keine erfundenen Erfolgszahlen und keine Schaltflächen ohne Funktion.
Auf großen Bildschirmen nimmt die erste Karte die linke Hälfte über zwei Zeilen ein. Die Ablaufkarte liegt rechts und ist ebenfalls zwei Zeilen hoch. Die beiden kompakten Karten teilen sich die verbleibende Spalte.
Die Abschlusskarte belegt eine eigene Zeile über die gesamte Breite. Dadurch bleibt der nächste Schritt sichtbar vom Funktionsbereich getrennt.
Ein responsives Bento Grid beginnt mit einer sinnvollen mobilen Reihenfolge. Breite und hohe Karten entstehen erst dort, wo ausreichend Platz vorhanden ist.
Tailwind arbeitet bei seinen normalen Breakpoint-Varianten nach dem Mobile-first-Prinzip: Klassen ohne Präfix gelten grundsätzlich, Varianten wie md: greifen ab dem jeweiligen Breakpoint.
Im Beispiel bedeutet das:
Ein häufiger Fehler ist eine unbedingte Spaltenüberspannung:
<article class="col-span-2">
Inhalt
</article>
In einem einspaltigen Raster kann das zusätzliche implizite Spalten erzeugen. Verwende deshalb ein passendes Präfix, wenn die Karte nur auf größeren Displays breiter sein soll:
<article class="md:col-span-2">
Inhalt
</article>
Prüfe außerdem die Zwischenbreiten. Ein Layout kann auf einem großen Monitor und einem kleinen Smartphone gut aussehen, aber auf einem schmalen Tablet unruhig werden.
Ziehe das Browserfenster langsam schmaler. Achte darauf, wann Überschriften ungünstig umbrechen und Karten zu wenig Platz bekommen. Der passende Breakpoint richtet sich nach deinem Inhalt.
Bei langen deutschen Begriffen helfen ausreichend breite Karten und ein flexibler Textbereich. Kürze wichtige Beschriftungen sinnvoll, statt die Schrift immer kleiner zu machen.
Wenn eine Karte auf Mobilgeräten unverhältnismäßig lang wird, prüfe ihre Aufgabe. Vielleicht gehört ein ausführlicher Ablauf in einen eigenen Abschnitt unterhalb des Rasters.
Aus derselben Grundstruktur kannst du mehrere deutlich unterschiedliche Seiten entwickeln. Ändere zuerst die Inhalte und ihre Gewichtung, anschließend Farben und Dekoration.
Nutze die große Karte für das zentrale Problem, das dein Produkt löst. Die kleineren Karten erklären ergänzende Funktionen.
Eine Terminplanungssoftware könnte beispielsweise so aufgebaut sein:
Die Vorschau sollte einen nachvollziehbaren Vorgang zeigen. Eine Reihe zufälliger Balken wirkt dekorativ, erklärt aber keine Funktion.
Halte Produktversprechen und Darstellung zusammen. Wenn eine Karte „einfache Buchung“ behauptet, sollte ihre Vorschau einen kurzen Buchungsablauf erkennen lassen.
Für ein Portfolio bekommt dein wichtigstes Projekt die größte Fläche. Ergänzende Arbeiten erscheinen kleiner, gefolgt von Fähigkeiten und einer kurzen Vorstellung.
Verwende für jedes Projekt dieselbe Informationsstruktur: Name, Aufgabe und dein konkreter Beitrag. So lassen sich die Arbeiten beim Überfliegen vergleichen.
Bei Bildern solltest du ein bewusstes Seitenverhältnis festlegen. Prüfe außerdem, ob object-cover wichtige Details abschneidet. Ein vollständiger Oberflächenentwurf braucht manchmal eine andere Darstellung als ein atmosphärisches Foto.
Verzichte darauf, jedes Projekt als gleich bedeutend zu präsentieren. Ein Portfolio wird verständlicher, wenn die Auswahl bereits eine Richtung vorgibt.
In einem Dashboard kann die Hauptkarte eine Auswertung enthalten. Kompakte Karten zeigen ergänzende Werte, eine hohe Karte aktuelle Aktivitäten.
Plane dabei auch Zustände ohne fertige Daten:
Ein leeres Dashboard sollte erklären, was als Nächstes zu tun ist. Eine dekorative Null ohne Kontext kann dagegen wie ein Fehler aussehen.
Für umfangreiche Datensätze brauchst du zusätzlich geeignete Detailansichten. Das Bento Grid eignet sich als Einstieg in die Informationen, nicht als Ersatz für jede Arbeitsoberfläche.
Ein überzeugendes Bento Grid entsteht durch konsistente Abstände, verständliche Typografie und gezielte Akzente. Die unterschiedliche Kartengröße bringt bereits Bewegung in die Gestaltung.
Lege zunächst wenige Regeln fest:
Im Code erzeugen rounded-3xl, p-6 und sm:p-8 eine gemeinsame Form. Die farbige Ablaufkarte unterbricht das weiße Raster an einer Stelle.
Wenn du jede Karte mit einem anderen Verlauf, Schatten und Rahmen versiehst, konkurrieren die Flächen miteinander. Wähle einen Hauptakzent und lasse die übrigen Karten zurückhaltender wirken.
Achte außerdem auf den Abstand innerhalb einer Karte. Titel, Erklärung und Vorschau brauchen eine erkennbare Reihenfolge. Außen großzügige Karten wirken trotzdem eng, wenn innen alle Elemente zusammenrücken.
Bei dunklen Varianten reicht es nicht, den Hintergrund auszutauschen. Text, Rahmen, Vorschauen und Fokusmarkierungen brauchen passende Farben. Prüfe dabei die tatsächliche Lesbarkeit jeder Kombination.
Animation ist optional. Ein statisches Raster kann vollständig funktionieren. Ergänze Bewegung erst, wenn sie eine Interaktion erklärt oder eine Zustandsänderung verständlicher macht.
Die wichtigsten Fehler betreffen Überlauf, fehlende Klassen, unpassende Höhen und eine widersprüchliche Lesereihenfolge. Prüfe diese Punkte mit echten Inhalten.
Baue Klassennamen nicht aus unvollständigen Fragmenten zusammen:
const className = `lg:col-span-${span}`;
Verwende stattdessen vollständig ausgeschriebene Varianten:
const layouts = {
standard: "",
wide: "md:col-span-2",
tall: "lg:row-span-2",
};
const className = layouts[variant] ?? layouts.standard;
Tailwind durchsucht Quelldateien nach erkennbaren Klassen. Vollständige Klassenstrings sind deshalb der geeignete Weg für solche Varianten.
Teste jede Karte mit längeren Überschriften und zusätzlichen Textzeilen. Vermeide feste Höhen für Flächen, deren Inhalt wachsen muss.
overflow-hidden kann dekorative Elemente begrenzen. Auf einer textreichen Karte kann es allerdings auch wichtige Inhalte verbergen. Prüfe seinen Einsatz deshalb gezielt.
Lege die Karten im Quelltext in einer logisch lesbaren Reihenfolge an. Verwende visuelle Umordnung nicht als Ersatz dafür.
Die CSS-Grid-Spezifikation warnt ausdrücklich davor, Rasterplatzierung zur Korrektur einer falschen Quellreihenfolge zu verwenden. Die visuelle Anordnung kann sonst von der Reihenfolge beim linearen Lesen und Navigieren abweichen.
Wenn eine Karte navigiert, verwende ein geeignetes Navigationselement. Wenn sie eine Aktion auslöst, verwende einen Button.
Eine anklickbare Fläche braucht außerdem einen sichtbaren Tastaturfokus und eine verständliche Beschriftung. Verlasse dich nicht allein auf eine Farbänderung beim Darüberfahren.
Ein Bento Grid passt schlecht, wenn Informationen zwingend in einer festen Reihenfolge gelesen oder bearbeitet werden müssen. Auch stark unterschiedlich lange Inhalte lassen sich häufig einfacher linear darstellen.
Ein Anmeldeformular braucht eine eindeutige Abfolge. Ein ausführlicher Fachartikel braucht einen ruhigen Lesefluss. Eine große Ergebnisliste braucht Filter, Sortierung und ausreichend Platz für wiederkehrende Informationen.
Das Raster kann solche Bereiche ergänzen. Beispielsweise kann eine Produktseite zuerst Funktionen in Karten zeigen und darunter einen ausführlichen Ablauf erklären.
Prüfe vor dem Einsatz drei Fragen: Ist jede Karte allein verständlich? Hilft die Größe beim Priorisieren? Bleibt die mobile Darstellung angenehm?
Wenn du Inhalte nur deshalb kürzt, damit sie in eine bestimmte Form passen, ändere lieber das Layout. Die Form sollte die Information unterstützen.
Starte mit dem fertigen Beispiel und ersetze zuerst die Texte. Prüfe anschließend die mobile Reihenfolge, bevor du die Desktopflächen anpasst.
Für eine Produktseite eignet sich eine große Hauptkarte mit wenigen ergänzenden Funktionen. Für ein Portfolio sollte dein wichtigstes Projekt den Schwerpunkt bilden. Bei einem Dashboard bestimmen Informationsbedarf und Zustände die Kartengröße.
Behalte zunächst natürliche Höhen bei. Ergänze Zeilenüberspannungen erst, wenn die Inhalte stabil sind und die größere Fläche eine erkennbare Aufgabe erfüllt.
Vor der Veröffentlichung teste lange Texte, schmale Zwischenbreiten und Tastaturbedienung. Entferne dekorative Elemente, die wichtige Informationen verdrängen. So erhältst du ein Bento Grid, das du mit echten Inhalten weiterentwickeln kannst.

Du erstellst einen Grid-Container und legst Spalten, Abstände und responsive Kartenbreiten fest. Beginne mit grid grid-cols-1 gap-4. Ergänze anschließend größere Raster mit md:grid-cols-2 oder lg:grid-cols-4. Einzelne Karten können dort mehrere Spalten oder Zeilen belegen.
Nein. Das Layout funktioniert mit HTML und Tailwind, weil CSS Grid die Anordnung übernimmt. React hilft, wenn du Karten wiederverwenden, Inhalte aus Daten erzeugen oder interaktive Zustände verwalten möchtest. In normalem HTML verwendest du class anstelle von className.
Ja. Spalten, Abstände und responsive Anpassungen benötigen kein JavaScript. Zusätzlicher Code wird erst für Funktionen wie Filter, dynamische Daten oder ausklappbare Inhalte nötig. Eine statische Funktionsübersicht kann vollständig mit HTML und CSS umgesetzt werden.
Ein Bento Grid verwendet bewusst unterschiedlich große Flächen in einem gemeinsamen Raster. Masonry ordnet unterschiedlich hohe Elemente möglichst lückenarm an. Bento eignet sich für eine gezielte Informationshierarchie, während Masonry häufig für Bildsammlungen und Inhalte mit variierenden Höhen verwendet wird.
Prüfe zuerst unbedingte col-span-Klassen, feste Breiten und lange Inhalte. Eine Karte mit col-span-2 kann in einem einspaltigen Raster zusätzliche Spalten erzeugen. Aktiviere die Überspannung erst am passenden Breakpoint und lasse innere Textbereiche bei Bedarf mit min-w-0 schrumpfen.