CSS Houdini · Paint API · Layout API · Worklets
CSS Houdini — Paint API und Layout API
CSS.paintWorklet, registerPaint und benutzerdefinierte Layouts

CSS Houdini öffnet den Browser-Rendering-Prozess für Entwickler. Benutzerdefinierte Hintergründe, Muster und Layout-Algorithmen als Worklets — direkt in CSS nutzbar. Der mächtigste, aber auch komplexeste Ansatz zur CSS-Erweiterung.

15 Min. Lesezeit CSS.paintWorklet · registerPaint · Layout API · Typed OM · Properties & Values API Chrome · Edge · Browser-Support 2026

1. Was ist CSS Houdini?

CSS Houdini ist keine einzelne API, sondern eine Sammlung von Low-Level-APIs, die den Browser-CSS-Engine für Entwickler erweiterbar machen. Der Name leitet sich von Harry Houdini ab — dem Künstler, der aus jeder Beschränkung entkam. Der Witz liegt darin, dass CSS Houdini Entwickler aus der Beschränkung befreit, auf die Implementierung von CSS-Features warten zu müssen: Wer ein neues visuelles Feature oder einen neuen Layout-Algorithmus benötigt, muss nicht auf die Browser-Hersteller warten, sondern kann es selbst als Worklet implementieren.

CSS Houdini umfasst mehrere APIs: die Properties and Values API für typisierte Custom Properties, die Paint API für benutzerdefinierte Renderer, die Layout API für eigene Layout-Algorithmen, das Typed Object Model (Typed OM) für typisierte CSS-Werte in JavaScript, die Animation Worklet API für performante Animationen und die Parser API für den CSS-Parser. Nicht alle Teile von CSS Houdini sind gleich weit entwickelt oder gleich breit unterstützt — das ist der ehrliche Teil der Geschichte, der in vielen Artikeln zu kurz kommt.

Die konzeptionelle Bedeutung von CSS Houdini geht über die einzelnen APIs hinaus. Es verändert die Beziehung zwischen CSS-Spezifikation und Browserimplementierung. Neue CSS-Features wie Custom Properties, Container Queries und viele andere wurden erst möglich, weil die Browser-Hersteller intern die Architekturen implementierten, die CSS Houdini nach außen öffnet. Die APIs sind gewissermaßen das externe Gesicht der internen Flexibilisierung des CSS-Engines.

2. Die CSS Rendering Pipeline verstehen

Um CSS Houdini zu verstehen, muss man die Browser-Rendering-Pipeline kennen. Der Browser verarbeitet HTML und CSS in einer definierten Reihenfolge: Parse → Style → Layout → Paint → Composite. Jede Phase hat einen klar definierten Input und Output. Die Style-Phase berechnet aus Selektoren und Cascade, welche CSS-Eigenschaften auf welches Element angewendet werden. Die Layout-Phase berechnet aus diesen Eigenschaften, wo jedes Element auf dem Bildschirm sitzt. Die Paint-Phase rendert die Pixel. Composite-Phase fasst mehrere Layer zusammen.

Vor CSS Houdini waren alle diese Phasen für Entwickler Black Boxes. Man konnte CSS-Eigenschaften eingeben, aber den Prozess nicht beeinflussen. CSS Houdini öffnet spezifische Einstiegspunkte: Die Paint API öffnet die Paint-Phase, die Layout API die Layout-Phase, die Animation Worklet API die Composite-Phase. Diese Einstiegspunkte sind als Worklets implementiert — kleine JavaScript-Kontexte, die im Browser-Rendering-Thread laufen, nicht im Haupt-JavaScript-Thread. Das ermöglicht performante Erweiterungen ohne Blockierung des JavaScript-Hauptthreads.


/* CSS Houdini — Properties and Values API */
/* Register a typed custom property — enables transitions and fallbacks */
@property --houdini-intensity {
  syntax: "<number>";
  inherits: false;
  initial-value: 0.5;
}

@property --houdini-color-primary {
  syntax: "<color>";
  inherits: true;
  initial-value: #7c3aed;
}

@property --stripe-angle {
  syntax: "<angle>";
  inherits: false;
  initial-value: 45deg;
}

/* Typed properties can be animated — unlike regular custom properties */
.element {
  --houdini-intensity: 0.2;
  background-image: paint(fancy-border);
  transition: --houdini-intensity 0.4s ease;
}

