CSS Houdini Tutorial

Guten Tag, Freunde!

Was ist ein Houdini?


Houdini ( Houdini ) - eine Sammlung von Browser-APIs, die den Webentwicklungsprozess, einschließlich der Entwicklung von CSS-Standards, erheblich verbessern. Entwickler können CSS mithilfe von JavaScript erweitern, das CSS-Rendering beeinflussen und dem Browser mitteilen, wie Stile angewendet werden sollen. Dies führt zu einer signifikanten Steigerung der Leistung und Stabilität als die Verwendung von Polyphilen.

Houdini besteht aus zwei API-Gruppen - High-Level-APIs und Low-Level-APIs.

Dem Renderprozess sind übergeordnete APIs zugeordnet (Stil - Layout - Zeichnung - Komposition). Diese Gruppe umfasst:

  • Paint API - Ermöglicht das Erweitern von CSS im Schritt (dh in der Renderphase) des Renderns visueller Elemente (Farbe, Hintergrund, Rahmen usw.).
  • Layout-API - Ermöglicht das Erweitern von CSS beim Bestimmen der Größe, Position und Ausrichtung von Elementen.
  • Animations-API - „Erweiterungspunkt“ im Schritt des Anzeigens und Animierens von Elementen.

Low-Level-APIs bilden die Grundlage für übergeordnete APIs und umfassen:

  • Typisierte Objektmodell-API
  • API für benutzerdefinierte Eigenschaften und Werte
  • API für Schriftmetriken
  • Worklets

CSS Zukunft


Im Gegensatz zu normalem CSS können Entwickler mit Houdini CSS auf natürlichere Weise erweitern. Bedeutet dies, dass sich die CSS-Spezifikationen nicht mehr weiterentwickeln und neue Standards eingeführt werden? Ganz und gar nicht. Houdinis Ziel ist es, durch die Erstellung funktionierender Prototypen, die leicht standardisiert werden können, bei der Entwicklung neuer CSS-Funktionen zu helfen.

Darüber hinaus können Entwickler offene CSS-Worklets problemlos freigeben, ohne sich um die Kompatibilität sorgen zu müssen.

TOM-API (Typed Object Model)


Vor Houdini bestand die einzige Möglichkeit für die Interaktion von JS und CSS darin, CSS in eine Zeichenfolge umzuwandeln und zu ändern. Das manuelle Parsen und Neudefinieren von Stilen kann komplex und fehleranfällig sein, da der Werttyp doppelt konvertiert werden muss (z. B. von einer Zahl in eine Zeichenfolge und umgekehrt). Sie müssen die Maßeinheiten für den neuen Wert auch manuell angeben.

selectedElement.style.fontSize = newFontSize + 'px' // newFontSize = 20
console.log(selectedElement.style.fontSize) // 20px

TOM verleiht CSS-Eigenschaften eine semantischere Bedeutung, indem es sie als typisierte JS-Objekte darstellt. Dies verbessert die Leistung und Stabilität erheblich und erleichtert die Codeunterstützung. CSS-Werte werden durch die CSSUnitValue-Schnittstelle dargestellt, die aus dem Wert und der Eigenschaft „Maßeinheit“ besteht.

{
  value: 20,
  unit: 'px'
}

Diese Schnittstelle kann mit den folgenden neuen Funktionen verwendet werden:

  • computedStyleMap (): Zum Parsen von berechneten (nicht integrierten) Stilen. Diese Methode wird aufgerufen, bevor andere Methoden analysiert oder verwendet werden.
  • attributeStyleMap: Zum Parsen und Ändern von Inline-Stilen. Dies ist eine Artikeleigenschaft.

//       ( )
selectedElement.computedStyleMap().get('font-size') // { value: 20, unit: 'px' }

//   
selectedElement.attributeStyleMap.set('font-size', CSS.em(2))
selectedElement. attributeStyleMap.set('color', 'blue')

//    
selectedElement.computedStyleMap().get('font-size') // { value: 20, unit: 'px' }

