Atomic Design hierarchy diagram — atoms, molecules, organisms
14 min read

Einführung in Atomic Design

#Design Systems #Architecture #Astro

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.

Brad Frost Autor von Atomic Design

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.

5
Hierarchie-Ebenen
1
Richtungsregel
0
Zirkuläre Abhängigkeiten

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

Atomic Design Atome — Buttons, Inputs, Icons
Ebene 1: Atome

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.

Moleküle kombinieren Atome zu funktionalen Gruppen
Ebene 2: Moleküle

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.

Organismen als vollständige Seitenabschnitte
Ebene 3: Organismen

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 und Seiten als Endergebnis
Ebene 4: Templates & Seiten

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.

Layout

Organismen steuern, wie ihre Kinder angeordnet sind — Grid, Flex, Stack. Sie besitzen die räumlichen Beziehungen.

Datenverteilung

Sie empfangen Daten über Props von der Seiten-Ebene und geben die richtigen Teile an jedes Kind-Molekül weiter.

Interaktionskoordination

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

  1. 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.

  2. 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.

  3. Moleküle zusammensetzen

    Kombiniere Atome zu SearchBar, FormField, NavLink, Card und Breadcrumbs. Jedes Molekül importiert nur aus atoms/.

  4. Organismen assemblieren

    Baue Header, Footer, Hero, ContactForm und BlogSidebar aus Molekülen. Jeder Organismus importiert aus molecules/ (und gelegentlich atoms/).

  5. 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

Fundament

Design Tokens definiert. Kern-Atome gebaut: Button, Input, Heading, Icon, Image, Link. Globale Styles und Typografie eingerichtet.

Komposition

Moleküle zusammengesetzt: SearchBar, FormField, Card, NavLink, Breadcrumbs. Erste Organismen gestartet: Header, Footer.

Sektionen

Organismen fertiggestellt: Hero, ContactForm, BlogSidebar, PricingTable. Basis-Layouts mit responsivem Grid erstellt.

Seiten

Alle Seiten durch Komposition bestehender Komponenten gebaut. Neue Seiten dauern Stunden statt Tage. Design-System voll einsatzbereit.

Häufige Stolperfallen

Frequently Asked Questions

Warum Atomic Design gewinnt

Nach der Anwendung von Atomic Design in über 30 Produktionsprojekten sind dies die Vorteile, die sich konsistent zeigen:

Onboarding-Geschwindigkeit

Neue Entwickler verstehen die Architektur in Stunden, nicht Wochen. Die Ordnerstruktur zeigt genau, wo jede Komponente lebt.

Konsistenz

Jede Seite verwendet die gleichen Bausteine — kein visuelles Abdriften. Ein Button, eine Card, ein Header — überall.

Testbarkeit

Atome einzeln testbar, Moleküle mit gemockten Atomen, Organismen mit gemockten Molekülen. Jede Ebene hat eine klare Testgrenze.

Performance

Kleine, fokussierte Komponenten ermöglichen Tree-Shaking und selektive Hydration in Astro. Nur interaktive Islands liefern JavaScript.

Skalierbarkeit

Einen neuen Seitentyp hinzufügen heißt bestehende Komponenten zusammensetzen, nicht von Grund auf neu bauen.

Design-Dev-Alignment

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.