Design Systems und UI-Komponenten: Vollständiger Leitfaden für Entwicklungsteams

Alles, was Sie über Design Systems wissen müssen. Komponenten, Dokumentation, Implementierung und Wartung für Konsistenz und Effizienz.

Was ist ein Design System?

Ein Design System ist eine Sammlung von Standards, wiederverwendbaren Komponenten und Richtlinien, die es Teams ermöglichen, konsistente und effiziente digitale Produkte zu erstellen. Es ist mehr als eine Komponentenbibliothek - es ist eine gemeinsame Sprache zwischen Designern und Entwicklern.

Komponenten eines Design Systems

1. Design Tokens

  • Farben
  • Typografie
  • Abstände
  • Schatten
  • Border Radius
  • 2. Komponentenbibliothek

  • Wiederverwendbare UI-Komponenten
  • Codiert und dokumentiert
  • Versionierung
  • 3. Pattern Library

  • Interaktionsmuster
  • Layout-Templates
  • Gemeinsame Flows
  • 4. Dokumentation

  • Nutzungsrichtlinien
  • Do's and Don'ts
  • Codebeispiele
  • 5. Governance

  • Update-Prozesse
  • Beitragsrichtlinien
  • Versionsverwaltung
  • Warum es wichtig ist

    1. Konsistenz

  • Einheitliche produktübergreifende Erfahrung
  • Markenwiedererkennung
  • Reduzierte kognitive Belastung für Nutzer
  • 2. Effizienz

  • Das Rad nicht neu erfinden
  • Schnellere Entwicklung
  • Weniger Bugs durch Wiederholung
  • 3. Skalierbarkeit

  • Einfacheres Team-Scaling
  • Schnelleres Onboarding
  • Zentralisierte Wartung
  • 4. Zusammenarbeit

  • Gemeinsame Sprache Designer-Entwickler
  • Reibungslosere Übergabe
  • Bessere Feedback-Schleife
  • Typischer ROI

  • 47% schnellere Entwicklung neuer Features
  • 34% Reduktion bei UI-Inkonsistenzen
  • 25% weniger Design-Review-Zeit
  • Kosteneinsparungen: 1M€+/Jahr für Enterprise
  • Design Tokens

    Was sie sind

    Die atomaren Werte, die das visuelle Erscheinungsbild definieren. Sie sind die Grundlage des gesamten Systems.

    Kategorien

    Farben:

    css
    

    / Semantische Benennung /

    --color-primary: #2563eb;

    --color-primary-hover: #1d4ed8;

    --color-secondary: #64748b;

    --color-success: #22c55e;

    --color-warning: #f59e0b;

    --color-error: #ef4444;

    / Neutrale Skala /

    --color-gray-50: #f8fafc;

    --color-gray-100: #f1f5f9;

    --color-gray-900: #0f172a;

    Typografie:

    css
    

    / Schriftfamilien /

    --font-sans: 'Inter', system-ui, sans-serif;

    --font-mono: 'JetBrains Mono', monospace;

    / Größen /

    --font-size-xs: 0.75rem;

    --font-size-sm: 0.875rem;

    --font-size-base: 1rem;

    --font-size-lg: 1.125rem;

    --font-size-xl: 1.25rem;

    / Gewichte /

    --font-weight-regular: 400;

    --font-weight-medium: 500;

    --font-weight-bold: 700;

    / Zeilenhöhen /

    --line-height-tight: 1.25;

    --line-height-normal: 1.5;

    --line-height-relaxed: 1.75;

    Abstände:

    css
    

    / 4px Basiseinheit /

    --space-1: 0.25rem; / 4px /

    --space-2: 0.5rem; / 8px /

    --space-3: 0.75rem; / 12px /

    --space-4: 1rem; / 16px /

    --space-6: 1.5rem; / 24px /

    --space-8: 2rem; / 32px /

    --space-12: 3rem; / 48px /

    --space-16: 4rem; / 64px /

    Weitere Tokens:

    css
    

    / Schatten /

    --shadow-sm: 0 1px 2px rgba(0,0,0,0.05);

    --shadow-md: 0 4px 6px rgba(0,0,0,0.1);

    --shadow-lg: 0 10px 15px rgba(0,0,0,0.1);

    / Border Radius /

    --radius-sm: 0.25rem;

    --radius-md: 0.375rem;

    --radius-lg: 0.5rem;

    --radius-full: 9999px;

    / Übergänge /

    --transition-fast: 150ms ease;

    --transition-normal: 300ms ease;

    Tools für Tokens

  • Style Dictionary (Amazon): Tokens in jedes Format transformieren
  • Theo (Salesforce): Token-Management
  • Figma Tokens: Figma ↔ Code synchronisieren
  • Tokens Studio: Erweitertes Figma-Plugin
  • Komponentenbibliothek

    Anatomie einer Komponente

    1. Props/API

  • Was angepasst werden kann
  • Typen und Validierung
  • Sinnvolle Standardwerte
  • 2. Varianten

  • Visuelle Variationen
  • Größenoptionen
  • Zustandsstile
  • 3. Zustände

  • Standard
  • Hover
  • Fokus
  • Aktiv
  • Deaktiviert
  • Laden
  • Fehler
  • 4. Barrierefreiheit

  • ARIA-Attribute
  • Tastaturnavigation
  • Screenreader-Unterstützung
  • Beispiel: Button-Komponente

    tsx
    

    // Button.tsx

    interface ButtonProps {

    variant?: 'primary' | 'secondary' | 'ghost' | 'danger';

    size?: 'sm' | 'md' | 'lg';

    isLoading?: boolean;

    isDisabled?: boolean;

    leftIcon?: React.ReactNode;

    rightIcon?: React.ReactNode;

    children: React.ReactNode;

    onClick?: () => void;

    }

    export const Button: React.FC = ({

    variant = 'primary',

    size = 'md',

    isLoading = false,

    isDisabled = false,

    leftIcon,

    rightIcon,

    children,

    onClick,

    }) => {

    return (

    className={cn(

    'button',

    button--${variant},

    button--${size},

    isLoading && 'button--loading'

    )}

    disabled={isDisabled || isLoading}

    onClick={onClick}

    aria-busy={isLoading}

    >

    {isLoading && }

    {leftIcon && {leftIcon}}

    {children}

    {rightIcon && {rightIcon}}

    );

    };

    Wesentliche Komponenten

    Layout:

  • Container
  • Grid
  • Stack (vertikal/horizontal)
  • Flex
  • Divider
  • Typografie:

  • Heading
  • Text
  • Link
  • Code
  • Formulare:

  • Input
  • Textarea
  • Select
  • Checkbox
  • Radio
  • Switch
  • Form Field (Wrapper)
  • Buttons:

  • Button
  • IconButton
  • ButtonGroup
  • Feedback:

  • Alert
  • Toast/Notification
  • Progress
  • Skeleton
  • Spinner
  • Datenanzeige:

  • Avatar
  • Badge
  • Card
  • List
  • Table
  • Overlay:

  • Modal/Dialog
  • Drawer
  • Tooltip
  • Popover
  • Dropdown-Menü
  • Navigation:

  • Tabs
  • Breadcrumb
  • Pagination
  • NavLink
  • Dokumentation

    Was dokumentiert werden sollte

    Pro Komponente:

  • Beschreibung und Anwendungsfall
  • Props-API-Tabelle
  • Codebeispiele
  • Do's and Don'ts
  • Barrierefreiheitshinweise
  • Verwandte Komponenten
  • Allgemein:

  • Erste Schritte
  • Installation
  • Theming/Anpassung
  • Beitragsrichtlinien
  • Changelog
  • Dokumentationstools

    Storybook:

  • Industriestandard
  • Interaktiver Playground
  • Mehrere Frameworks
  • Addon-Ökosystem
  • Docusaurus:

  • Markdown-basiert
  • Versionierung integriert
  • Suche enthalten
  • Custom:

  • MDX-Unterstützung
  • Live-Codebeispiele
  • Design-Token-Dokumentation
  • Storybook-Setup

    tsx
    

    // Button.stories.tsx

    import { Button } from './Button';

    export default {

    title: 'Components/Button',

    component: Button,

    argTypes: {

    variant: {

    control: 'select',

    options: ['primary', 'secondary', 'ghost', 'danger'],

    },

    size: {

    control: 'radio',

    options: ['sm', 'md', 'lg'],

    },

    },

    };

    export const Primary = {

    args: {

    variant: 'primary',

    children: 'Button',

    },

    };

    export const Secondary = {

    args: {

    variant: 'secondary',

    children: 'Button',

    },

    };

    export const AllVariants = () => (

    );

    Implementierung

    Ansätze

    1. Von Grund auf neu bauen

  • Vollständige Kontrolle
  • Perfekt auf Bedürfnisse zugeschnitten
  • Großer Zeitaufwand
  • Am besten für: Große Unternehmen, ausgereifte Produkte
  • 2. Bestehende Bibliothek erweitern

  • Mit Radix, Headless UI etc. starten
  • Styling anpassen
  • Barrierefreiheit out of the box
  • Am besten für: Mehrheit der Projekte
  • 3. CSS-Framework verwenden

  • Tailwind, Bootstrap
  • Schnelle Entwicklung
  • Weniger einzigartig
  • Am besten für: MVPs, Projekte mit engen Deadlines
  • Empfohlener Stack 2025

    Basis:

  • React/Vue/Svelte
  • TypeScript (unverzichtbar)
  • CSS Modules oder CSS-in-JS
  • Headless Components:

  • Radix UI
  • Headless UI
  • React Aria
  • Styling:

  • Tailwind CSS
  • Vanilla Extract
  • Panda CSS
  • Build:

  • Turborepo (Monorepo)
  • tsup/Rollup (Bundling)
  • Changesets (Versionierung)
  • Monorepo-Struktur

    
    

    packages/

    ├── design-tokens/

    │ ├── tokens.json

    │ └── build.js

    ├── ui/

    │ ├── src/

    │ │ ├── Button/

    │ │ ├── Input/

    │ │ └── ...

    │ ├── package.json

    │ └── tsconfig.json

    ├── icons/

    │ └── ...

    └── docs/

    └── storybook/

    apps/

    ├── web/

    └── mobile/

    package.json (root)

    turbo.json

    Wartung und Governance

    Versionierung

    Semantic Versioning:

  • Major: Breaking Changes
  • Minor: Neue Features, abwärtskompatibel
  • Patch: Bugfixes
  • Changelog:

  • Automatisch generiert mit Changesets
  • Klare Migrationsanleitungen für Breaking Changes
  • Beitragsprozess

    1. Vorschlag

  • RFC-Dokument
  • Design-Review
  • Technisches Review
  • 2. Entwicklung

  • Branch von Main
  • Tests erforderlich
  • Dokumentation erforderlich
  • 3. Review

  • Code-Review
  • Design-Review
  • Barrierefreiheits-Review
  • 4. Release

  • Merge in Main
  • Changelog-Update
  • Versionsanhebung
  • Veröffentlichung
  • Adoptions-Tracking

    Metriken:

  • Komponentennutzung über Produkte hinweg
  • Konsistenz-Scores
  • Entwicklerzufriedenheit
  • Integrationszeit
  • Tools:

  • Analytics in Storybook
  • Linting-Regeln
  • Automatisierte Berichte
  • Beliebte Design Systems

    Open Source

    Material UI (Google):

  • React-Komponenten
  • Material Design
  • Sehr umfassend
  • Kann schwer sein
  • Ant Design (Alibaba):

  • Enterprise-fokussiert
  • React/Vue/Angular
  • Ausgezeichnete Tabellen-/Formularkomponenten
  • Chakra UI:

  • Ausgezeichnete DX
  • Standardmäßig barrierefrei
  • Hochgradig anpassbar
  • Radix:

  • Ungestylte Primitives
  • Volle Barrierefreiheit
  • Eigenes Design zusammenstellen
  • Enterprise (Referenz)

    Carbon (IBM):

  • Umfassende Richtlinien
  • React-Implementierung
  • Sketch/Figma-Kits
  • Polaris (Shopify):

  • E-Commerce-fokussiert
  • React-Komponenten
  • Ausgezeichnete Dokumentation
  • Lightning (Salesforce):

  • CRM-optimiert
  • Web Components
  • Design-Tokens-Standard
  • Anti-Patterns

    1. Zu frühes Over-Engineering

    Problem: Vollständiges Design System bevor Produkte existieren.

    Lösung:

  • Mit dem starten, was jetzt gebraucht wird
  • Muster aus bestehenden Produkten extrahieren
  • Basierend auf tatsächlicher Nutzung iterieren
  • 2. Zu viele Varianten

    Problem: Button mit 15 verschiedenen Varianten.

    Lösung:

  • Optionen einschränken
  • Komposition statt Varianten
  • Weniger ist mehr
  • 3. Enge Kopplung

    Problem: Komponenten hängen zu sehr voneinander ab.

    Lösung:

  • Unabhängige Komponenten
  • Props für Anpassung
  • Slots/Children-Patterns
  • 4. Barrierefreiheit ignorieren

    Problem: "Wir fügen es später hinzu."

    Lösung:

  • A11y von Anfang an
  • Getestete Primitives verwenden
  • Regelmäßige Audits
  • 5. Keine Governance

    Problem: Jeder fügt hinzu, was er will.

    Lösung:

  • Klarer Beitragsprozess
  • Review-Anforderungen
  • Zentrale Verantwortlichkeit
  • Fazit

    Ein gut implementiertes Design System transformiert die Art und Weise, wie Teams digitale Produkte bauen. Die anfängliche Investition amortisiert sich schnell durch Effizienz und Konsistenz.

    Schlüsselprinzipien:

  • Klein anfangen, organisch wachsen
  • Dokumentation ist nicht optional
  • Barrierefreiheit vom ersten Tag an
  • Governance sichert Qualität

Implementierungsschritte:

1. Bestehendes UI auditieren

2. Gemeinsame Muster extrahieren

3. Tokens definieren

4. Kernkomponenten bauen

5. Alles dokumentieren

6. Governance etablieren

---

Das DGI-Team bietet Design- und Implementierungsservices für Design Systems. Kontaktieren Sie uns, um die Bedürfnisse Ihres Teams zu besprechen.

Artikel teilen:
Zurück zum Blog