//    
selectedElement.attributeStyleMap.get('font-size') // { value: 2, unit: 'em' }

Beachten Sie, wie CSS-Typen beim Zuweisen eines neuen Werts verwendet werden. Durch die Verwendung dieser Syntax werden die mit Typen verbundenen Probleme vermieden und der resultierende Code wird sicherer.

Die betrachtete API umfasst nicht nur get und set, sondern auch andere Methoden, zum Beispiel:

  • clear: Entfernt alle Inline-Stile
  • Löschen: Löscht eine bestimmte CSS-Eigenschaft und ihren Wert
  • has: gibt true / false zurück, abhängig von der Verfügbarkeit der angegebenen Eigenschaft
  • Anhängen: Fügt einer Eigenschaft, die mehrere Werte unterstützt, einen zusätzlichen Wert hinzu

Erkennung


let selectedElement = document.getElementById('example')

if(selectedElement.attributeStyleMap){
  // ...
}

if(selectedElement.computedStyleMap){
  // ...
}

Spezifikationsstatus


Arbeitsentwurf : zur Diskussion in der Community veröffentlicht.

Unterstützung


ChromKanteOperFeuerfuchsSafari
Unterstützt durchUnterstützt durchUnterstützt durchNicht unterstütztTeilweise Unterstützung

API für benutzerdefinierte Eigenschaften und Werte


Mit dieser API können Entwickler CSS-Variablen erweitern, indem sie Typ, Anfangswert und Vererbung definieren. Um eine benutzerdefinierte Eigenschaft zu definieren, muss sie mit der registerProperty-Methode registriert werden. Diese Methode legt fest, wie Browser die Eigenschaft anwenden und Fehler behandeln sollen.

CSS.registerProperty({
  name: '--colorPrimary',
  syntax: '<color>',
  inherits: false,
  initialValue: 'blue',
})

Ein Objekt mit den folgenden Eigenschaften wird als Argument an diese Methode übergeben:

  • name: Name der benutzerdefinierten Eigenschaft
  • Syntax: Anweisung zum Parsen. Die vordefinierten Werte sind: <Farbe>, <Ganzzahl>, <Nummer>, <Länge>, <Prozent> usw.
  • initialValue: Standardwert (vor dem Überschreiben sowie bei Auftreten von Fehlern)

Im obigen Beispiel wurde eine benutzerdefinierte Eigenschaft vom Typ <Farbe> definiert. Diese Eigenschaft wird verwendet, um den Gradienten zu bestimmen. Normales CSS unterstützt keine Gradientenübergänge. Beachten Sie, wie die benutzerdefinierte Eigenschaft zum Definieren des Übergangs verwendet wird.

.gradient-box {
  background: linear-gradient(45deg, rgba(255, 255, 255, 1) 0% var(--colorPrimary) 60%);
  transition: --colorPrimary 0.5s ease;
  ...
}

.gradient-box:hover {
  --colorPrimary: red;
  ...
}

Der Browser weiß nicht, wie der Übergang für den Farbverlauf ausgeführt wird, aber er weiß, wie er für die Farbe ausgeführt wird. Aus diesem Grund haben wir den Eigenschaftstyp als <Farbe> definiert. In einem Browser, der Houdini unterstützt, tritt beim Bewegen des Mauszeigers eine Farbverlaufsänderung auf. Die in Prozent gemessene Verlaufsposition kann auch mithilfe der benutzerdefinierten CSS-Eigenschaft (registriert als <Prozent>) geändert werden.

Wahrscheinlich wird es in Zukunft möglich sein, eine benutzerdefinierte Eigenschaft direkt in CSS zu registrieren.

@property --colorPrimary {
  syntax: '<color>';
  inherits: false;
  initial-value: blue;
}

Beispiel


Dieses einfache Beispiel zeigt, wie Sie die Farbe und Kontrollpunkte eines Verlaufs mithilfe benutzerdefinierter CSS-Eigenschaften ändern können. Einen Beispielcode finden Sie hier .



Erkennung


if(CSS.registeredProperty) {
  // ...
}

