Notion: Die blockbasierte Revolution

Wie Notion Komplexität komponierbar machte: Block-basierte Architektur, progressive Enthüllung, Slash-Befehle und unendliche Leinwand. Mit CSS- und TypeScript-Implementierungsmustern.

4 Min. Lesezeit 715 Worter
Notion: Die blockbasierte Revolution screenshot

Notion: Die Block-basierte Revolution

„Wir möchten es jedem ermöglichen, die Software, die sie täglich nutzen, genau an ihre Bedürfnisse anzupassen." — Ivan Zhao, Notion CEO

Notion hat Produktivitätssoftware transformiert, indem es alles zu einem Block gemacht hat. Diese scheinbar einfache Abstraktion schuf unendliche Flexibilität bei gleichzeitiger Benutzerfreundlichkeit – eine Design-Herausforderung, die die meisten für unmöglich hielten.


Warum Notion wichtig ist

Notion hat bewiesen, dass Komplexität komponierbar sein kann. Anstatt starrer Funktionen schufen sie Bausteine, die Nutzer auf Weisen kombinieren, die die Designer nie vorhergesehen hatten.

Zentrale Errungenschaften: - Datenbanken für Nicht-Entwickler zugänglich gemacht - Eine unendliche Arbeitsfläche geschaffen, die sich vertraut anfühlt - Bewiesen, dass Flexibilität und Benutzerfreundlichkeit keine Gegensätze sind - Kollaborative Dokumentenbearbeitung im großen Maßstab etabliert


Zentrale Erkenntnisse

  1. Alles ist ein Block - Der atomare Einheits-Ansatz bedeutet, dass jedes Inhaltselement (Text, Bilder, Datenbanken) identisch funktioniert: verschiebbar, transformierbar, verlinkbar
  2. Progressive Offenlegung skaliert Komplexität - Slash-Befehle enthüllen Power-Features nur bei Aufruf; Anfänger sehen Einfachheit, Experten finden Tiefe
  3. Konsistenz schlägt Raffinesse - Jeder Block hat denselben Griff, dasselbe Drag-Verhalten und kann in jeden anderen Typ umgewandelt werden
  4. Die unendliche Arbeitsfläche beseitigt Einschränkungen - Seiten enthalten Seiten, Datenbanken enthalten Seiten, alles verlinkt überallhin – keine künstliche Hierarchie
  5. Ruhige Typografie lässt Inhalte strahlen - Zurückhaltendes Design mit großzügiger Zeilenhöhe (1.7) und komfortabler Lesebreite (720px) hält den Fokus auf dem Nutzerinhalt

Grundlegende Design-Prinzipien

1. Alles ist ein Block

Die atomare Einheit von Notion ist der Block. Jedes Inhaltselement ist ein Block, der: - Verschoben - Transformiert - Referenziert - Eingebettet werden kann

TRADITIONAL DOCUMENT:
┌─────────────────────────────────────┐
│ [Fixed header]                      │
│ ─────────────────────────────────   │
│ Paragraph of text that's just text  │
│ and can only be text.               │
│                                     │
│ [Fixed image]                       │
│                                     │
│ Another paragraph, same deal.       │
└─────────────────────────────────────┘

NOTION'S BLOCK MODEL:
┌─────────────────────────────────────┐
│ ⋮⋮ [Heading block - H1]             │  ← Drag to reorder
│ ─────────────────────────────────   │
│ ⋮⋮ [Text block]                     │  ← Turn into toggle, callout, etc.
│     Paragraph that can transform    │
│ ⋮⋮ [Image block]                    │  ← Resize, caption, link
│     [caption]                       │
│ ⋮⋮ [Database block]                 │  ← Full database, inline
│     │ Task │ Status │ Due │         │
│ ⋮⋮ [Text block]                     │
│     Another paragraph               │
└─────────────────────────────────────┘

Das Geniale: Jeder Block hat denselben Griff (⋮⋮), dasselbe Drag-Verhalten und kann in jeden anderen Block-Typ umgewandelt werden.

CSS Pattern (Block Handle):

.block {
  position: relative;
  padding-left: var(--block-indent);
}

.block-handle {
  position: absolute;
  left: 0;
  opacity: 0;
  transition: opacity 0.15s ease;
  cursor: grab;
}

.block:hover .block-handle,
.block-handle:focus {
  opacity: 1;
}

/* Universal block spacing */
.block + .block {
  margin-top: var(--space-2);
}

SwiftUI Pattern:

struct BlockView: View {
    @State private var isHovering = false
    let block: Block