.element:hover {
  --houdini-intensity: 1.0; /* animatable because of @property registration */
}

/* Use paint worklet as background */
.card-with-pattern {
  background-image: paint(diagonal-stripes);
  --stripe-angle: 30deg;
  --stripe-color: rgba(124, 58, 237, 0.15);
  --stripe-width: 4px;
}

3. Properties and Values API: typisierte Custom Properties

Die Properties and Values API ist der am breitesten unterstützte Teil von CSS Houdini und hat 2026 Einzug in alle modernen Browser gehalten. Sie löst ein fundamentales Problem mit regulären CSS Custom Properties: Diese sind für den Browser einfache Zeichenketten — er weiß nicht, ob --my-color: #7c3aed eine Farbe, eine Zahl oder eine Länge ist. Dadurch können Custom Properties nicht animiert werden, haben keine Typenprüfung und keinen Fallback-Wert der korrekt interpoliert werden kann.

Mit @property aus der Properties and Values API deklariert man eine Custom Property mit Typ, Vererbungsverhalten und Initialwert. @property --rotation { syntax: "<angle>"; inherits: false; initial-value: 0deg; } registriert eine typisierte Winkel-Property. Diese Property kann animiert werden, hat einen sinnvollen Initialwert und gibt dem Browser Informationen über den erwarteten Wertebereich. Die CSS Houdini Properties and Values API ist das Gateway, das Custom Properties von reinen Textersetzungen zu echten CSS-Werten macht.

JavaScript-Alternative: CSS.registerProperty() bietet dieselbe Funktionalität programmatisch an. Die @property-Syntax ist für Stylesheets geeignet, CSS.registerProperty() für JavaScript-basierte CSS-Bibliotheken. Beide Ansätze sind Teil der CSS Houdini Properties and Values API und haben identisches Verhalten.

4. Die Paint API: CSS.paintWorklet und registerPaint

Die Paint API ist der visuell spektakulärste Teil von CSS Houdini. Sie erlaubt es, benutzerdefinierte Paint-Worklets zu schreiben, die wie native CSS-Hintergründe verwendet werden können. Das Prinzip: Ein JavaScript-Worklet implementiert eine paint()-Methode, die einen Canvas-2D-Kontext erhält und in den es zeichnen kann. Dieses Worklet wird via CSS.paintWorklet.addModule('worklet.js') registriert und danach in CSS über background-image: paint(worklet-name) verwendet.

Das Besondere: CSS Houdini Paint Worklets laufen in einem isolierten Worker-Thread, der Zugriff auf den Paint-Rendering-Kontext hat. Sie können CSS Custom Properties lesen und auf Grundlage ihrer Werte rendern. Eine Änderung eines Custom-Property-Werts triggert automatisch einen neuen Paint-Aufruf. Damit lassen sich vollständig parametrisierbare visuelle Effekte realisieren: Ein Worklet, das diagonal gestreifte Hintergründe mit einstellbarem Winkel, Farbe und Breite erzeugt, reagiert auf CSS-Variable-Änderungen ohne JavaScript-Event-Listener.


/* Paint Worklet registration in JavaScript (worklet file) */
/* File: diagonal-stripes-worklet.js */

/* registerPaint is available in the worklet global scope */
registerPaint('diagonal-stripes', class {
  /* Declare which CSS custom properties this worklet reads */
  static get inputProperties() {
    return ['--stripe-color', '--stripe-width', '--stripe-angle'];
  }

  paint(ctx, size, properties) {
    /* Read CSS custom property values */
    const color = properties.get('--stripe-color').toString() || 'rgba(0,0,0,0.1)';
    const width = parseFloat(properties.get('--stripe-width')) || 4;

    ctx.strokeStyle = color;
    ctx.lineWidth = width;

    /* Draw diagonal lines across the element */
    const step = width * 3;
    for (let i = -size.height; i < size.width + size.height; i += step) {
      ctx.beginPath();
      ctx.moveTo(i, 0);
      ctx.lineTo(i + size.height, size.height);
      ctx.stroke();
    }
  }
});

/* In the main HTML file: register the worklet module */
/* CSS.paintWorklet.addModule('diagonal-stripes-worklet.js'); */

5. Paint API in der Praxis: Muster und Hintergründe

