Web Components ist eine Suite verschiedener Technologien, die es Ihnen ermöglicht, wiederverwendbare benutzerdefinierte Elemente zu erstellen â mit ihrer Funktionalität, die vom Rest Ihres Codes gekapselt ist â und sie in Ihren Webanwendungen zu verwenden.
Konzepte und NutzungAls Entwickler wissen wir alle, dass es eine gute Idee ist, Code so oft wie möglich wiederzuverwenden. Dies war traditionell nicht so einfach für benutzerdefinierte Markup-Strukturen â denken Sie an die komplexen HTML-Strukturen (und die dazugehörigen Stile und Skripte), die Sie manchmal schreiben mussten, um benutzerdefinierte Benutzeroberflächen-Steuerelemente darzustellen, und wie die mehrfache Verwendung dieser Elemente zu einem Chaos auf Ihrer Seite führen kann, wenn Sie nicht vorsichtig sind.
Web Components zielt darauf ab, solche Probleme zu lösen â es besteht aus drei Haupttechnologien, die zusammen verwendet werden können, um vielseitige benutzerdefinierte Elemente mit gekapselter Funktionalität zu erstellen, die Sie überall verwenden können, ohne Angst vor Codekollisionen zu haben.
Ein Satz von JavaScript-APIs, die es Ihnen ermöglichen, benutzerdefinierte Elemente und ihr Verhalten zu definieren, die dann nach Belieben in Ihrer Benutzeroberfläche verwendet werden können.
Ein Satz von JavaScript-APIs zum Anhängen eines gekapselten "Shadow"-DOM-Baums an ein Element â der separat vom Hauptdokument-DOM gerendert wird â und zur Steuerung der zugehörigen Funktionalität. Auf diese Weise können Sie die Eigenschaften eines Elements privat halten, so dass sie skriptiert und gestylt werden können, ohne die Gefahr von Kollisionen mit anderen Teilen des Dokuments.
Die <template>
und <slot>
Elemente ermöglichen es Ihnen, Markup-Vorlagen zu schreiben, die nicht in der gerenderten Seite angezeigt werden. Diese können dann mehrfach als Grundlage für die Struktur eines benutzerdefinierten Elements verwendet werden.
Der grundlegende Ansatz zur Implementierung eines Web-Components sieht in der Regel folgendermaÃen aus:
CustomElementRegistry.define()
, indem Sie den zu definierenden Elementnamen, die Klasse oder Funktion, in der die Funktionalität angegeben ist, und optional das Element, von dem es erbt, übergeben.Element.attachShadow()
hinzu. Fügen Sie dem Shadow DOM Kind-Elemente, Ereignislistener usw. mit regulären DOM-Methoden hinzu.<template>
und <slot>
. Verwenden Sie erneut reguläre DOM-Methoden, um die Vorlage zu klonen und an Ihr Shadow DOM anzuhängen.Ein Leitfaden, der zeigt, wie man die Funktionen von benutzerdefinierten Elementen nutzt, um einfache Web-Components zu erstellen, sowie einen Blick auf Lebenszyklusrückrufe und einige andere weiter fortgeschrittene Funktionen.
Ein Leitfaden, der die Grundlagen des Shadow DOM behandelt und zeigt, wie man ein Shadow DOM an ein Element anhängt, es zum Shadow-DOM-Baum hinzufügt, es stylt und mehr.
Ein Leitfaden, der zeigt, wie man eine wiederverwendbare HTML-Struktur mit den <template>
und <slot>
Elementen definiert und diese Struktur dann in Ihren Web-Components verwendet.
CustomElementRegistry
Beinhaltet Funktionalität im Zusammenhang mit benutzerdefinierten Elementen, insbesondere die Methode CustomElementRegistry.define()
, die zur Registrierung neuer benutzerdefinierter Elemente verwendet wird, sodass sie dann in Ihrem Dokument verwendet werden können.
Window.customElements
Gibt eine Referenz auf das CustomElementRegistry
-Objekt zurück.
Spezielle Rückruffunktionen, die innerhalb der Klassendefinition des benutzerdefinierten Elements definiert werden und sein Verhalten beeinflussen:
connectedCallback()
Wird aufgerufen, wenn das benutzerdefinierte Element erstmals mit dem DOM des Dokuments verbunden wird.
disconnectedCallback()
Wird aufgerufen, wenn das benutzerdefinierte Element aus dem DOM des Dokuments entfernt wird.
adoptedCallback()
Wird aufgerufen, wenn das benutzerdefinierte Element in ein neues Dokument verschoben wird.
attributeChangedCallback()
Wird aufgerufen, wenn eines der Attribute des benutzerdefinierten Elements hinzugefügt, entfernt oder geändert wird.
Die folgenden Erweiterungen sind definiert:
is
globale HTML-Attribut
Ermöglicht es Ihnen, anzugeben, dass ein Standard-HTML-Element wie ein registriertes benutzerdefiniertes eingebautes Element funktionieren soll.
Document.createElement()
Ermöglicht es Ihnen, eine Instanz eines Standard-HTML-Elements zu erstellen, das wie ein gegebenes registriertes benutzerdefiniertes eingebautes Element funktioniert.
Pseudoklassen, die sich speziell auf benutzerdefinierte Elemente beziehen:
:defined
Passt zu jedem Element, das definiert ist, einschlieÃlich eingebauter Elemente und benutzerdefinierter Elemente, die mit CustomElementRegistry.define()
definiert sind.
:host
Wählt den Shadow-Host des Shadow DOM aus, der das CSS enthält, das darin verwendet wird.
:host()
Wählt den Shadow-Host des Shadow DOM aus, der das CSS enthält, das darin verwendet wird (sodass Sie ein benutzerdefiniertes Element von innerhalb seines Shadow DOM auswählen können) â aber nur, wenn der als Parameter der Funktion angegebene Selektor zum Shadow-Host passt.
:host-context()
Wählt den Shadow-Host des Shadow DOM aus, der das CSS enthält, das darin verwendet wird (sodass Sie ein benutzerdefiniertes Element von innerhalb seines Shadow DOM auswählen können) â aber nur, wenn der als Parameter der Funktion angegebene Selektor zu den Vorfahren des Shadow-Hosts in der DOM-Hierarchie passt.
:state()
Passt zu benutzerdefinierten Elementen, die sich in einem bestimmten benutzerdefinierten Zustand befinden. Genauer gesagt, passt es zu anonymen benutzerdefinierten Elementen, bei denen der angegebene Zustand im CustomStateSet
des Elements vorhanden ist.
Pseudoelemente, die sich speziell auf benutzerdefinierte Elemente beziehen:
::part
Repräsentiert jedes Element innerhalb eines Shadow Trees, das ein passendes part
Attribut hat.
ShadowRoot
Repräsentiert die Wurzelknoten eines Shadow-DOM-Unterbaums.
Element
Erweiterungen
Erweiterungen der Element
-Schnittstelle im Zusammenhang mit Shadow DOM:
Element.attachShadow()
hängt einen Shadow-DOM-Baum an das angegebene Element an.Element.shadowRoot
gibt die an das angegebene Element angehängte Shadow-Root zurück, oder null
, wenn keine Shadow-Root angehängt ist.Node
Ergänzungen der Node
-Schnittstelle, die für Shadow DOM relevant sind:
Node.getRootNode()
gibt die Wurzel des Kontextobjekts zurück, das optional die Shadow-Root enthält, falls verfügbar.Node.isConnected
gibt einen booleschen Wert zurück, der angibt, ob der Knoten (direkt oder indirekt) mit dem Kontextobjekt verbunden ist, z.B. dem Document
im Fall des normalen DOMs oder der ShadowRoot
im Fall eines Shadow DOMs.Event
Erweiterungen der Event
-Schnittstelle im Zusammenhang mit Shadow DOM:
Event.composed
Gibt true
zurück, wenn das Ereignis über die Shadow-DOM-Grenze hinweg in das Standard-DOM propagiert, andernfalls false
.
Event.composedPath
Gibt den Pfad des Ereignisses zurück (Objekte, auf denen Listener aufgerufen werden). Dies schlieÃt keine Knoten in Shadow Trees ein, wenn die Shadow-Root mit ShadowRoot.mode
geschlossen erstellt wurde.
<template>
Enthält ein HTML-Fragment, das beim erstmaligen Laden eines enthaltenden Dokuments nicht gerendert wird, aber zur Laufzeit mit JavaScript angezeigt werden kann und hauptsächlich als Grundlage für benutzerdefinierte Elementstrukturen verwendet wird. Die zugehörige DOM-Schnittstelle ist HTMLTemplateElement
.
<slot>
Ein Platzhalter innerhalb eines Webkomponenten, den Sie mit Ihrem eigenen Markup füllen können und der Ihnen ermöglicht, separate DOM-Bäume zu erstellen und sie zusammen zu präsentieren. Die zugehörige DOM-Schnittstelle ist HTMLSlotElement
.
slot
globale HTML-Attribut
Weist einem Element einen Slot in einem Shadow-DOM-Shadow-Tree zu.
Element.assignedSlot
Ein schreibgeschütztes Attribut, das eine Referenz auf den <slot>
zurückgibt, in den dieses Element eingefügt wurde.
Text.assignedSlot
Ein schreibgeschütztes Attribut, das eine Referenz auf den <slot>
zurückgibt, in den dieses Textknoten eingefügt wurde.
Element
Erweiterungen der Element
-Schnittstelle im Zusammenhang mit Slots:
Element.slot
Gibt den Namen des Shadow-DOM-Slots zurück, der an das Element angehängt ist.
Pseudoelemente, die sich speziell auf Slots beziehen:
::slotted
Passt zu jedem Inhalt, der in einen Slot eingefügt wird.
slotchange
Ereignis
Wird auf einer Instanz eines HTMLSlotElement
(<slot>
Element) ausgelöst, wenn sich die im Slot enthaltenen Knoten ändern.
Wir bauen in unserem web-components-examples GitHub-Repository eine Reihe von Beispielen auf. Im Laufe der Zeit werden mehr hinzugefügt.
Spezifikationen Browser-Kompatibilität html.elements.template api.ShadowRootRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4