--- title: Web Components slug: Web/Web_Components tags: - Benutzerdefinierte Elemente - Components - JavaScript - Landing - Overview - Schatten-DOM - Template - Web Components - Webkomponenten - custom elements - shadow dom - slot - Überblick translation_of: Web/Web_Components ---
{{DefaultAPISidebar("Webkomponenten")}}

Webkomponenten sind eine Gruppe von Web-Technologien, die es ermöglichen, benutzerdefinierte, wiederverwendbare HTML Elemente zu erstellen, deren Funktionalität gekapselt ist und damit vollständig getrennt von anderem Code.

Konzept und Anwendung

Unter Softwareentwicklern ist allgemein anerkannt, Code weitestgehend wiederzuverwenden. Für benutzerdefinierte Markup-Strukturen war dies bekanntermaßen nicht ganz so einfach. Denken Sie nur an das komplexe HTML- (sowie CSS- und Skript-)Konglomerat, das teilweise notwendig war, um benutzerdefinierte UI-Steuerelemente zu erstellen; und wie die mehrfache Verwendung derartiger benutzerdefinierter Elemente auf einer Seite zu einem völlig undurchsichtigen Wirrwar führen kann, wenn man nicht äußerst sorgfältig vorgeht.

Webkomponenten zielen darauf ab, diese Probleme zu lösen. Bestehend aus drei Haupttechnologien, die gemeinsam eingesetzt werden können, um unterschiedliche und vielseitige benutzerdefinierte Elemente mit in sich gekapselter Funktionalität zu erstellen, die beliebig oft wiederverwendet werden können, ohne befürchten zu müssen, dass unterschiedlicher Code sich gegenseitig beeinflusst oder stört:

Die grundsätzliche Herangehensweise für das Implementieren einer Webkomponente sieht im Allgemeinen so aus:

  1. Erstellen einer Klasse oder einer Funktion, in der die Funktionalität der Webkomponente festgelegt wird. Falls Sie hierzu eine Klasse einsetzen, dann verwenden Sie die ECMAScript 2015-Syntax (siehe auch Klassen).
  2. Registrieren des neuen benutzerdefinierten Elements mithilfe der {{domxref("CustomElementRegistry.define()")}}-Methode. Dieser Methode werden der zu definierende Elementname, die Klasse bzw. Funktion, in der die Funktionalität definiert ist, sowie optional das Element, von dem das neue benutzerdefinierte Element erbt, übergeben.
  3. Falls erforderlich: Anfügen eines Schatten-DOMs zum benutzerdefinierten Element mithilfe der {{domxref("Element.attachShadow()")}}-Methode. Kindelemente, Ereignisbehandlungsroutinen usw. werden dem Schatten-DOM unter Verwendung der üblichen DOM-Methoden hinzugefügt.
  4. Falls erforderlich: Definieren einer HTML-Vorlage mithilfe von {{htmlelement("template")}} und {{htmlelement("slot")}}. Auch hier werden die üblichen DOM-Methoden verwendet, um die HTML-Vorlage anschließend zu kopieren und zum Schatten-DOM hinzuzufügen.
  5. Das so geschaffene benutzerdefinierte Element kann überall auf der Seite eingefügt werden — ebenso wie ein normales HTML-Element.

Übungen

Benutzerdefinierte Elemente
Zeigt, wie benutzerdefinierte Elemente eingesetzt werden können, um einfache Webkomponenten zu erzeugen, die Rückruffunktionen (Callbacks) innerhalb des Lebenszyklus' einer Webkomponente, sowie einige weitere, fortgeschrittene Bestandteile benutzerdefinierter Elemente.
Schatten-DOM
Wirft einen Blick auf die Grundlagen des Schatten-DOMs: Wie ein Schatten-DOM an ein Element angefügt wird, wie Elemente zum Baum des Schatten-DOMs hinzugefügt werden, wie Stile auf sie angewendet werden, und weiteres mehr.
Vorlagen und Einschübe
Zeigt, wie eine wiederverwendbare HTML-Struktur mithilfe der {{htmlelement("template")}} und {{htmlelement("slot")}}-Elemente definiert und diese Struktur anschließend innerhalb von Webkomponenten eingesetzt wird.

Referenz

Benutzerdefinierte Elemente

{{domxref("CustomElementRegistry")}}
Beinhaltet Methoden in Bezug auf benutzerdefinierte Elemente, insbesondere die {{domxref("CustomElementRegistry.define()")}}-Methode, die zum Registrieren neuer benutzerdefinierter Elemente verwendet wird, damit sie in einem Dokument verwendet werden können.
{{domxref("Window.customElements")}}
Liefert eine Referenz auf ein CustomElementRegistry-Objekt.
Rückruffunktionen innerhalb des Lebenszyklus
Spezielle Callback-Funktionen, die innerhalb der Klasse des benutzerdefinierten Steuerelements definiert sind und dessen Verhalten steuern:
Erweiterungen, um benutzerdefinierte eingebaute Elemente zu erzeugen
CSS Pseudoklassen
Pseudoklassen, die sich speziell auf benutzerdefinierte Elemente beziehen:

Schatten-DOM

{{domxref("ShadowRoot")}}
Repräsentiert die Wurzel-Node eines Schatten-DOM-Baums.
{{domxref("DocumentOrShadowRoot")}}
Ein Mixin, das diejenigen Merkmale definiert, die sowohl in einem Dokument als auch in der Wurzel-Node eines Schatten-DOM-Baums verfügbar sind.
{{domxref("Element")}}-Erweiterungen
Erweiterungen zur Element-Schnittstelle, die sich auf das Schatten-DOM beziehen:
Wichtige {{domxref("Node")}}-Erweiterungen
Erweiterung zur Node-Schnittstelle, die sich auf das Schatten-DOM beziehen:
{{domxref("Event")}}-Erweiterungen
Erweiterungen der Event-Schnittstelle, die sich auf das Schatten-DOM beziehen:

HTML-Vorlagen

{{htmlelement("template")}}
Beinhaltet ein HTML-Fragment, das nicht dargestellt wird, wenn das beinhaltende Dokument geladen wird. Es kann aber zur Laufzeit mit Hilfe von JavaScript angezeigt werden. Es wird hauptsächlich als Grundstruktur für benutzerdefinierte Elemente verwendet. Die dazugehörige DOM-Schnittstelle lautet: {{domxref("HTMLTemplateElement")}}.
{{htmlelement("slot")}}
Ein Platzhalter innerhalb einer Webkomponente, die mit benutzerdefiniertem Markup gefüllt werden kann. Auf diese Weise lassen sich unterschiedliche DOM-Fragmente mit der gleichen HTML-Vorlage erstellen, die alle gemeinsam dargestellt werden können. Die dazugehörige DOM-Schnittstelle lautet: {{domxref("HTMLSlotElement")}}.
Das globale slot HTML-Attribut
Weist einem Element einen Einschub innerhalb eines Schatten-DOM-Baums zu.
{{domxref("Slotable")}}
Ein Mixin, das sowohl von {{domxref("Element")}}- als auch {{domxref("Text")}}-Nodes implementiert wird. Es definiert Methoden, die es den jeweiligen Nodes erlauben, Inhalt eines {{htmlelement("slot")}}-Elements zu werden. Das Mixin definiert ein Attribute: {{domxref("Slotable.assignedSlot")}}, das eine Referenz auf den Einschub liefert, in den die Node eingefügt wurde.
{{domxref("Element")}}-Erweiterungen
Erweiterungen der Element-Schnittstelle, die sich auf Einschübe beziehen:
CSS Pseudoelemente
Pseudoelemente, die sich speziell auf Einschübe beziehen:
Das {{event("slotchange")}}-Ereignis
Wird auf einer {{domxref("HTMLSlotElement")}}-Instanz ({{htmlelement("slot")}}-Element) ausgelöst, wenn die Node(s), die sich im Einschub befinden, verändern.

Beispiele

Sie finden eine Reihe von Beispielen in unserem web-components-examples GitHub-Repository. Diesem Repository werden über die Zeit weitere Beispiele hinzugefügt.

Spezifikationen

Spezifikation Status Kommentar
{{SpecName("HTML WHATWG","scripting.html#the-template-element","<template> element")}} {{Spec2("HTML WHATWG")}} Definition von {{HTMLElement("template")}}.
{{SpecName("HTML WHATWG","scripting.html#the-slot-element","<slot> element")}} {{Spec2("HTML WHATWG")}} Definition von {{HTMLElement("slot")}}.
{{SpecName("HTML WHATWG","custom-elements.html#custom-elements","custom elements")}} {{Spec2("HTML WHATWG")}} Definition von benutzerdefinierten HTML Elementen.
{{SpecName("DOM WHATWG","#shadow-trees","shadow trees")}} {{Spec2("DOM WHATWG")}} Definition des Schatten-DOMs.
{{SpecName("HTML Imports", "", "")}} {{Spec2("HTML Imports")}} Erste HTML Importe-Definition.
{{SpecName("Shadow DOM", "", "")}} {{Spec2("Shadow DOM")}} Erste Schatten-DOM-Definition.

Browserkompatibilität

Grundsätzlich:

Um detaillierte Informationen zur Unterstützung spezifischer Merkmale einzelner Browser zu erhalten, ziehen sie bitte die oben genannten Referenzdokumente zu Rate.

Siehe auch