Spezifikationsstatus


Arbeitsentwurf : zur Diskussion in der Community veröffentlicht.

Unterstützung


ChromKanteOperFeuerfuchsSafari
Unterstützt durchUnterstützt durchUnterstützt durchNicht unterstütztNicht unterstützt

API für Schriftmetriken


Diese API befindet sich in einem frühen Entwicklungsstadium, sodass sich die Spezifikation in Zukunft möglicherweise dramatisch ändern wird. Derzeit werden Methoden zum Messen der Größe von Textelementen bereitgestellt, die auf dem Bildschirm angezeigt werden, sodass Entwickler das Rendern von Zeichen beeinflussen können. Mit den vorhandenen CSS-Funktionen können Sie nicht mit diesen Werten arbeiten oder diese Arbeit sehr erschweren. Ein Beispiel für die Verwendung dieser API ist das mehrzeilige dynamische Abschneiden von Text.

Spezifikationsstatus


Ideensammlung : Entwurf nicht veröffentlicht.

Browser werden nicht unterstützt.

Vorkleta


Bevor Sie mit den folgenden APIs fortfahren, müssen Sie das Konzept der Worklets verstehen. Vorklets sind Skripte, die während des Renderns ausgeführt werden und unabhängig vom zugrunde liegenden JS-Code sind. Sie erweitern die Funktionen der Rendering-Engine, sind für die parallele Ausführung ausgelegt (2 oder mehr Instanzen), blockieren den Hauptthread nicht, haben nur eingeschränkten Zugriff auf den globalen Bereich und werden von der Engine bei Bedarf aufgerufen. Vorklets können nur über HTTPS (in der Produktion) oder über localhost (zu Entwicklungs- und Testzwecken) ausgeführt werden.

Houdini enthält die folgenden Worklets, die die Browser-Rendering-Engine erweitern:

  • Paint Worklet - Paint API
  • Animations-Worklet - Animations-API
  • Layout Worklet - Layout API

Paint API


Mit der Paint-API können Entwickler mithilfe von JS-Funktionen den Hintergrund, die Ränder oder den Inhalt eines Elements mithilfe des 2D-Rendering-Kontexts malen, der eine Teilmenge der HTML5-Canvas-API ist. Die Paint-API verwendet das Paint Worklet, um ein Bild zu zeichnen, das von Änderungen am CSS abhängt (z. B. Änderungen an CSS-Variablen). Wer mit der Canvas-API vertraut ist, wird sich mit der Paint-API wie zu Hause fühlen.

Das Erstellen eines Paint Worklet besteht aus mehreren Schritten:

  1. Schreiben und registrieren Sie ein Worklet mit der Funktion registerPaint
  2. Rufen Sie ein Worklet in HTML oder JS mit CSS.paintWorklet.addModule auf
  3. Verwenden Sie die paint () -Methode in CSS zusammen mit dem Namen des Vorklets und den übergebenen Argumenten

Schauen wir uns die Funktion registerPaint an, mit der die Funktionalität des Paint Worklet registriert und bestimmt wird.

registerPaint('paintWorkletExample', class {
  static get inputProperties() { return ['--myVariable']; }
  static get inputArguments() { return ['<color>']; }
  static get contextOptions() { return {alpha: true} }

  paint(ctx, size, properties, args) {
    // ...
  }
})

Die Funktion registerPaint besteht aus folgenden Teilen:

  • inputProperties: Ein Array von benutzerdefinierten CSS-Eigenschaften, die das Worklet beobachtet. Dieses Array repräsentiert die Abhängigkeiten des Worklets.
  • inputArguments: Ein Array von Argumenten, die von einer Funktion an externes CSS übergeben werden können
  • contextOptions: Farbtransparenz. Wenn false, sind alle Farben vollständig undurchsichtig
  • paint: die Hauptfunktion mit folgenden Argumenten:

    • ctx: Ein 2D-Zeichnungskontext, der fast identisch mit dem 2D-Canvas-Kontext der Canvas-API ist
    • Größe: Ein Objekt mit der Breite und Höhe des Elements. Die Werte hängen vom Layout-Rendering-Prozess ab. Die Leinwandgröße entspricht der tatsächlichen Artikelgröße
    • Eigenschaften: Variablen, die in inputProperties enthalten sind
    • args: Ein Array von Argumenten, die an die Paint-Funktion übergeben werden