Die CSS Houdini Paint API ermöglicht visuelle Effekte, die mit reinem CSS unmöglich oder sehr aufwendig wären. Komplexe Muster, organische Formen, prozedural generierte Hintergründe, parametrisierbare Gradients mit nicht-linearen Kurven. Das praktischste Beispiel ist der parametrisierbare dekorative Hintergrund: Ein Muster, das auf Basis von CSS Custom Properties gerendert wird und dessen Komplexität, Farbe und Dichte per CSS-Variable oder Media Query angepasst werden kann.

Ein weiteres Anwendungsbeispiel: benutzerdefinierte Rahmen und Umrandungen. CSS border bietet einfache gerade Linien, gestrichelte und gepunktete Varianten. Mit der CSS Houdini Paint API kann man beliebige Rahmenformen zeichnen — gezackt, gewellt, mit abgerundeten Ecken in benutzerdefinierten Kurven, mit Verlauf entlang des Rahmens. Diese Effekte waren vorher nur als SVG-Hintergrund oder via Canvas mit JavaScript möglich, aber nicht als native CSS-Property verwendbar.

Wichtig ist die Einschränkung: Paint Worklets haben keinen Zugriff auf DOM-Informationen außer Custom Properties. Sie sehen die Dimensionen des Elements (size-Parameter), aber keine DOM-Nachbarn, keine anderen CSS-Properties außer den deklarierten inputProperties. Diese Isolation ist bewusst — sie ermöglicht das parallele Rendern im Worker-Thread. Wer komplexe, datengetriebene visuelle Effekte braucht, kombiniert CSS Houdini mit Custom Properties, die von JavaScript gesetzt werden.

6. Die Layout API: eigene Layout-Algorithmen

Die Layout API ist die mächtigste und experimentellste Komponente von CSS Houdini. Sie erlaubt es, vollständige Layout-Algorithmen als Worklets zu implementieren, die in CSS über display: layout(my-algorithm) verwendet werden. Theoretisch könnte man damit neue Flexbox-Varianten, Masonry-Layouts, physikbasierte Layouts oder beliebige andere Layout-Systeme implementieren — alles ohne Browser-Update, rein als JavaScript-Worklet.

Ein Layout-Worklet implementiert zwei Methoden: intrinsicSizes() berechnet die intrinsischen Größen des Containers auf Basis seiner Kinder. layout() erhält Informationen über verfügbare Größe und Kindgrößen und gibt für jedes Kind eine Position und Größe zurück. Das Worklet ist ein vollständiger Layout-Algorithmus in JavaScript, der die Browser-interne Layout-Pipeline benutzt. Das Masonry-Layout — Kacheln in einer gestaffelten Gitter-Anordnung wie Mauerwerk — wurde als Referenzimplementierung für die Layout API entwickelt und ist das bekannteste Beispiel.


/* Layout API — CSS usage (when supported) */

/* Register layout worklet in JavaScript first:
   CSS.layoutWorklet.addModule('masonry-layout.js');
   Then use in CSS: */

.masonry-container {
  display: layout(masonry); /* custom layout algorithm */
  --masonry-gap: 1rem;
  --masonry-columns: 3;
}

/* Layout worklet definition (masonry-layout.js) */
/* registerLayout('masonry', class {
  static get inputProperties() {
    return ['--masonry-gap', '--masonry-columns'];
  }

  async intrinsicSizes(children, edges, styleMap) {
    // Return min/max content sizes
    const columns = parseInt(styleMap.get('--masonry-columns')) || 3;
    return { minContentSize: 0, maxContentSize: Infinity };
  }

  async layout(children, edges, constraints, styleMap) {
    const gap = parseFloat(styleMap.get('--masonry-gap')) || 16;
    const columns = parseInt(styleMap.get('--masonry-columns')) || 3;
    const colWidth = (constraints.fixedInlineSize - gap * (columns - 1)) / columns;
    const colHeights = new Array(columns).fill(0);

    const childFragments = await Promise.all(
      children.map(child => child.layoutNextFragment({ fixedInlineSize: colWidth }))
    );

    // Place each child in the shortest column
    for (const fragment of childFragments) {
      const col = colHeights.indexOf(Math.min(...colHeights));
      fragment.inlineOffset = col * (colWidth + gap);
      fragment.blockOffset = colHeights[col];
      colHeights[col] += fragment.blockSize + gap;
    }

    return { autoBlockSize: Math.max(...colHeights), childFragments };
  }
}); */

7. Typed Object Model: CSS-Werte typisiert lesen