    var body: some View {
        HStack(alignment: .top, spacing: 4) {
            // Universal handle
            Image(systemName: "line.3.horizontal")
                .opacity(isHovering ? 1 : 0)
                .animation(.easeOut(duration: 0.15), value: isHovering)

            // Block content (polymorphic)
            BlockContentView(block: block)
        }
        .onHover { isHovering = $0 }
    }
}

2. Progressive Offenlegung

Notion enthüllt Komplexität nur bei Bedarf. Der Standardzustand ist aufgeräumt; Power-Features erscheinen auf Abruf.

Das „/" Menü:

User types: /
           ↓
┌────────────────────────────────┐
│ BASIC BLOCKS                   │
│  [T] Text                      │
│  [P] Page                      │
│  [x] To-do list                │
│   *  Bulleted list             │
│                                │
│ DATABASE                       │
│  [=] Table                     │
│  [#] Board                     │
│  [D] Calendar                  │
│                                │
│ MEDIA                          │
│  [I] Image                     │
│  [V] Video                     │
│  [@] File                      │
└────────────────────────────────┘

Progressive Komplexität:

Level 1: Just type (text block)
Level 2: "/" for block types
Level 3: "@" for mentions and links
Level 4: "[" for inline databases
Level 5: Templates and formulas

Implementierungsprinzip:

/* Hidden until needed */
.property-options,
.advanced-settings,
.formula-builder {
  display: none;
}

/* Revealed by explicit action */
.block.selected .property-options,
.settings-expanded .advanced-settings,
.formula-mode .formula-builder {
  display: block;
  animation: fadeSlideIn 0.2s ease-out;
}

3. Die unendliche Arbeitsfläche

Seiten enthalten Seiten. Datenbanken enthalten Seiten. Seiten verlinken überallhin. Der Arbeitsbereich hat keine Wände.

TRADITIONAL HIERARCHY:
Folders → Documents → Content
   │
   └── Rigid, one location per doc

NOTION'S CANVAS:
Everything → Links to → Everything
   │
   └── Page can exist anywhere
   └── Same data, multiple views
   └── Inline or full-page

Zentrale Erkenntnis: Es gibt kein „Dateisystem". Es gibt einen Graphen verbundener Inhalte.

Pattern - Inline vs Full Page:

/* Same content, different containers */
.database-inline {
  max-height: 400px;
  overflow-y: auto;
  border: 1px solid var(--border-light);
  border-radius: var(--radius-md);
}

.database-fullpage {
  height: 100%;
  border: none;
}

/* Content adapts to container */
.database-view {
  display: flex;
  flex-direction: column;
  height: 100%;
}

4. Ruhige Typografie

Notions Typografie ist bewusst zurückhaltend. Sie lässt den Inhalt strahlen.

HIERARCHY THROUGH SIZE AND WEIGHT:

Page Title         ← 40px, Bold, little personality
═══════════════════════════════════════════════

Heading 1          ← 30px, Semibold
───────────────────────────────────────────────

Heading 2          ← 24px, Semibold
. . . . . . . . . . . . . . . . . . . . . . .

Heading 3          ← 20px, Semibold

Body text flows naturally at 16px with         ← 16px, Regular
generous line-height (1.7) and comfortable
measure. Long-form content remains readable.

Typografie-System:

:root {
  /* Notion-inspired scale */
  --font-title: 40px;
  --font-h1: 30px;
  --font-h2: 24px;
  --font-h3: 20px;
  --font-body: 16px;
  --font-small: 14px;

  /* Generous line height for readability */
  --line-height-tight: 1.3;
  --line-height-normal: 1.5;
  --line-height-relaxed: 1.7;

  /* Neutral, readable font stack */
  --font-family: -apple-system, BlinkMacSystemFont,
    'Segoe UI', 'Roboto', sans-serif;
}

.page-content {
  max-width: 720px;  /* Comfortable reading measure */
  margin: 0 auto;
  font-family: var(--font-family);
  line-height: var(--line-height-relaxed);
}

Übertragbare Muster

Muster 1: Slash-Befehle

Der Mechanismus: Tippen Sie „/", um kontextbezogene Aktionen anzuzeigen.

// Slash command registry
interface SlashCommand {
  trigger: string;
  icon: string;
  label: string;
  shortcut?: string;
  action: () => void;
}

const commands: SlashCommand[] = [
  { trigger: 'h1', icon: 'H1', label: 'Heading 1', action: createH1 },
  { trigger: 'bullet', icon: '•', label: 'Bullet list', action: createBullet },
  { trigger: 'todo', icon: '☐', label: 'To-do', action: createTodo },
];

// Filter as user types
function filterCommands(query: string): SlashCommand[] {
  return commands.filter(cmd =>
    cmd.trigger.includes(query.toLowerCase()) ||
    cmd.label.toLowerCase().includes(query.toLowerCase())
  );
}

Muster 2: Block-Transformation

Der Mechanismus: Jeder Block kann in jeden anderen Block umgewandelt werden.

enum BlockType: CaseIterable {
    case text, heading1, heading2, heading3
    case bulletList, numberedList, toggleList, todo
    case quote, callout, divider
    case image, video, embed

    var icon: String {
        switch self {
        case .text: return "text.alignleft"
        case .heading1: return "textformat.size.larger"
        // ...
        }
    }
}

struct BlockTransformMenu: View {
    let currentBlock: Block
    let onTransform: (BlockType) -> Void

    var body: some View {
        Menu {
            ForEach(BlockType.allCases, id: \.self) { type in
                Button {
                    onTransform(type)
                } label: {
                    Label(type.label, systemImage: type.icon)
                }
            }
        } label: {
            Image(systemName: "arrow.triangle.turn.up.right.circle")
        }
    }
}

Muster 3: Inline-Erwähnungen

Der Mechanismus: „@" zum Verknüpfen mit beliebigen Elementen im Workspace.

.mention {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 6px;
  background: var(--bg-mention);
  border-radius: var(--radius-sm);
  color: var(--text-link);
  text-decoration: none;
  cursor: pointer;
}

.mention:hover {
  background: var(--bg-mention-hover);
}

.mention-icon {
  width: 16px;
  height: 16px;
}

Design-Lektionen

  1. Kombinierbarkeit statt Features: Bausteine entwickeln, die sich kombinieren lassen, keine monolithischen Tools
  2. Progressive Offenlegung: Standardmäßig einfach, bei Bedarf leistungsstark
  3. Konsistente Interaktionen: Jeder Block funktioniert gleich
  4. Ruhige Oberfläche: Der Inhalt steht im Fokus, nicht die Benutzeroberfläche
  5. Unbegrenzte Flexibilität: Keine künstlichen Einschränkungen bei der Struktur

Häufig gestellte Fragen

Was ist Notions blockbasierte Architektur?

Jedes Inhaltselement in Notion ist ein „Block" – Text, Bilder, Datenbanken, Einbettungen und sogar Seiten selbst. Jeder Block verhält sich identisch: ein Griff zum Ziehen, die Möglichkeit zur Umwandlung in andere Blocktypen und konsistente Abstände. Dieser atomare Ansatz bedeutet, dass Benutzer ein Interaktionsmuster lernen, das überall gilt.

Wie funktioniert Notions Slash-Command-System?

Die Eingabe von „/" öffnet ein kontextbezogenes Menü aller verfügbaren Blocktypen. Das Menü filtert während der Eingabe (z.B. zeigt „/todo" die To-Do-Liste). Dieses Pattern kombiniert Entdeckbarkeit (alle Optionen sehen) mit Geschwindigkeit (Power-User tippen Shortcuts direkt). Der Slash-Command ist zu einem Industriestandard-Pattern geworden.

