{"id":52744,"date":"2025-01-17T10:54:56","date_gmt":"2025-01-17T09:54:56","guid":{"rendered":"https:\/\/www.d-velop.de\/blog\/?p=52744"},"modified":"2025-09-24T11:47:47","modified_gmt":"2025-09-24T09:47:47","slug":"web-components","status":"publish","type":"post","link":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/","title":{"rendered":"Web Components: Erkl\u00e4rung, Einsatzszenarien &#038; Anwendung"},"content":{"rendered":"\n<p data-beyondwords-marker=\"a54403a7-f971-453b-8128-b85430ea32ca\">Komponenten sind aus der modernen Webentwicklung nicht mehr wegzudenken. In allen JavaScript-Frameworks mit etwas gr\u00f6\u00dferer Verbreitung, wie Svelte oder Vue, l\u00e4sst sich der Code in wiederverwendbaren Komponenten organisieren. Alle diese Frameworks haben jedoch gemeinsam, dass die Implementierung der jeweiligen Komponenten nur innerhalb des jeweiligen Frameworks funktioniert. Es ist nicht ohne weiteres m\u00f6glich, eine Svelte-Komponente in einer Vue-Anwendung zu benutzen oder umgekehrt. Daher ist es nicht verwunderlich, dass sich die K\u00f6pfe hinter den Webstandards eine L\u00f6sung \u00fcberlegt haben, wie sich Komponenten unabh\u00e4ngig von bestimmten Frameworks entwickeln und nutzen lassen. In diesem Prozess sind diverse Standards f\u00fcr HTML, DOM, CSS und JavaScript entstanden, die heute allgemein unter dem Begriff \u201eWeb Components\u201c zusammengefasst werden.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"3aac58ad-0956-476e-aed0-25ceaaeb8a16\" class=\"wp-block-heading\" id=\"h-einsatz-von-web-components-in-der-entwicklung-bei-d-velop\"><span class=\"ez-toc-section\" id=\"einsatz-von-web-components-in-der-entwicklung-bei-dvelop\"><\/span>Einsatz von Web Components in der Entwicklung bei d.velop<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"d8952465-ca41-43ea-9e3f-21d814e4130f\">Bei d.velop schauen wir ebenfalls gespannt auf diese Entwicklung. Seit einiger Zeit sind Web Components ein fester Teil in der Planung zuk\u00fcnftiger Features. Insbesondere wenn es um Themen wie eine zentrale Component Library oder Micro-Frontends geht, sind Web Components nicht mehr aus den K\u00f6pfen zu bekommen. Da wir diverse Frontend-Frameworks in verschiedenen Bereichen einsetzen, sind Web Components die ideale L\u00f6sung f\u00fcr eine umfassende Interoperabilit\u00e4t zwischen den Teams.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"7b10d9bc-9770-49cf-91f0-c26853a2572a\" class=\"wp-block-heading\" id=\"h-das-lernst-du-in-diesem-artikel-uber-web-components\"><span class=\"ez-toc-section\" id=\"das-lernst-du-in-diesem-artikel-ueber-web-components\"><\/span>Das lernst du in diesem Artikel \u00fcber Web Components<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"67e64177-f55b-4fbe-bc60-e0292e41d096\">In diesem Blogartikel&#8230;<\/p>\n\n\n\n<ul data-beyondwords-marker=\"e9c1aa25-4a84-48cd-b2a2-8cda2ffee538\" class=\"wp-block-list is-style-check\">\n<li data-beyondwords-marker=\"0ff7b2da-2463-4fad-8c25-7e35f14f4927\">erh\u00e4ltst du eine Einf\u00fchrung in das Thema der Komponenten, bis hin zu Web Components. <\/li>\n\n\n\n<li data-beyondwords-marker=\"69d59733-8b2d-4778-8aa5-f62491721896\">erf\u00e4hrst du, welche Standards das bilden, was wir als Web Components bezeichnen. <\/li>\n\n\n\n<li data-beyondwords-marker=\"394c3d27-0c8a-421f-8aff-ce76f9a1ff52\">lernst du, wie du eigene Web Components erstellen kannst, die du auf jeder beliebigen Webseite einbinden und benutzen kannst. <\/li>\n\n\n\n<li data-beyondwords-marker=\"6d8d14e6-df6c-45ef-8e1b-71bbd1deace3\">erlangst eine Einsch\u00e4tzung, f\u00fcr welche Zwecke Web Components geeignet sind und wo du besser doch noch auf die klassischen Frameworks setzen solltest.<\/li>\n<\/ul>\n\n\n\n<h2 data-beyondwords-marker=\"c339c575-1e81-4f8a-9e83-2800bb49e685\" class=\"wp-block-heading\" id=\"h-entstehungsgeschichte-der-lange-weg-zu-komponenten\"><span class=\"ez-toc-section\" id=\"entstehungsgeschichte-der-lange-weg-zu-komponenten\"><\/span>Entstehungsgeschichte: Der lange Weg zu Komponenten<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"b3a8bbaa-6bb0-4590-acab-7ca12ca9d912\">Wer Anfang der 2000er Jahre oder fr\u00fcher mit Webentwicklung angefangen hat, wird sich \u00fcber Komponenten vermutlich noch wenige Gedanken gemacht haben. Zumindest gab es keine (allgemein bekannten) Frameworks, die solche Komponenten unterst\u00fctzten, wie wir sie heute kennen. Zu Zeiten, in denen jQuery noch der Standard der Webentwicklung war, hat man JavaScript allenfalls \u00fcber Dateien modularisiert. Das HTML der Webseiten wurde ohnehin \u00fcber L\u00f6sungen wie PHP oder JavaEE gerendert, weswegen es f\u00fcr Frontend-Komponenten gar nicht den gro\u00dfen Bedarf gab wie heute.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"434d6d83-9c99-4d35-95a2-afa942920888\" class=\"wp-block-heading\" id=\"h-angularjs-erblickte-2010-das-licht-der-welt\">AngularJS erblickte 2010 das Licht der Welt <\/h3>\n\n\n\n<p data-beyondwords-marker=\"f8e5bf39-519b-4b7e-b4f0-f2aeb523d3c4\">W\u00e4hrend die F\u00e4higkeiten von JavaScript mit der Zeit immer weiter zunahmen, wanderte nach und nach auch immer mehr Logik vom Server in den Browser. Als schlie\u00dflich 2010 AngularJS das Licht der Welt erblickte, rollte so langsam die Welle los, auf serverseitiges Rendern vom HTML zu verzichten. Alles wurde nun im Browser gemacht. Der Server diente nur noch dazu, die statischen Assets auszuliefern und Daten hin- und herzuschicken. Mit dem Erfolg weiterer Frameworks, wie React und Vue, wurden immer mehr individuell entwickelten Webseiten nur noch browserseitig gerendert.<\/p>\n\n\n\n<p data-beyondwords-marker=\"db7ccd70-8cf8-4d38-83af-b7e6116ea586\">Was viele sicherlich jedoch nicht wissen, ist, dass die Entwickler der Webstandards auch schon sehr fr\u00fch in diesem Prozess \u00fcber das Thema Komponenten bzw. Modularisierung nachgedacht haben. Der erste Standard in diesem Bereich, Shadow DOM v0, wurde bereits 2011 von den ersten Browsern unterst\u00fctzt. Auch wenn diese ersten Standards, Shadow DOM v0, HTML Imports und Custom Elements v0, heute schon lange durch neue und bessere Standards ersetzt wurden, sah man so sehr fr\u00fch die Bestrebungen, JavaScript zu einer vollwertigen Browser-Programmiersprache auszubauen. Und Teil dieser Bestrebungen war dann auch die M\u00f6glichkeit, Bestandteile von Webseiten mit Komponenten zu modularisieren.<\/p>\n\n\n\n<div data-beyondwords-marker=\"e362ee9a-9874-4095-885e-594da2cd5030\" class=\"wp-block-group is-style-info-explanation\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 data-beyondwords-marker=\"fa5eebdf-73e8-4a6a-9cd5-c8840147c531\" class=\"wp-block-heading\" id=\"h-was-sind-web-components\"><span class=\"ez-toc-section\" id=\"was-sind-web-components\"><\/span>Was sind Web Components?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"e3535ff9-acf2-4584-8f51-1ac01e8b0d56\">Der Begriff <strong>Web Components<\/strong> ist im Grunde eine Art Marketingbegriff. F\u00fcr sich selbst ist das kein Webstandard. Dahinter verbirgt sich ein Konzept, welches sich aus mehreren Webstandards zusammensetzt. Mit einer Web Component kannst du eigene HTML-Elemente definieren, die du wie jedes andere HTML-Element verwenden kannst. Dabei beinhaltet das neue HTML-Element alle notwendigen Teile, von eigenem HTML-Inhalt, \u00fcber Styling, bis zu JavaScript-Logik. Dabei sind die Inhalte genauso von der restlichen Webseite abgekapselt, wie zum Beispiel die interne Struktur eines <code>&lt;input&gt;<\/code>-Elements.<\/p>\n\n\n\n<p data-beyondwords-marker=\"42e2c08d-d4bd-4c57-9db2-038256052b39\">Unter Web Components fallen diverse Webstandards, von denen das hier die wichtigsten sind:<\/p>\n\n\n\n<ul data-beyondwords-marker=\"4a76c098-daf9-4382-8b8c-4d98fda63c1d\" class=\"wp-block-list is-style-idea\">\n<li data-beyondwords-marker=\"440ddb26-6142-4aae-8bad-85a4fed6d239\">Custom Elements<\/li>\n\n\n\n<li data-beyondwords-marker=\"440ddb26-6142-4aae-8bad-85a4fed6d239\">Shadow DOM<\/li>\n\n\n\n<li data-beyondwords-marker=\"f8529ce5-8425-4031-9f67-589952bf32c8\">HTML Template<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n\n<h2 data-beyondwords-marker=\"83972015-f2b7-42e4-aa98-1a73a3e5142d\" class=\"wp-block-heading\" id=\"h-die-wichtigsten-webstandards-erklart\"><span class=\"ez-toc-section\" id=\"die-wichtigsten-webstandards-erklaert\"><\/span>Die wichtigsten Webstandards erkl\u00e4rt<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 data-beyondwords-marker=\"9256c0f5-ffca-4797-bcc3-10c67b4e153b\" class=\"wp-block-heading\" id=\"h-custom-elements\">Custom Elements<\/h3>\n\n\n\n<p data-beyondwords-marker=\"eca4b511-6e6b-4008-a6fd-e8f0a5e41975\">Custom Elements sind die zentrale Schnittstelle, damit du aus einer JavaScript-Klasse eine Web Component machen kannst. Dazu musst du erst einmal nur zwei Dinge tun. Als Erstes leite deine Klasse von <code>HTMLElement<\/code> ab. Als Zweites definiere f\u00fcr die Klasse ein Tag, welches im HTML verwendet werden kann. Dabei muss das Tag nach Spezifikation mindestens einen Bindestrich beinhalten, damit es keine Kollisionen mit den Standard-Tags gibt. Am besten siehst du das in dem Codebeispiel.<\/p>\n\n\n\t<div data-beyondwords-marker=\"68caba8e-8e5a-4a02-9ebc-c692e40d4a59\" class=\"dv-embed-gist\">\n\t\t<div class=\"dv-embed-gist__wrapper\">\n\t\t\t\t\t\t<script src=\"https:\/\/gist.github.com\/dvelop-blog\/170f22b3bd2d471531c4d0c713b33872.js?file=web-components-01\"><\/script>\n\t\t<\/div>\n\t<\/div>\n\t\n\n\n<p data-beyondwords-marker=\"d61c7f90-b611-4705-b353-fe2777634722\"><br>Innerhalb der Klasse hast du jetzt verschiedene M\u00f6glichkeiten, festzulegen, was genau in deiner Komponente f\u00fcr Inhalt gerendert werden soll und wie dieser gestylet werden soll. Au\u00dferdem kannst du auf verschiedene Browserevents reagieren und deine Web Component perfekt f\u00fcr Accessibility und als Formularelemente konfigurieren. Mehr dazu findest du weiter unten.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"a589f0ac-1d48-46a2-867b-0ca0cde0f663\" class=\"wp-block-heading\" id=\"h-shadow-dom\">Shadow DOM<\/h3>\n\n\n\n<p data-beyondwords-marker=\"8d5f35cc-0d09-4d99-bd1c-cfa67e958065\">Ein Shadow DOM ist ein besonderer Bereich im normalen DOM des Browsers. Normalerweise kannst du \u00fcber Funktionen wie document.querySelector() alle Elemente im DOM finden und manipulieren. Inhalte von einem Shadow DOM sind daf\u00fcr jedoch unsichtbar. Wenn du dort Inhalte finden und manipulieren willst, brauchst du die Instanz des jeweiligen Shadow DOMs. Solltest du mehrere Shadow DOMs haben, sogar verschachtelt, dann sind diese auch untereinander vollst\u00e4ndig unabh\u00e4ngig. Web Components setzen grundlegend auf Shadow DOM, um Inhalte zu rendern. Alle Inhalte, die du innerhalb deiner Komponente rendern willst, renderst du innerhalb eines eigenen Shadow DOM Bereichs. Das Codebeispiel zeigt, wie du einen Shadow DOM in deiner Komponente erzeugen und benutzen kannst.<\/p>\n\n\n\t<div data-beyondwords-marker=\"c0b99b83-28db-4b08-91ba-b3488e30c827\" class=\"dv-embed-gist\">\n\t\t<div class=\"dv-embed-gist__wrapper\">\n\t\t\t\t\t\t<script src=\"https:\/\/gist.github.com\/dvelop-blog\/170f22b3bd2d471531c4d0c713b33872.js?file=web-components-02\"><\/script>\n\t\t<\/div>\n\t<\/div>\n\t\n\n\n<h2 data-beyondwords-marker=\"4150de8b-a7ee-438f-927c-30d8752708c6\" class=\"wp-block-heading\" id=\"h-html-templates\"><span class=\"ez-toc-section\" id=\"html-templates\"><\/span><br>HTML Templates<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"7cf0e698-5717-4d31-b3a3-43518a4efdad\">HTML Templates sind eine Art Kopiervorlage f\u00fcr HTML-Bl\u00f6cke, die selbst erst einmal nicht gerendert werden. Wenn der Inhalt deiner Web Component dynamische Teile beinhaltet, kannst du die entsprechenden HTML-Bestandteile in HTML Templates verpacken und so \u00fcber JavaScript dynamisch zum sichtbaren DOM hinzuf\u00fcgen. Dadurch sparst du dir eine Menge <code>document.createElement()<\/code> Aufrufe.<\/p>\n\n\n\t<div data-beyondwords-marker=\"d3cfce19-f5ef-4763-aa19-be18220cd447\" class=\"dv-embed-gist\">\n\t\t<div class=\"dv-embed-gist__wrapper\">\n\t\t\t\t\t\t<script src=\"https:\/\/gist.github.com\/dvelop-blog\/170f22b3bd2d471531c4d0c713b33872.js?file=web-components-03\"><\/script>\n\t\t<\/div>\n\t<\/div>\n\t\n\n\n<h2 data-beyondwords-marker=\"01a2e1fd-9115-4d33-9b21-6c686a37fefd\" class=\"wp-block-heading\" id=\"h-wie-erstelle-ich-eine-eigene-web-component\"><span class=\"ez-toc-section\" id=\"wie-erstelle-ich-eine-eigene-web-component\"><\/span><br>Wie erstelle ich eine eigene Web Component?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 data-beyondwords-marker=\"369e3ae6-fa50-4fd2-b609-8866fa1ec358\" class=\"wp-block-heading\" id=\"h-der-lebenszyklus-einer-komponente\">Der Lebenszyklus einer Komponente<\/h3>\n\n\n\n<p data-beyondwords-marker=\"6f3c07b8-0773-46fe-b1ee-77b6ff0b1887\">Nachdem du jetzt die drei grundlegenden Webstandards kennengelernt hast, kannst du tiefer darin einsteigen, deine eigene Web Component zu schreiben. Wie schon erw\u00e4hnt, sind Web Components JavaScript-Klassen, die von HTMLElement erben. Dabei werden dir als Entwickler mehrere sogenannte Lifecycle-Callbacks bereitgestellt, mit denen du auf verschiedene Events reagieren kannst.<\/p>\n\n\n\t<div data-beyondwords-marker=\"d7c4c816-ce6c-4f9a-9b3a-3ff825e1f5a6\" class=\"dv-embed-gist\">\n\t\t<div class=\"dv-embed-gist__wrapper\">\n\t\t\t\t\t\t<script src=\"https:\/\/gist.github.com\/dvelop-blog\/170f22b3bd2d471531c4d0c713b33872.js?file=web-components-04\"><\/script>\n\t\t<\/div>\n\t<\/div>\n\t\n\n\n<p data-beyondwords-marker=\"29fbfb5c-7107-424a-88b6-8417613d3ae3\">Der Konstruktur wird aufgerufen, sobald eine neue Instanz der Komponente, ein Element, erstellt wird. An dieser Stelle ist die Komponente jedoch noch nicht zum DOM hinzugef\u00fcgt worden. Au\u00dferdem kannst du hier noch nicht mit den Attributen des Elements arbeiten. Aber das ist der beste Zeitpunkt, um den Shadow DOM zu initialisieren und die interne HTML-Struktur aufzubauen. Diese Stelle hat den Vorteil, dass noch kein anderer Code au\u00dferhalb mit dem Element interagieren konnte. Das ist zum Beispiel dann relevant, wenn jemand das Element dynamisch \u00fcber <code>\"document.createElement('my-input')\"<\/code> oder &#8222;new My<code>InputComponent(<\/code>)&#8220; erzeugt. Dann k\u00f6nnte der \u201eexterne\u201c Code schon versuchen, mit deiner Komponente zu interagieren, bevor die Komponete Teil vom DOM geworden ist und der <code>connectedCallback()<\/code> aufgerufen wurde.<\/p>\n\n\n\n<p data-beyondwords-marker=\"41212818-d3d0-4ca7-8c6a-56cf2a02d312\">Der <code>connectedCallback()<\/code> und <code>disconnectedCallback()<\/code> wird aufgerufen, wenn das Element zum DOM hinzugef\u00fcgt bzw. entfernt wird. Im <code>connectedCallback()<\/code> kannst du auch erstmals mit den Attributen deines Elements interagieren. Der <code>adoptedCallback()<\/code> ist ein Spezialfall, der nur dann relevant wird, wenn du ein Element zwischen verschiedenen Frames verschiebst.<\/p>\n\n\n\n<p data-beyondwords-marker=\"6ca22001-d3b4-4c06-a0b8-53a956386c60\">Der <code>attributeChangedCallback()<\/code> wird dann wichtig, wenn deine Komponente Attribute haben soll. Dieser Callback wird bei jeder \u00c4nderung der Attribute aufgerufen, die du daf\u00fcr registriert hast. Setze dazu in der Klasse das statische Feld <code>\"observedAttributes\"<\/code>, entweder als Variable oder als getter. Beachte jedoch, das HTML bei Attributen nur Kleinschreibung erlaubt.<\/p>\n\n\n\t<div data-beyondwords-marker=\"d85644dc-0b22-4729-b8b9-5ba88167907c\" class=\"dv-embed-gist\">\n\t\t<div class=\"dv-embed-gist__wrapper\">\n\t\t\t\t\t\t<script src=\"https:\/\/gist.github.com\/dvelop-blog\/170f22b3bd2d471531c4d0c713b33872.js?file=web-components-05\"><\/script>\n\t\t<\/div>\n\t<\/div>\n\t\n\n\n<h3 data-beyondwords-marker=\"bf6f96b4-46fd-4287-8c53-a5055d59b0f5\" class=\"wp-block-heading\" id=\"h-template-und-styles-definieren\">Template und Styles definieren<\/h3>\n\n\n\n<p data-beyondwords-marker=\"2c8f44d3-0846-4c44-9079-d54c29ed2c28\">Deine Web Component soll nat\u00fcrlich auch einen Inhalt haben, und mit entsprechendem Styling versehen sein. Dazu bieten dir die Custom Elements verschiedene Wege, um das abzubilden. Der einfachste Weg, Inhalt zu deiner Komponente hinzuzuf\u00fcgen, ist, dass du die einzelnen Elemente \u00fcber document.createElement() erzeugst und dann zum Shadow DOM hinzuf\u00fcgst, so wie es oben in dem Shadow DOM Beispiel gezeigt wurde. Wenn deine Komponente nur wenig Inhalt hat, ist das auch ein wunderbarer Weg, aber sp\u00e4testens bei komplexeren Inhalten, wird es umst\u00e4ndlich. Hier kannst du ganz einfach auf die innerHTML-Eigenschaft vom Shadow DOM zur\u00fcckgreifen und so ein komplettes HTML-Snippet dem shadowRoot hinzuf\u00fcgen. Du kannst auch ein slot-Element zu dem Inhalt hinzuf\u00fcgen. Wenn jemand deine Komponente benutzt, und weiteres HTML zwischen das Start- und End-Tag schreibt, wird dieser Abschnitt im DOM an der Stelle des Slots dynamisch eingef\u00fcgt und gerendert. Um mehrere unabh\u00e4ngige Slot-Bereiche in der Komponente zu definieren, kannst du sogenannte named-Slots verwenden<\/p>\n\n\n\n<p data-beyondwords-marker=\"50b4a557-71bf-484c-bc08-3a812ccd3be5\">Um Styles zu definieren, gibt es drei verschiedene Varianten. Die ersten beiden Varianten kennst du auch schon, wenn du ganz normal HTML schreibst. Als Erstes kannst du ein link-Tag mit einer CSS-Datei in den shadowRoot einf\u00fcgen, so wie du es sonst im head-Bereich einer HTML-Seite machen w\u00fcrdest. So kannst du auch dieselben Styles in mehrere Web Components einf\u00fcgen. Als Zweites kannst du in dein shadowRoot ein einfaches style-Tag einf\u00fcgen und darin die Styles definieren. Sauberer als ein style-Tag ist aber der dritte Weg, der \u00fcber die sogenannte Adopted Stylesheets funktioniert. Adopted Styles Sheets sind eine M\u00f6glichkeit, CSS zu deiner Komponente hinzuzuf\u00fcgen, ohne das diese unmittelbar Bestandteil des DOM sind, aber trotzdem f\u00fcr das Styling angewendet werden. Du kannst das Vergleichen mit den Standard-Styles, die jeder Browser f\u00fcr zum Beispiel \u00dcberschriften oder Abs\u00e4tze mitbringt.<\/p>\n\n\n\n<p data-beyondwords-marker=\"b5cd41ce-a289-4b56-b9f6-87506735af51\">In diesem Codebeispiel siehst du die Verwendung von HTML \u00fcber <code>innerHTML<\/code> und die Adopted Styles Sheets.<\/p>\n\n\n\t<div data-beyondwords-marker=\"5fea6ab1-7ea9-4628-ae5e-dcd49a51bf8a\" class=\"dv-embed-gist\">\n\t\t<div class=\"dv-embed-gist__wrapper\">\n\t\t\t\t\t\t<script src=\"https:\/\/gist.github.com\/dvelop-blog\/170f22b3bd2d471531c4d0c713b33872.js?file=web-components-06\"><\/script>\n\t\t<\/div>\n\t<\/div>\n\t\n\n\t<div data-beyondwords-marker=\"1a165e45-faca-4688-9967-7aded9e48b7c\" class=\"dv-embed-gist\">\n\t\t<div class=\"dv-embed-gist__wrapper\">\n\t\t\t\t\t\t<script src=\"https:\/\/gist.github.com\/dvelop-blog\/170f22b3bd2d471531c4d0c713b33872.js?file=web-components-07\"><\/script>\n\t\t<\/div>\n\t<\/div>\n\t\n\n\n<h3 data-beyondwords-marker=\"1b58827d-b0f6-4cd5-80e8-03d396ab8b3f\" class=\"wp-block-heading\" id=\"h-die-web-component-als-formularelement\">Die Web Component als Formularelement<\/h3>\n\n\n\n<p data-beyondwords-marker=\"f0fc94c5-642d-4f07-ace2-593b454c6d48\">Wenn deine Web Component ein Formularelement darstellen soll, etwa ein spezielles Eingabefeld, kannst du deine Komponente so erweitern, dass sie sich in ein HTML-Formular integriert. Wenn du ein HTML-Formular auf deiner Webseite hast und der Anwendedne das Formular abschickt, passieren im Hintergrund mehrere Dinge. Als Erstes pr\u00fcft der Browser, ob es f\u00fcr die Formularelemente Validierungsregeln gibt und wertet diese aus. Wenn eine Validierung fehlschl\u00e4gt, wird dem Anwendenden eine entsprechende Fehlermeldung angezeigt. Passt alles, sammelt der Browser als N\u00e4chstes die Inhalte von allen Formularfeldern und schickt diese an den definierten Endpunkt, oder die Formularinhalte lassen sich per JavaScript abrufen.<\/p>\n\n\n\n<p data-beyondwords-marker=\"bf8d123e-b757-4c11-989a-b705b1e199f1\">In diesem Prozess kannst du dich mit deiner Komponente einh\u00e4ngen. Als Erstes musst du in der Klasse deiner Komponente eine statische Variable mit dem Namen <code>\"formAssociated\"<\/code> definieren und auf <code>\"true\"<\/code> setzen. Au\u00dferdem musst du dir im Konstruktur eine Instanz der ElementInternals holen und in einer privaten Variable der Klasse speichern, das geht \u00fcber <code>\"this.#internals = this.attachInternals()\"<\/code>. Zudem musst du bei der Verwendung deiner Komponente in einem Formular nat\u00fcrlich das name-Attribut setzen.<\/p>\n\n\n\n<p data-beyondwords-marker=\"5990b394-8ed8-422d-b537-da42535b0d4b\">Innerhalb deiner Web Component kannst du jetzt \u00fcber <code>\"this.#internals.setFormValue(\u2026)\"<\/code> festlegen, welchen &#8222;value&#8220; deine Komponente als Formularelement aktuell hat. Dieser Value wird beim Absenden des Formulars verwendet. \u00dcber <code>\"this.#internals.setValidity(\u2026)\"<\/code> legst du fest, ob der aktuelle Value g\u00fcltig ist oder nicht. Das ist wichtig f\u00fcr die automatische Validierung des Browsers. Wenn du als einzigen Parameter ein leeres Objekt \u00fcbergibst, bedeutet das, dass der Value die Validierung besteht. Um eine fehlgeschlagene Validierung zu melden, brauchst du drei Parameter. Der erste Parameter, ein Objekt, zeigt an, von welchem Typ der Fehler ist. Als zweiter Parameter wird ein Text angegeben, der dem Anwender angezeigt wird. Der dritte Parameter ist ein Element innerhalb des shadowRoot, an welchem der Browser die Validierungsmeldung anzeigt. Welche Inhalte f\u00fcr den ersten Parameter erlaubt sind, kannst du in den <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/ElementInternals\/setValidity#parameters\">MDN Web Docs<\/a> nachlesen.<\/p>\n\n\n\n<p data-beyondwords-marker=\"47395a37-8409-4409-94b3-a49c6f7a65cd\">Normalerweise zeigt der Browser Validierungsmeldungen nur an, wenn der Anwender das Formular absenden will. Du kannst den Browser jedoch auch anweisen, die Validierungsmeldung direkt anzuzeigen. Daf\u00fcr musst du lediglich die Funktion <code>\"this.#internals.reportValidity()\"<\/code> ohne Parameter aufrufen.<\/p>\n\n\n\n<h2 data-beyondwords-marker=\"190f802f-c8be-43d9-8b3e-78b781415f6b\" class=\"wp-block-heading\" id=\"h-barrierefreiheit-fur-web-components\"><span class=\"ez-toc-section\" id=\"barrierefreiheit-fuer-web-components\"><\/span>Barrierefreiheit f\u00fcr Web Components<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"6d59695c-8a96-4255-a54c-39d707f47902\">Das Thema <a href=\"https:\/\/www.d-velop.de\/themen\/barrierefreiheit-software\">Barrierefreiheit<\/a> wurde in der Webentwicklung lange Zeit gar nicht oder nur sehr widerwillig behandelt, auch wenn Menschen mit Beeintr\u00e4chtigungen schon immer eine relevante Nutzergruppe des Internets waren. Sp\u00e4testens seit Vorgaben wie der <a href=\"https:\/\/www.d-velop.de\/blog\/branchenprozesse\/bitv-2-0\/\">BITV 2.0<\/a> oder dem Barrierefreiheitsst\u00e4rkungsgesetz (European Accessibility Act) m\u00fcssen sich jedoch alle Webentwickler mit diesem Thema auseinandersetzen. HTML und JavaScript haben schon lange viele Optionen, Webseiten so zu gestalten, dass sie etwa einwandfrei per Tastatursteuerung oder mittels Screenreader bedienbar sind. Das sind nur zwei von mehreren Themen der Barrierefreiheit.<\/p>\n\n\n\n<p data-beyondwords-marker=\"138660b2-070b-4670-ac1b-49dd0744f033\">Auch Web Components bieten dir nat\u00fcrlich einige M\u00f6glichkeiten f\u00fcr Barrierefreiheit an. Wenn es um Themen wie Styling oder Tastatursteuerung geht, hast du in deiner Komponente die M\u00f6glichkeiten, die du auch sonst in HTML und CSS hast. Gerade beim Thema Screenreader sind Definitionen f\u00fcr ARIA (Accessible Rich Internet Applications) wichtig, also zum Beispiel sowas wie <code>\"aria-disabled\"<\/code> oder <code>\"aria-label\"<\/code>. Mit diesen Definitionen kannst du genau festlegen, was ein bestimmtes Element bedeutet und welchen Status es aktuell hat. Es geht dabei um Informationen, die f\u00fcr normalsehende Menschen in der Regel visuell erfassbar sind, aber f\u00fcr Screenreader nicht sichtbar sind. Zum Beispiel kann ein Screenreader nicht vorlesen, ob ein Input-Element gerade deaktiviert ist, wenn dieser Status nur \u00fcber JavaScript und CSS geregelt wird. W\u00e4hrend das f\u00fcr Standard-Elemente browserseitig definiert ist, musst du dich bei eigenen Komponenten selbst darum k\u00fcmmern und ARIA-Definitionen verwenden. Auch wenn deine Web Component zum Beispiel einen Button darstellt, wei\u00df der Screenreader nicht, dass das ein Button sein soll. Um das zu definieren, musst du zum Beispiel das Attribut <code>role=\"button\"<\/code> an deiner Komponente setzen. Eine Liste aller Rollen findest du in den <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Accessibility\/ARIA\/Roles\">MDN Web Docs<\/a>. Neben der <code>role<\/code> gibt es auch noch weitere ARIA-Attribute, mit denen du dem Screenreader zum Beispiel mitteilen kannst, dass deine Komponente aktuell deaktiviert ist. Oder wenn deine Komponente einen Bereich hat, der sich auf- und zuklappen l\u00e4sst, kannst du diesen Status auch \u00fcber ARIA-Attribute bekannt machen. Eine Liste der verf\u00fcgbaren Attribute findest du auch hier wieder in den <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Accessibility\/ARIA\/Attributes\">MDN Web Docs<\/a>.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"40583752-7ba4-4a8c-90c6-0991e3c86962\" class=\"wp-block-heading\" id=\"h-wie-geht-das-aber-jetzt-in-einer-web-component\">Wie geht das aber jetzt in einer Web Component? <\/h3>\n\n\n\n<p data-beyondwords-marker=\"bc6d8ebe-5804-4805-86ab-35076de47399\">F\u00fcr die <code>role<\/code> musst du leider, nach offizieller Spezifikation, innerhalb deiner Komponente direkt das role-Attribut im DOM setzen. Dazu pr\u00fcftst du im <code>\"connectedCallback()\"<\/code>, ob nicht schon von au\u00dfen eine <code>role<\/code> gesetzt wurde, und setzt dann deine role per <code>\"this.role = 'button'\"<\/code>. F\u00fcr die anderen ARIA-Attribute kannst du wieder die ElementInternals benutzen, die du auch f\u00fcr Formularlemente brauchst. Mit den ElementInternals kannst du auch schon im Konstruktur Aufrufe wie <code>\"this.#internals.ariaDisabled = 'true'\"<\/code> ausf\u00fchren, um dem Screenreader mitzuteilen, dass die Komponente gerade deaktiviert ist. Du kannst die ARIA-Attribute nat\u00fcrlich auch an jeder anderen Stelle, zum Beispiel in den Lifecycle-Callbacks, innerhalb deiner Komponente setzen.<\/p>\n\n\n\t<div data-beyondwords-marker=\"6a42ce56-af5b-4da1-88f1-f5e92c68d3e9\" class=\"dv-embed-gist\">\n\t\t<div class=\"dv-embed-gist__wrapper\">\n\t\t\t\t\t\t<script src=\"https:\/\/gist.github.com\/dvelop-blog\/170f22b3bd2d471531c4d0c713b33872.js?file=web-components-08\"><\/script>\n\t\t<\/div>\n\t<\/div>\n\t\n\n\n<h2 data-beyondwords-marker=\"b4caaeb1-e1b7-4ac9-bb4f-62cc1add3e5e\" class=\"wp-block-heading\" id=\"h-wofur-benotige-ich-web-components\"><span class=\"ez-toc-section\" id=\"wofuer-benoetige-ich-web-components\"><\/span>Wof\u00fcr ben\u00f6tige ich Web Components?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p data-beyondwords-marker=\"d8f74590-9493-4773-b79d-241167a7c355\">Sind jetzt Web Components die alleinige Zukunft der Webentwicklung? Vermutlich nicht. Die bekannten Frameworks wie Svelte oder Vue oder zuk\u00fcnftige Alternativen werden sicherlich weiterhin die individuelle Webentwicklung dominieren. Diese Frameworks haben Vorteile, die sich mit Web Components aktuell nicht oder nur schwer abbilden lassen. Zum Beispiel ist das Thema Server-Side Rendering schwierig. Meta-Frameworks wie SvelteKit und Vue arbeiten f\u00fcr Server-Side Rendering nicht mit einem DOM im Backend, welcher f\u00fcr das Rendering von Web Components jedoch zwingend notwendig ist. Das Framework Lit hat zwar eine (zum Ver\u00f6ffentlichungszeitpunkt des Artikels) experimentelle Funktion, um mit einem abgespeckten DOM Web Components server-seitig zu rendern. Aber diese Funktion m\u00fcsste erst noch als Plugin in die Compile- oder Render-Pipelines der bestehenden Meta-Frameworks integriert werden, und das funktioniert nat\u00fcrlich nur mit Web Components, die auch mit Lit erstellt wurden. Aber auch andere Funktionen, wie verschiedene Optimierungen f\u00fcr Laufzeit und Performance, sind mit Web Components schwerer abbildbar. Solltest du Web Components jetzt lieber doch nicht verwenden?<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"9b6f6309-a3f9-4dd9-99df-6ec5c27d2ad9\" class=\"wp-block-heading\" id=\"h-es-kommt-ganz-auf-deinen-einsatzzweck-an\">Es kommt ganz auf deinen Einsatzzweck an. <\/h3>\n\n\n\n<p data-beyondwords-marker=\"55168034-043b-49c3-9682-567dd097e73b\">Web Components sind vollkommen unabh\u00e4ngig vom verwendeten Framework. Egal, ob du Angular, React, Svelte, Vue, Solid, andere oder gar kein Framework einsetzt, kannst du Web Components verwenden. Das macht Web Components zu dem perfekten Werkzeug, wenn du etwa eine <strong>\u00fcbergreifende Komponentenbibliothek<\/strong> entwickeln m\u00f6chtest. Anstatt die Library mehrfach f\u00fcr verschiedene Frameworks zu entwickeln, brauchst du nur einmal Web Components bereitzustellen. Oder ihr habt verschiedene Teams, die mit verschiedenen Frameworks arbeiten, aber Komponenten f\u00fcr eine zentrale oder \u00fcbergreifende Nutzung bereitstellen sollen. Viele moderne Frameworks bieten auch an, ihre Komponenten als Web Components zu exportieren. Als Beispiel lassen sich die \u201e<a href=\"https:\/\/m3.material.io\/develop\/web\">Material Web Components<\/a>\u201c nennen, eine Komponentenbibliothek von Google f\u00fcr Material Design. Hier stellt Google Web Components bereit, die direkt in jedem Projekt verwendet werden k\u00f6nnen, und au\u00dferdem mit einem Framework entwickelt wurden.<\/p>\n\n\n\n<h3 data-beyondwords-marker=\"560cc7bd-4d5d-4139-b22c-5846a2fed666\" class=\"wp-block-heading\" id=\"h-das-allheilmittel-fur-webentwicklung-sind-web-components-nicht\">Das Allheilmittel f\u00fcr Webentwicklung sind Web Components nicht.<\/h3>\n\n\n\n<p data-beyondwords-marker=\"37a15e3f-e527-4745-865b-fd84380237d1\">Dennoch haben sie ihre Daseinsberechtigung und werden zuk\u00fcnftig sicherlich immer h\u00e4ufiger zu sehen sein. Mit den M\u00f6glichkeiten, die du jetzt schon mit Web Components hast, kannst du auch bereits die meisten Anwendungsf\u00e4lle, f\u00fcr die Komponenten gebraucht werden, abbilden. In Kombination mit weiteren neuen und kommenden Web-Features sind Web Components auf jeden Fall ein wichtiger Meilenstein auf dem Weg in eine Webentwicklungs-Welt, in der natives und standardisiertes JavaScript, HTML und CSS wieder mehr in den Fokus r\u00fcckt.<\/p>\n\n\n\n<div data-beyondwords-marker=\"ac326264-5db1-49b3-b8e6-0dd9594f1186\" class=\"wp-block-group is-style-cta\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 data-beyondwords-marker=\"d0187c2c-b060-4fd0-baa9-6a4c1efd4e86\" class=\"wp-block-heading\" id=\"h-dein-job-nbsp-in-der-nbsp-entwicklung-bei-d-velop-wartet-auf-dich\">Dein Job&nbsp;in der&nbsp;<strong>Entwicklung bei d.velop<\/strong><br>wartet auf Dich!<\/h3>\n\n\n\n<p data-beyondwords-marker=\"f50a8153-c976-480e-9ea3-8cc33e6b967b\">Entwickeln ist bei uns nicht einfach nur ein Job, sondern eine Leidenschaft. Wir stehen hinter unserem Code, den wir zusammen mit \u00fcber 200 Personen in unseren agilen, crossfunktionalen Teams in der Entwicklung schaffen.<\/p>\n\n\n\n\t<div data-beyondwords-marker=\"c2364a05-41cf-412b-9934-e65fc9864ea3\" class=\"wp-block-buttons\">\n\t\t<div class=\"wp-block-button is-style-outline\">\n\t\t\t<a class=\"wp-block-button__link\" href=\"https:\/\/karriere.d-velop.de\/stellenanzeigen\/?_departments=entwicklung&#038;utm_campaign=Sonstiges+-+d.velop+BLOG+-+01%2F2018&#038;utm_source=intern-blog-ger&#038;utm_medium=blogpost-web-components&#038;utm_content=button\" target=\"_blank\">Offene Stellen entdecken<\/a>\t\t<\/div>\n\t<\/div>\n\n\t<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Komponenten sind aus der modernen Webentwicklung nicht mehr wegzudenken. In allen JavaScript-Frameworks mit etwas gr\u00f6\u00dferer Verbreitung, wie Svelte oder Vue, [&hellip;]<\/p>\n","protected":false},"author":292,"featured_media":52769,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","beyondwords_generate_audio":"1","beyondwords_project_id":"23937","beyondwords_content_id":"2f97f64d-18d9-4ef7-ae0b-846cb5c89cf6","beyondwords_preview_token":"b3cfe5e3-ac48-4887-9023-56cc6813bd7b","beyondwords_player_content":"","beyondwords_player_style":"","beyondwords_language_id":"","beyondwords_title_voice_id":"","beyondwords_body_voice_id":"","beyondwords_summary_voice_id":"","beyondwords_error_message":"","beyondwords_disabled":"1","beyondwords_delete_content":"","beyondwords_podcast_id":"2f97f64d-18d9-4ef7-ae0b-846cb5c89cf6","beyondwords_hash":"","publish_post_to_speechkit":"","speechkit_hash":"","speechkit_generate_audio":"","speechkit_project_id":"","speechkit_podcast_id":"","speechkit_error_message":"","speechkit_disabled":"","speechkit_access_key":"","speechkit_error":"","speechkit_info":"","speechkit_response":"","speechkit_retries":"","speechkit_status":"","speechkit_updated_at":"","_speechkit_link":"","_speechkit_text":""},"categories":[7],"tags":[6573],"class_list":["post-52744","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering","tag-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v25.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Web Components: Erkl\u00e4rung, Einsatzszenarien &amp; Anwendung<\/title>\n<meta name=\"description\" content=\"In diesem Blogartikel erf\u00e4hrst du alles Wichtige \u00fcber Web Components, ihre Standards, Erstellung und Einsatzm\u00f6glichkeiten. Viel Spa\u00df!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Erfahre alles \u00fcber Web Components\" \/>\n<meta property=\"og:description\" content=\"In diesem Blogartikel erf\u00e4hrst du alles Wichtige \u00fcber Web Components, ihre Standards, Erstellung und Einsatzm\u00f6glichkeiten. Viel Spa\u00df!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/\" \/>\n<meta property=\"og:site_name\" content=\"d.velop blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/d.velop.ag\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-17T09:54:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-24T09:47:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/Social-Sharing-Blogartikel-Web-Components.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Veit Kunz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Erfahre alles \u00fcber Web Components\" \/>\n<meta name=\"twitter:description\" content=\"In diesem Blogartikel erf\u00e4hrst du alles Wichtige \u00fcber Web Components, ihre Standards, Erstellung und Einsatzm\u00f6glichkeiten. Viel Spa\u00df!\" \/>\n<meta name=\"twitter:creator\" content=\"@d_velop\" \/>\n<meta name=\"twitter:site\" content=\"@d_velop\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Veit Kunz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"16\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/\"},\"author\":{\"name\":\"Veit Kunz\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/8b694c5349d188ba9e5408c85a05277d\"},\"headline\":\"Web Components: Erkl\u00e4rung, Einsatzszenarien &#038; Anwendung\",\"datePublished\":\"2025-01-17T09:54:56+00:00\",\"dateModified\":\"2025-09-24T09:47:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/\"},\"wordCount\":2818,\"publisher\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/beitragsbild-blogartikel-web-components.jpg\",\"keywords\":[\"Engineering\"],\"articleSection\":[\"Engineering\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/\",\"url\":\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/\",\"name\":\"Web Components: Erkl\u00e4rung, Einsatzszenarien & Anwendung\",\"isPartOf\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/beitragsbild-blogartikel-web-components.jpg\",\"datePublished\":\"2025-01-17T09:54:56+00:00\",\"dateModified\":\"2025-09-24T09:47:47+00:00\",\"description\":\"In diesem Blogartikel erf\u00e4hrst du alles Wichtige \u00fcber Web Components, ihre Standards, Erstellung und Einsatzm\u00f6glichkeiten. Viel Spa\u00df!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#primaryimage\",\"url\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/beitragsbild-blogartikel-web-components.jpg\",\"contentUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/beitragsbild-blogartikel-web-components.jpg\",\"width\":2000,\"height\":666,\"caption\":\"Beitragsbild Blogartikel Web Components\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/www.d-velop.de\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Web Components: Erkl\u00e4rung, Einsatzszenarien &#038; Anwendung\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#website\",\"url\":\"https:\/\/www.d-velop.de\/blog\/\",\"name\":\"d.velop blog\",\"description\":\"Digitalisierung, Dokumentenmanagement und rund um d.velop\",\"publisher\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.d-velop.de\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#organization\",\"name\":\"d.velop Gruppe\",\"url\":\"https:\/\/www.d-velop.de\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg\",\"contentUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg\",\"width\":350,\"height\":350,\"caption\":\"d.velop Gruppe\"},\"image\":{\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/d.velop.ag\/\",\"https:\/\/x.com\/d_velop\",\"https:\/\/de.linkedin.com\/company\/d-velop\",\"https:\/\/www.xing.com\/pages\/d-velopag\",\"https:\/\/www.instagram.com\/d.velop_group\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/8b694c5349d188ba9e5408c85a05277d\",\"name\":\"Veit Kunz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/veit-kunz-210x210.jpg\",\"contentUrl\":\"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/veit-kunz-210x210.jpg\",\"caption\":\"Veit Kunz\"},\"description\":\"Software Enginner\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/veit-kunz\/\"],\"url\":\"https:\/\/www.d-velop.de\/blog\/author\/veit-kunz\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Web Components: Erkl\u00e4rung, Einsatzszenarien & Anwendung","description":"In diesem Blogartikel erf\u00e4hrst du alles Wichtige \u00fcber Web Components, ihre Standards, Erstellung und Einsatzm\u00f6glichkeiten. Viel Spa\u00df!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/","og_locale":"de_DE","og_type":"article","og_title":"Erfahre alles \u00fcber Web Components","og_description":"In diesem Blogartikel erf\u00e4hrst du alles Wichtige \u00fcber Web Components, ihre Standards, Erstellung und Einsatzm\u00f6glichkeiten. Viel Spa\u00df!","og_url":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/","og_site_name":"d.velop blog","article_publisher":"https:\/\/www.facebook.com\/d.velop.ag\/","article_published_time":"2025-01-17T09:54:56+00:00","article_modified_time":"2025-09-24T09:47:47+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/Social-Sharing-Blogartikel-Web-Components.jpg","type":"image\/jpeg"}],"author":"Veit Kunz","twitter_card":"summary_large_image","twitter_title":"Erfahre alles \u00fcber Web Components","twitter_description":"In diesem Blogartikel erf\u00e4hrst du alles Wichtige \u00fcber Web Components, ihre Standards, Erstellung und Einsatzm\u00f6glichkeiten. Viel Spa\u00df!","twitter_creator":"@d_velop","twitter_site":"@d_velop","twitter_misc":{"Verfasst von":"Veit Kunz","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#article","isPartOf":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/"},"author":{"name":"Veit Kunz","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/8b694c5349d188ba9e5408c85a05277d"},"headline":"Web Components: Erkl\u00e4rung, Einsatzszenarien &#038; Anwendung","datePublished":"2025-01-17T09:54:56+00:00","dateModified":"2025-09-24T09:47:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/"},"wordCount":2818,"publisher":{"@id":"https:\/\/www.d-velop.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#primaryimage"},"thumbnailUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/beitragsbild-blogartikel-web-components.jpg","keywords":["Engineering"],"articleSection":["Engineering"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/","url":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/","name":"Web Components: Erkl\u00e4rung, Einsatzszenarien & Anwendung","isPartOf":{"@id":"https:\/\/www.d-velop.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#primaryimage"},"image":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#primaryimage"},"thumbnailUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/beitragsbild-blogartikel-web-components.jpg","datePublished":"2025-01-17T09:54:56+00:00","dateModified":"2025-09-24T09:47:47+00:00","description":"In diesem Blogartikel erf\u00e4hrst du alles Wichtige \u00fcber Web Components, ihre Standards, Erstellung und Einsatzm\u00f6glichkeiten. Viel Spa\u00df!","breadcrumb":{"@id":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#primaryimage","url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/beitragsbild-blogartikel-web-components.jpg","contentUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/beitragsbild-blogartikel-web-components.jpg","width":2000,"height":666,"caption":"Beitragsbild Blogartikel Web Components"},{"@type":"BreadcrumbList","@id":"https:\/\/www.d-velop.de\/blog\/engineering\/web-components\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.d-velop.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Web Components: Erkl\u00e4rung, Einsatzszenarien &#038; Anwendung"}]},{"@type":"WebSite","@id":"https:\/\/www.d-velop.de\/blog\/#website","url":"https:\/\/www.d-velop.de\/blog\/","name":"d.velop blog","description":"Digitalisierung, Dokumentenmanagement und rund um d.velop","publisher":{"@id":"https:\/\/www.d-velop.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.d-velop.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.d-velop.de\/blog\/#organization","name":"d.velop Gruppe","url":"https:\/\/www.d-velop.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg","contentUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2018\/12\/dvelop-blog-logo-invers.jpg","width":350,"height":350,"caption":"d.velop Gruppe"},"image":{"@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/d.velop.ag\/","https:\/\/x.com\/d_velop","https:\/\/de.linkedin.com\/company\/d-velop","https:\/\/www.xing.com\/pages\/d-velopag","https:\/\/www.instagram.com\/d.velop_group\/"]},{"@type":"Person","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/8b694c5349d188ba9e5408c85a05277d","name":"Veit Kunz","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.d-velop.de\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/veit-kunz-210x210.jpg","contentUrl":"https:\/\/www.d-velop.de\/blog\/wp-content\/uploads\/2025\/01\/veit-kunz-210x210.jpg","caption":"Veit Kunz"},"description":"Software Enginner","sameAs":["https:\/\/www.linkedin.com\/in\/veit-kunz\/"],"url":"https:\/\/www.d-velop.de\/blog\/author\/veit-kunz\/"}]}},"_links":{"self":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts\/52744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/users\/292"}],"replies":[{"embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/comments?post=52744"}],"version-history":[{"count":2,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts\/52744\/revisions"}],"predecessor-version":[{"id":57075,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/posts\/52744\/revisions\/57075"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/media\/52769"}],"wp:attachment":[{"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/media?parent=52744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/categories?post=52744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.d-velop.de\/blog\/wp-json\/wp\/v2\/tags?post=52744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}