Das Typed Object Model (Typed OM) ist der Teil von CSS Houdini, der JavaScript-Entwicklern den größten Alltags-Nutzen bringt, auch wenn er weniger spektakulär ist als die Paint oder Layout API. Das klassische Problem: element.style.width gibt einen String wie "150px" zurück. Jede Berechnung erfordert manuelles Parsen, Einheitenkonvertierung und String-Zusammensetzen. Das Typed OM gibt stattdessen typisierte Objekte zurück: element.computedStyleMap().get('width') gibt ein CSSUnitValue-Objekt mit separatem value und unit zurück.

Mit dem Typed OM sind CSS-Berechnungen in JavaScript deutlich robuster und lesbarer. new CSSUnitValue(10, 'px').add(new CSSUnitValue(5, 'rem')) führt eine typsichere CSS-Wertaddition durch. CSS Houdini Typed OM ist in Chrome und Edge verfügbar, in Safari und Firefox mit eingeschränktem Umfang. Für Animationen und CSS-Wert-Interpolationen ist das Typed OM besonders wertvoll: Man arbeitet mit echten Zahlen statt mit Strings und vermeidet alle Parse-Fehler.

8. Browser-Support-Stand 2026

Der Browser-Support für CSS Houdini ist 2026 fragmentiert — und das ist die ehrlichste Aussage, die man treffen kann. Die einzelnen Teile der CSS Houdini-Plattform befinden sich in sehr unterschiedlichen Reifegraden. Die Properties and Values API (@property) ist am breitesten unterstützt: Chrome, Edge, Safari und Firefox. Die Paint API (CSS.paintWorklet) ist in Chrome und Edge verfügbar, in Firefox und Safari nur hinter Flags oder gar nicht. Die Layout API ist am wenigsten unterstützt: Chrome-only, hinter einem Flag.

Für die CSS Houdini Paint API gibt es Polyfills wie das CSS Paint Polyfill, das die Worklet-Funktionalität für Browser ohne native Unterstützung nachbaut — allerdings mit Einschränkungen bei Performance und nicht allen Paint-API-Funktionen. In der Praxis bedeutet das: Die Properties and Values API kann produktiv eingesetzt werden, die Paint API ist für Chrome-first-Projekte oder als Progressive Enhancement geeignet, die Layout API bleibt 2026 experimentell. Die Entscheidung für CSS Houdini in der Produktion erfordert eine klare Browser-Support-Strategie und Progressive Enhancement.

9. Houdini APIs im Überblick

Die verschiedenen Komponenten von CSS Houdini unterscheiden sich erheblich in Einsatzreife und praktischem Nutzen. Eine klare Übersicht hilft, die richtige Priorisierung für ein konkretes Projekt zu finden.

API Funktion Browser-Support 2026 Produktionsreife
Properties & Values API Typisierte Custom Properties, @property Chrome, Edge, Safari, Firefox Produktionsreif
Paint API CSS.paintWorklet, registerPaint Chrome, Edge (kein Firefox/Safari) Progressive Enhancement
Layout API CSS.layoutWorklet, registerLayout Chrome-only (Flag) Experimentell
Typed OM Typisierte CSS-Werte in JS Chrome, Edge, teilweise Safari Bedingt nutzbar
Animation Worklet Performante Scroll-Animationen Chrome, Edge Begrenzt

Die praktische Empfehlung für CSS Houdini in 2026: @property sofort einsetzen — vollständige Browser-Unterstützung, klarer Mehrwert durch typisierte Custom Properties und animierbare CSS-Variablen. Die Paint API für Chrome-first-Produkte oder als visuelles Enhancement mit @supports (background: paint(x)). Die Layout API beobachten, aber noch nicht in Produktionscode einsetzen. Die Browser-Hersteller arbeiten aktiv an der Vervollständigung der CSS Houdini-Implementierungen — der Stand 2026 ist besser als 2024, aber noch nicht vollständig.

Mironsoft

Advanced CSS, Houdini-Implementierungen und moderne Browser-APIs

CSS Houdini für Ihr Projekt einsetzen?

Wir implementieren typisierte Custom Properties mit @property, Paint Worklets für benutzerdefinierte visuelle Effekte und evaluieren, welche Houdini-APIs für Ihr konkretes Projekt produktionsreif sind.

@property Migration

Custom Properties typisieren, animierbar machen und mit Initialwerten absichern