Nach der Registrierung des Worklets muss es in HTML aufgerufen werden und den Pfad zur Datei angeben.

CSS.paintWorklet.addModule('path/to/worklet/file.js')

Vorklets können von jeder externen Quelle (z. B. von CDN) hinzugefügt werden, wodurch sie modular und wiederverwendbar sind.

CSS.paintWorklet.addModule('https://url/to/worklet/file.js')

Nach dem Aufruf des Worklets kann es mit der Funktion „Paint“ in CSS verwendet werden. Diese Funktion verwendet als ersten Parameter den registrierten Namen des Vorklets und alle in inputArguments angegebenen Argumente. Ab diesem Moment weiß der Browser, wann das Worklet aufgerufen werden muss und welche Benutzeraktionen zur Änderung bestimmter Werte der benutzerdefinierten CSS-Eigenschaften führen.

.example-element {
  // paintWorkletExample -  
  // blue - ,  
  background: paint(paintWorkletExample, blue);
}

Beispiel


Das folgende Beispiel zeigt die Verwendung der Paint-API sowie die Modularität und Wiederverwendung von Worklets. Es verwendet das Ripple-Worklet aus dem Google Chrome Labs-Repository . Siehe Beispielcode hier .



Erkennung


if(‘paintWorklet’ in CSS){
  // …
}

@supports(background: paint(paintWorkletExample)){
  // …
}

Spezifikationsstatus


Empfehlung : Ein stabiler Arbeitsentwurf, gebrauchsfertig.

Unterstützung


ChromKanteOperFeuerfuchsSafari
Unterstützt durchUnterstützt durchUnterstützt durchNicht unterstütztNicht unterstützt

Animations-API


Diese API erweitert Webanimationen durch die Verarbeitung verschiedener Ereignisse (Scrollen, Schweben, Klicken usw.) und verbessert die Leistung, indem Animationen in einem eigenen Stream über das Animationsworklet gestartet werden.

Wie bei jedem anderen Worklet muss zuerst eine Trainingsanimation registriert werden.

registerAnimation(‘animationWorkletExample’, class {
  constructor(options){
    // …
  }
  animate(currentTime, effect){
    // …
  }
})

Diese Klasse enthält zwei Funktionen:

  • Konstruktor: Wird aufgerufen, wenn eine neue Instanz erstellt wird. Wird für die allgemeine Einrichtung verwendet.
  • animieren: Die Hauptfunktion, die die Animationslogik enthält. Folgende Parameter werden akzeptiert:

    • currentTime: Zeitstempel auf einer bestimmten Zeitachse
    • Effekt: Eine Reihe von Effekten, die in der Animation verwendet werden

Nach der Registrierung wird das Worklet in die JS-Hauptdatei aufgenommen. Die Animation (Element, Frames, Einstellungen) wird hinzugefügt und an die Timeline angehängt. Das Konzept der Zeitleistenmarkierungen und die Grundlagen der Webanimation finden Sie im nächsten Abschnitt.

//   
await CSS.animationWorklet.addModule(‘path/to/worklet/file.js’)

//    
const elementExample = document.getElementById(‘element-example’)

