Jedes Frontend-Team steht irgendwann vor dem gleichen Problem: Komponenten vermehren sich, Namenskonventionen verwässern, und was als saubere Codebasis begann, wird zum Flickwerk aus Einzellösungen. Atomic Design löst das, indem es deiner Komponentenarchitektur eine klare, wiederholbare Struktur gibt — inspiriert von der Chemie. Statt zu raten, wo eine neue Komponente hingehört, folgst du einer Hierarchie, die vom einzelnen Button bis zur kompletten Anwendung skaliert.
Wir designen keine Seiten, wir designen Systeme aus Komponenten.
Was ist Atomic Design?
Brad Frost stellte Atomic Design 2013 als Denkmodell für den Bau von Benutzeroberflächen vor. Die Kernidee ist einfach: So wie Materie in der Natur aus Atomen besteht, die sich zu Molekülen verbinden und dann zu komplexen Organismen werden, lassen sich Benutzeroberflächen in fünf hierarchische Ebenen zerlegen.
Die fünf Ebenen sind Atome, Moleküle, Organismen, Templates und Seiten. Jede Ebene baut auf der darunter liegenden auf. Die entscheidende Regel: Abhängigkeiten fließen nur nach unten — Atome importieren nichts, Moleküle importieren nur Atome, Organismen importieren Moleküle, und so weiter. Diese einzige Einschränkung eliminiert zirkuläre Abhängigkeiten und macht jede Komponente vorhersagbar.
Die fünf Ebenen erklärt
Die kleinsten bedeutungsvollen UI-Elemente. Buttons, Eingabefelder, Labels, Überschriften, Icons, Badges, Bilder und Links. Sie können nicht weiter zerlegt werden, ohne ihren Zweck zu verlieren. Stelle sie dir als Periodensystem deines Design-Systems vor. Atome sind eigenständig — sie erhalten alle Daten über Props und stylen sich mit Design Tokens.
Kleine Gruppen von Atomen, die als funktionale Einheit zusammenarbeiten. Eine SearchBar (Input + Button), ein FormField (Label + Input + Fehlermeldung), ein NavLink (Link + Icon), eine Card (Bild + Überschrift + Text). Der Schlüsseltest: Dient diese Gruppe einem einzigen, klaren Zweck? Wenn ja, ist es ein Molekül.
Komplexe, eigenständige Bereiche einer Seite. Ein Header (Logo + Navigation + SearchBar + Sprachumschalter), eine Hero-Sektion, ein Footer, ein Kontaktformular, eine BlogSidebar, eine Preistabelle. Organismen sind die erste Ebene, die sich wie ein echter Abschnitt einer Website anfühlt. Sie verwalten Layout und Koordination ihrer Kinder.
Templates definieren die Seitenstruktur — wo Organismen platziert werden und wie das Layout fließt. In Astro entsprechen Templates den Layout-Dateien (BaseLayout, BlogLayout). Seiten sind Templates gefüllt mit echten Inhalten — die tatsächlichen Routen-Dateien in src/pages/, die Nutzer sehen. Seiten übernehmen das Datenfetching und geben es an Layouts und Organismen weiter.
Atome in der Praxis
Atome müssen eigenständig sein. Sie erhalten alle Daten über Props und fetchen niemals selbst Daten oder importieren andere Komponenten. Sie stylen sich über Design Tokens (CSS Custom Properties), niemals über hartcodierte Werte.
---
interface Props {
variant?: 'primary' | 'secondary' | 'ghost';
size?: 'sm' | 'md' | 'lg';
disabled?: boolean;
}
const { variant = 'primary', size = 'md', disabled = false } = Astro.props;
---
<button
class:list={['btn', `btn--${variant}`, `btn--${size}`]}
disabled={disabled}
>
<slot />
</button> ---
interface Props {
type?: 'text' | 'email' | 'search' | 'password';
name: string;
placeholder?: string;
required?: boolean;
}
const { type = 'text', name, placeholder, required = false } = Astro.props;
---
<input
type={type}
name={name}
placeholder={placeholder}
required={required}
class="input"
/> ---
interface Props {
level?: 1 | 2 | 3 | 4 | 5 | 6;
size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';
}
const { level = 2, size = 'lg' } = Astro.props;
const Tag = `h${level}`;
---
<Tag class:list={['heading', `heading--${size}`]}>
<slot />
</Tag> Moleküle: Der funktionale Klebstoff
Moleküle kombinieren zwei oder mehr Atome zu einer funktionalen Einheit. Der Schlüsselunterschied: Ein Molekül tut etwas, das seine einzelnen Atome allein nicht können.
SearchBar = Input-Atom + Button-Atom. Zusammen bilden sie ein Suchformular, das Eingaben entgegennimmt und absendet. Einzeln sammelt der Input nur Text und der Button löst nur eine Aktion aus — keines der beiden sucht allein. Das Molekül verbindet sie mit einem <form>-Element, role="search" und dem passenden action-Attribut.
FormField = Label-Atom + Input-Atom + Fehlermeldungs-Atom. Das Molekül verbindet das Label mit dem Input über for/id-Attribute, zeigt Validierungsfehler unter dem Input an und verwaltet die visuellen Zustände (gültig, ungültig, deaktiviert). Das ist das häufigste Molekül in jeder Anwendung.
Card = Bild-Atom + Heading-Atom + Text-Atom + optionales Link-Atom. Eine Content-Vorschaueinheit für Blog-Listen, Portfolio-Elemente, Teammitglieder und Produktanzeigen. Das Molekül steuert Layout (vertikal oder horizontal), Hover-Effekte und Klickverhalten (ganze Card klickbar vs. nur Link).
Der Molekül-Test
Frage dich: „Dient diese Gruppe von Atomen einem einzigen, klaren Zweck?” Wenn ja, ist es ein Molekül. Wenn es mehrere Zwecke erfüllt oder andere Moleküle enthält, ist es wahrscheinlich ein Organismus.
| Komponente | Molekül? | Warum Recommended |
|---|---|---|
| SearchBar (Input + Button) | ✓ Ja | Ein Zweck: Suchen |
| FormField (Label + Input + Error) | ✓ Ja | Ein Zweck: Ein Feld erfassen |
| NavLink (Link + Icon) | ✓ Ja | Ein Zweck: Navigieren |
| Header (Logo + Nav + Suche) | ✗ Nein | Mehrere Zwecke → Organismus |
| Footer (Nav + Kontakt + Social) | ✗ Nein | Mehrere Zwecke → Organismus |
Organismen: Echte Seitenabschnitte
Organismen sind die erste Ebene, die sich wie ein „Abschnitt” einer Seite anfühlt. Sie sind komplexe, eigenständige Komponenten aus Molekülen und Atomen.
Organismen steuern, wie ihre Kinder angeordnet sind — Grid, Flex, Stack. Sie besitzen die räumlichen Beziehungen.
Sie empfangen Daten über Props von der Seiten-Ebene und geben die richtigen Teile an jedes Kind-Molekül weiter.
Wenn der Zustand eines Kindes ein anderes beeinflusst (z. B. Tab-Auswahl zeigt anderen Inhalt), orchestriert der Organismus dies.
Ordnerstruktur in Astro
Atomic Design einrichten
- Hierarchie anlegen
Erstelle die Ordner: src/components/atoms/, molecules/, organisms/ und seo/. Füge src/layouts/ für Templates und src/pages/ für Seiten hinzu.
- Atome zuerst bauen
Beginne mit Button, Input, Heading, Icon, Badge, Image und Link. Diese werden überall verwendet und müssen solide sein, bevor du aufwärts baust.
- Moleküle zusammensetzen
Kombiniere Atome zu SearchBar, FormField, NavLink, Card und Breadcrumbs. Jedes Molekül importiert nur aus atoms/.
- Organismen assemblieren
Baue Header, Footer, Hero, ContactForm und BlogSidebar aus Molekülen. Jeder Organismus importiert aus molecules/ (und gelegentlich atoms/).
- Layouts definieren
Erstelle BaseLayout.astro und BlogLayout.astro in src/layouts/. Diese setzen Organismen zu Ganzseitenstrukturen mit Slots für dynamischen Inhalt zusammen.
src/
├── components/
│ ├── atoms/ → Button, Input, Heading, Icon, Badge, Image, Link
│ ├── molecules/ → SearchBar, FormField, NavLink, Card, Breadcrumbs
│ ├── organisms/ → Header, Footer, Hero, ContactForm, BlogSidebar
│ └── seo/ → SEO.astro, Schema-Komponenten
├── layouts/ → BaseLayout, BlogLayout (= Templates)
├── pages/ → index.astro, blog/[slug].astro (= Seiten)
├── styles/
│ ├── global.css
│ └── tokens/ → colors.css, typography.css, spacing.css
├── lib/ → utils.ts, constants.ts
└── types/ → TypeScript-Definitionen
Die goldene Regel
Jedes Atom braucht: saubere Prop-Interfaces, barrierefreies Markup, vollständige Zustandsabdeckung (Hover, Focus, Active, Disabled, Error) und Design-Token-Integration. Ein schlecht designtes Atom verbreitet seine Probleme überall.
Entwicklung eines Projekts
Design Tokens definiert. Kern-Atome gebaut: Button, Input, Heading, Icon, Image, Link. Globale Styles und Typografie eingerichtet.
Moleküle zusammengesetzt: SearchBar, FormField, Card, NavLink, Breadcrumbs. Erste Organismen gestartet: Header, Footer.
Organismen fertiggestellt: Hero, ContactForm, BlogSidebar, PricingTable. Basis-Layouts mit responsivem Grid erstellt.
Alle Seiten durch Komposition bestehender Komponenten gebaut. Neue Seiten dauern Stunden statt Tage. Design-System voll einsatzbereit.
Häufige Stolperfallen
Frequently Asked Questions
Es ist verlockend, führt aber zu monolithischen Organismen, die schwer zu testen, wiederzuverwenden und zu ändern sind. Nimm dir die Zeit, die Moleküle innerhalb deines Organismus zu identifizieren. Ein Header ist nicht eine große Komponente — er enthält ein NavLink-Molekül, ein SearchBar-Molekül und ein LanguageSwitcher-Molekül.
Nein. Ein einfaches <span> mit einer Klasse ist kein Atom — es ist nur HTML. Atome repräsentieren bedeutungsvolle, wiederverwendbare Designentscheidungen. Wenn du TextSmall, TextMedium, TextLarge erstellst, verwende stattdessen ein einziges Text-Atom mit einem size-Prop.
Das ist völlig in Ordnung. Atomic Design ist ein Denkmodell, keine strenge Regel. Ein Hero-Organismus könnte ein Heading-Atom direkt verwenden — es gibt kein sinnvolles Molekül dazwischen. Sei pragmatisch bei der Hierarchie.
Perfekt. Atome und Moleküle sind standardmäßig statisch (kein JS). Wenn du Interaktivität brauchst, wrappst du eine React- oder Vue-Island-Komponente in einen Astro-Organismus. Die Atomic-Design-Hierarchie bleibt gleich — die Island ist einfach ein interaktives Atom oder Molekül.
Warum Atomic Design gewinnt
Nach der Anwendung von Atomic Design in über 30 Produktionsprojekten sind dies die Vorteile, die sich konsistent zeigen:
Neue Entwickler verstehen die Architektur in Stunden, nicht Wochen. Die Ordnerstruktur zeigt genau, wo jede Komponente lebt.
Jede Seite verwendet die gleichen Bausteine — kein visuelles Abdriften. Ein Button, eine Card, ein Header — überall.
Atome einzeln testbar, Moleküle mit gemockten Atomen, Organismen mit gemockten Molekülen. Jede Ebene hat eine klare Testgrenze.
Kleine, fokussierte Komponenten ermöglichen Tree-Shaking und selektive Hydration in Astro. Nur interaktive Islands liefern JavaScript.
Einen neuen Seitentyp hinzufügen heißt bestehende Komponenten zusammensetzen, nicht von Grund auf neu bauen.
Designer und Entwickler teilen das gleiche Vokabular und die gleiche Hierarchie. Ein Molekül in Figma ist ein Molekül im Code.
Wie Atomic Design in einem echten Projekt mit über 45 Komponenten aussieht, erfährst du im Praxis-Artikel: Atomic Design mit Astro.