Paint Worklets

Benutzerdefinierte Muster, Rahmen und Hintergründe als parametrisierbare CSS-Properties

Houdini-Bewertung

Analyse welche Houdini-APIs für Ihr Projekt 2026 produktionsreif und sinnvoll sind

10. Zusammenfassung

CSS Houdini ist die Erweiterungsplattform für den CSS-Rendering-Prozess des Browsers. Die Properties and Values API (@property) ist 2026 produktionsreif und der empfohlene Einstieg: Typisierte Custom Properties, animierbare CSS-Variablen und robuste Initialwert-Behandlung sind sofortiger Mehrwert ohne Browser-Support-Einschränkungen. Die Paint API ist für Chrome-first-Projekte produktiv einsetzbar und ermöglicht parametrisierbare Hintergrundeffekte, die mit reinem CSS nicht realisierbar sind. Die Layout API bleibt 2026 experimentell und Chrome-only.

Die strategische Perspektive: CSS Houdini verändert langfristig, wie CSS-Features entwickelt werden. Neue Layout-Algorithmen und visuelle Effekte können als Worklets verbreitet werden, bevor sie in die CSS-Spezifikation aufgenommen werden. Das beschleunigt die Innovation im CSS-Ökosystem. Wer CSS Houdini heute mit den produktionsreifen Teilen beginnt und die experimentellen Teile beobachtet, positioniert sich für die CSS-Entwicklung der nächsten Jahre.

CSS Houdini — Das Wichtigste auf einen Blick

@property (Jetzt einsetzen)

Typisierte Custom Properties mit Syntax, Vererbung und Initialwert. Vollständige Browser-Unterstützung 2026. Ermöglicht animierbare CSS-Variablen.

Paint API (Progressive Enhancement)

CSS.paintWorklet.addModule() + registerPaint() für benutzerdefinierte Hintergründe. Chrome/Edge. Mit @supports absichern.

Layout API (Experimentell)

CSS.layoutWorklet für eigene Layout-Algorithmen. Nur Chrome, hinter Flag. Noch nicht für Produktion geeignet.

Typed OM

Typisierte CSS-Werte in JavaScript. computedStyleMap() statt getComputedStyle(). Chrome/Edge, teilweise Safari.

11. FAQ: CSS Houdini

1Was ist CSS Houdini?
Eine Sammlung von Low-Level-APIs, die den CSS-Rendering-Prozess des Browsers für Entwickler erweiterbar machen. Paint API, Layout API, Properties & Values API, Typed OM.
2Welche APIs sind 2026 produktionsreif?
@property — vollständige Browser-Unterstützung. Paint API — Progressive Enhancement in Chrome/Edge. Layout API — experimentell.
3Was macht CSS.paintWorklet?
Registriert Paint-Worklet-Module. Das Worklet implementiert registerPaint() mit einer paint()-Methode für Canvas-2D-Rendering. Nutzbar in CSS via background-image: paint(name).
4Was ist @property?
CSS-Syntax der Properties & Values API. Registriert Custom Properties mit Typ, Vererbung und Initialwert. Macht Custom Properties animierbar.
5Unterschied Paint API vs. Canvas?
Paint Worklets laufen im Rendering-Thread, haben CSS-Property-Zugriff, aber kein DOM. Canvas läuft im Hauptthread. Paint Worklets sind performanter für CSS-integrierte Effekte.
6Warum ist die Layout API experimentell?
Nur Chrome, hinter Flag. Firefox und Safari noch nicht implementiert. Spezifikation in Entwicklung. Kein Produktionseinsatz 2026.
7Paint Worklets absichern?
@supports (background: paint(x)) für Progressive Enhancement. Fallback außerhalb des @supports-Blocks definieren.
8Was ist das Typed Object Model?
CSS-Werte als typisierte Objekte statt Strings. computedStyleMap().get('width') gibt CSSUnitValue zurück. Robustere JS-CSS-Interaktion.
9Custom Properties mit @property animieren?
Ja. Ohne @property nicht animierbar (Browser behandelt sie als undefinierte Strings). Mit Typ-Deklaration vollständig animierbar via CSS transition und animation.
10Was ist ein Worklet?
Leichtgewichtiger JS-Kontext im Browser-Rendering-Thread — nicht im Haupt-JS-Thread. Ermöglicht performante Rendering-Erweiterungen ohne Hauptthread-Blockierung.