//  
const effectExample = new KeyframeEffect(
  elementExample, //  
  [ // … ], //  
  { // … } //  - , ,    ..
)

//        
new WorkletAnimation(
  ‘animationWorkletExample’ //  
  effectExample, //  
  document.timeline, //  
  {},  //   
).play()

Zeitstempel


Webanimationen basieren auf Zeitstempeln - Meilensteinen für Effekte auf der Animationszeitleiste. Zum Beispiel analysieren wir eine sich wiederholende lineare Animation, die aus drei Bildern (Anfang, Mitte, Ende) besteht, 1 Sekunde nach dem vollständigen Laden der Seite beginnt (Verzögerung) und 4 Sekunden dauert.

Die Zeitstempel der Effekte sehen folgendermaßen aus (für eine Animation von 4 Sekunden Dauer und ohne Verzögerung):

ZeitstempelAnimationsrahmen
0msDas erste Bild - der Beginn der Animation
2000msDas zweite Bild - die Mitte der Animation
4000msLetztes Bild - Ende der Animation oder Zurücksetzen auf das erste Bild

effect.localTime mit einem Wert von 3000 ms (bei einer Verzögerung von 1000 ms) bindet die Animation an den durchschnittlichen Frame auf der Timeline (1000 ms Verzögerung + 2000 ms durchschnittlicher Frame). Der gleiche Effekt wird beim Einstellen von 7000 ms und 11000 ms erzielt, da die Animation alle 4000 ms wiederholt wird.

animate(currentTime, effect){
  effect.localTime = 3000 // 1000ms  + 2000ms  
}

Mit einem konstanten Wert von effect.localTime wird die Animation für einen bestimmten Frame gesperrt. Daher sollte sich der Wert von effect.localTime ändern. Dieser Wert sollte eine an currentTime oder eine andere Variable gebundene Funktion sein.

So sieht der lineare Animationscode aus:

animate(currentTime, effect){
  effect.localTime = currentTime // y = x  
}

Zeitleiste (document.timeline)ZeitstempelRahmen
startTime + 0ms (verstrichene Zeit)startTime + 0msDer Erste
startTime + 1000ms (verstrichene Zeit)Startzeit + 1000 ms (Verzögerung) + 0 msDer Erste
startTime + 3000ms (verstrichene Zeit)Startzeit + 1000 ms (Verzögerung) + 2000 msMitte
startTime + 5000ms (verstrichene Zeit)Startzeit + 1000 ms (Verzögerung) + 4000 msLetzte zuerst
startTime + 7000ms (verstrichene Zeit)Startzeit + 1000 ms (Verzögerung) + 6000 msMitte
startTime + 9000ms (verstrichene Zeit)Startzeit + 1000 ms (Verzögerung) + 8000 msLetzte zuerst

Zeitstempel sind nicht auf 1: 1 beschränkt. Mit der Animations-API können Entwickler Markierungen über die Animationsfunktion bearbeiten und mithilfe von Standard-JS-Funktionen komplexe Effekte erstellen. Animationen können auch bei jeder Iteration variieren (mit wiederholbaren Animationen).

Die Animation kann nicht nur an das Laden von Dokumenten gebunden werden, sondern auch an Benutzeraktionen. Eine Benutzeraktion wie das Scrollen einer Seite kann in der Animation über ein ScrollTimeline-Objekt verwendet werden. Beispielsweise kann eine Animation beginnen, wenn Sie 200 Pixel scrollen, und enden, wenn Sie 800 Pixel scrollen.

const scrollTimelineExample = new ScrollTimeline({
  scrollSource: scrollElement, // ,     
  orientation: ‘vertical’, //  
  startScrollOffset: ‘200px’, //  
  endScrollOffset: ‘800px’, //  
  timeRange: 1200, //  
  fill: ‘forwards’ //  
})

Die Animation passt sich automatisch der Bildlaufgeschwindigkeit an und bleibt dabei flüssig und reaktionsschnell. Da die Animation in einem eigenen Stream ausgeführt wird und eine Verbindung zur Browser-Rendering-Engine herstellt, wird sie reibungslos gestartet und beeinträchtigt die Leistung nicht.

Beispiel


Das folgende Beispiel zeigt eine nichtlineare Animation. Es verwendet die Gaußsche Funktion mit der gleichen Zeitrotation hin und zurück. Siehe Beispielcode hier .



Erkennung


if(CSS.animationWorklet){
  // …
}

Spezifikationsstatus


Erster öffentlicher Arbeitsentwurf : bereit für die Diskussion in der Gemeinschaft, Änderungen in der Zukunft vorbehalten.

Unterstützung


ChromKanteOperFeuerfuchsSafari
Teilweise UnterstützungTeilweise UnterstützungTeilweise UnterstützungNicht unterstütztNicht unterstützt

Layout-API


Mit der Layout-API können Entwickler den Layout-Rendering-Prozess erweitern, indem sie neue Module für die Verwendung in der CSS-Eigenschaft "display" definieren. Diese API führt neue Konzepte ein, ist sehr komplex und bietet eine Vielzahl von Einstellungen für die Entwicklung benutzerdefinierter Algorithmen für die Arbeit mit dem Seitenlayout.

Zuerst muss ein Worklet registriert werden.

registerLayout(‘exampleLayout’, class{
  static get inputProperties() { return [‘--example-variable’] }

  static get childrenInputProperties() { return [‘--exampleChildVariable’] }

  static get layoutOptions(){
    return {
      childDisplay: ‘normal’,
      sizing: ‘block-like’
    }
  }

  intrinsicSizes(children, edges, styleMap){
    // …
  }

  layout(children, edges, constraints, styleMap, breakToken){
    // …
  }
})

Das Registrieren eines Worklets umfasst die folgenden Methoden:

  • inputProperties: Ein Array von benutzerdefinierten CSS-Eigenschaften, die das Worklet beobachtet und die zum übergeordneten Element gehören, dem Element, das das Rendern des Layouts verursacht hat. Dieses Array repräsentiert die Layoutabhängigkeiten
  • childrenInputProperties: Ein Array von benutzerdefinierten CSS-Eigenschaften, die vom Widget überwacht werden und zum Nachkommen gehören
  • layoutOptions: Definiert die folgenden Layout-Eigenschaften:

    • childDisplay: Die vordefinierten Werte sind block und normal. Definiert, wie das Element angezeigt wird (Block oder Zeile).
    • Dimensionierung: Die vordefinierten Werte sind blockartig und manuell. Bestimmt die Notwendigkeit einer vorläufigen Berechnung der Elementgrößen (falls nicht angegeben)
  • intrinsicSizes: Definiert, wie der Container oder sein Inhalt im Layoutkontext angezeigt wird:

    • Kinder: Kind des Elements, das das Rendern des Seitenlayouts verursacht hat
    • Kanten: Containerränder
    • styleMap: Typisiertes Objektmodell im Container-Stil
  • Layout: Die Hauptfunktion für die Arbeit mit dem Layout:

    • Kinder: Kinderelement
    • Kanten: Ränder
    • Einschränkungen: Einschränkungen, die vom übergeordneten Layout auferlegt werden
    • styleMap: Typisiertes Objektmodell im Container-Stil
    • breakToken: Haltepunkt für die Paginierung oder Aufteilung des Drucklayouts

Als Nächstes wird das Worklet zur HTML- oder JS-Datei hinzugefügt.

CSS.layoutWorklet.addModule(‘path/to/worklet/file.js’)

Wir stellen einen Link zum Worklet in der Datei mit Stilen her.

.example-element {
  display: layout(exampleLayout)
}

Wie die Layout-API mit dem Layout funktioniert


Im vorherigen Beispiel haben wir exampleLayout definiert.

Ein Beispielelement wird als übergeordnetes Layout bezeichnet, einschließlich Einrückungen, Rahmen und Bildlaufschiebereglern. Ein übergeordnetes Layout besteht aus untergeordneten Elementen, die als aktuelle Layouts bezeichnet werden. Aktuelle Layouts sind Zielelemente, deren Layouts mithilfe der Layout-API „angepasst“ werden. Wenn Sie beispielsweise "display: flex" verwenden, werden die Nachkommen des Elements entsprechend dem flexiblen Layout neu angeordnet. Dies ähnelt dem Betrieb der Layout-API.

Jedes aktuelle Layout besteht aus untergeordneten Layouts, die Algorithmen zum Rendern des Layouts des untergeordneten Elements - LayoutChild (einschließlich der Pseudoklassen :: before und :: after) enthalten. LayoutChild - Ein Container, der von CSS-Tools generiert wird und Daten zu Stilen enthält (ohne Daten zum Layout). LayoutChild-Elemente werden vom Browser beim Anwenden von Stilen automatisch erstellt. Ein untergeordnetes Layout kann ein Fragment erstellen, das Anweisungen zum Rendern des Layouts enthält.

Beispiel


In diesem Beispiel wird auch das Google Chrome Labs-Repository verwendet , der Text wird jedoch durch Bilder ersetzt. Siehe Beispielcode hier .



Erkennung


if(CSS.layoutWorklet){
  // …
}

Spezifikationsstatus


Erster öffentlicher Arbeitsentwurf : bereit für die Diskussion in der Gemeinschaft, Änderungen in der Zukunft vorbehalten.

Unterstützung


ChromKanteOperFeuerfuchsSafari
Teilweise UnterstützungTeilweise UnterstützungTeilweise UnterstützungNicht unterstütztNicht unterstützt

Houdini und fortschreitende Verbesserung


Trotz der Tatsache, dass Houdini derzeit keine optimale Browserunterstützung bietet, kann es zur schrittweisen Verbesserung verwendet werden. Wenn Sie mit dem Konzept der fortschreitenden Verbesserung nicht vertraut sind, empfehle ich Ihnen, diesen Artikel zu lesen . Bei der Verwendung von Houdini sollte Folgendes berücksichtigt werden:

Identifizieren Sie immer den Support, um Fehler zu vermeiden.


Jede Houdini-API und jedes Worklet bietet eine einfache Möglichkeit, die Barrierefreiheit zu überprüfen. Dies vermeidet die Probleme bei der Verwendung von Houdini in Browsern, die diese Technologie noch nicht unterstützen.

Verwenden Sie Houdini, um die Anzeige und Visualisierung zu verbessern.


Benutzer, die Browser verwenden, die Houdini nicht unterstützen, sollten Zugriff auf den Inhalt und die grundlegenden Funktionen der Website haben. Benutzererfahrung und Inhaltsanzeige sollten nicht von Houdini abhängig sein.

Verwenden Sie alternativ Standard-CSS


Beispielsweise können benutzerdefinierte CSS-Eigenschaften als Alternative zur API für benutzerdefinierte Eigenschaften und Werte verwendet werden.

Konzentrieren Sie sich auf die Entwicklung produktiver und zuverlässiger Anwendungen, wobei Sie Houdini nur zu dekorativen Zwecken als fortschreitende Verbesserung verwenden.

Fazit


Mit Houdini können Entwickler JS-Code verwenden, um mit Stilen im Rendering-Prozess zu arbeiten, wodurch die Anwendungsleistung und -stabilität erhöht werden. Durch die Möglichkeit, Code in den Renderprozess einzufügen, können Sie CSS-Polyphile erstellen, die einfach mit anderen geteilt, angewendet und möglicherweise sogar in die Spezifikation aufgenommen werden können. Darüber hinaus können Entwickler und Designer mit Houdini weniger von CSS-Einschränkungen abhängig sein, wenn sie mit Stilen, Layouts und Animationen arbeiten.

Houdini kann jetzt verwendet werden, aber nur als progressive Verbesserung. Auf diese Weise können Browser, die Houdini nicht unterstützen, fehlerfreie Seiten anzeigen und so eine optimale Benutzererfahrung erzielen.

Ich kann es kaum erwarten, bis die Entwickler-Community die Funktionen von Houdini voll nutzen kann. Hier einige Beispiele:

CSS Houdini-Anforderungen
Eine interaktive Einführung in CSS Houdini Houdini-
Beispiele aus Google Chrome Labs

Verweise


W3C-Entwürfe der Houdini-
Houdini- Spezifikation (Chrome Dev Summit 2018)
Animations-Worklet - Google-Entwickler

Vielen Dank für Ihre Aufmerksamkeit.

All Articles