Was ist progressive Offenlegung und wie nutzt Notion sie?

Progressive Offenlegung bedeutet, Komplexität nur bei Bedarf zu zeigen. In Notion ist Stufe 1 einfaches Tippen (erstellt Textblock), Stufe 2 ist „/" für Blocktypen, Stufe 3 ist „@" für Erwähnungen, Stufe 4 ist „[" für Datenbanken, und Stufe 5 sind Templates und Formeln. Anfänger sehen nie überwältigende Optionen.

Wie unterscheidet sich Notions unendliche Leinwand von traditioneller Dokumentstruktur?

Traditionelle Apps verwenden Ordnerhierarchien, bei denen jedes Dokument an einem Ort existiert. Notion behandelt Inhalte als Graph: Seiten enthalten Seiten, Datenbanken enthalten Seiten, und alles kann mit allem verlinkt werden. Dieselbe Datenbank kann inline auf mehreren Seiten erscheinen, und Seiten haben keinen festen „Speicherort" in einem Dateisystem.

Warum verwendet Notion so zurückhaltende Typografie?

Notions ruhige Typografie (Systemschriften, 16px Body, 1.7 Zeilenhöhe, 720px maximale Breite) vermeidet bewusst Persönlichkeit. Benutzer erstellen völlig unterschiedliche Inhalte – Meetingnotizen, Wikis, Projekttracker – daher muss die Oberfläche eine neutrale Leinwand sein, auf der sich jeder Inhaltstyp natürlich anfühlt.


Ressourcen

  • Website: notion.so
  • Design-Blog: Notions Einblicke hinter die Kulissen der Design-Entscheidungen
  • Template-Galerie: Community-Patterns und Anwendungsfälle
  • API-Dokumentation: Entwickeln mit Notions Block-Modell