In seinem letzten An Event Apart-Vortrag wies Dave darauf hin, dass Web Components erst jetzt wirklich eine praktische Wahl für die Produktion im Web-Development werden. Zum Beispiel ist es erst etwa ein Jahr her, dass Edge auf Chromium umgestellt wurde. Davor unterstützte Edge keine Web Component-Features. Wenn man sie schon vor langer Zeit ausgeliefert hat, dann mit ziemlich großen Polyfills oder im Stil von Progressive Enhancement, wobei sie, wenn sie fehlschlugen, dies graceful oder in einer kontrollierten Umgebung taten, z. B. in einem Intranet, in dem jeder denselben Computer hat (oder in etwas wie Electron).
Meiner Meinung nach haben Web Components noch einen Weg vor sich, um für die meisten Entwickler überzeugend zu sein, aber sie nähern sich ihm an. Eine Sache, die ihrer Verbreitung Vorschub leisten wird, ist die unglaublich einfache DX vorgefertigter Komponenten, teilweise dank ES-Modulen und der einfachen Möglichkeit, JavaScript zu importieren.
Ich habe das schon einmal erwähnt: Sehen Sie, wie lächerlich einfach es ist, den Emoji-Picker von Nolan Lawson zu verwenden
Das sind eine Zeile JavaScript und eine Zeile HTML, um es zum Laufen zu bringen, und noch eine Zeile JavaScript, um es zu verdrahten und eine JSON-Antwort einer Auswahl zurückzugeben.
Überzeugend, in der Tat. DX, könnte man es nennen.
Web Components wie diese sind nicht allein, daher der Titel dieses Beitrags. Dave hat eine Liste von Awesome Standalones zusammengestellt. Das heißt, Web Components, die nicht Teil eines größeren, komplexeren Systems sind1, sondern nur kleine, einfach einzufügende Gadgets, die für sich allein nützlich sind, genau wie der Emoji-Picker. Daves Repository listet etwa 20 davon auf.
Nehmen Sie dieses von GitHub (dem Unternehmen), eine Web Component zum Kopieren in die Zwischenablage
Ziemlich schick für etwas, das mit ~3KB über das Netz kommt. Die Produktionsgeschichte ist, was immer Sie daraus machen wollen. Nutzen Sie es vom CDN. Bündeln Sie es mit Ihrem Zeug. Lassen Sie es als On-Demand-Einzelstück. Was auch immer. Es ist verdammt einfach zu benutzen. Im Falle dieses Standalones gibt es nicht einmal Shadow DOM zu verarbeiten.
Keine Abneigung gegen Shadow DOM, das ist vielleicht das nützlichste Feature von Web Components (und kann nicht durch eine Bibliothek nachgebildet werden, da es sich um ein natives Browserfeature handelt), aber die Optionen zum Stylen sind nicht meine Favoriten. Und wenn man drei verschiedene Standalone-Komponenten mit drei verschiedenen Meinungen zur Gestaltung über das Shadow DOM verwenden würde, würde das nervig werden.
Ich stelle mir vor, dass Entwickler sich mit so etwas vertraut machen, die Vorteile erkennen und immer mehr davon in ihre Projekte integrieren und sogar eigene erstellen. Der Aufbau eines Designsystems aus Web Components scheint mir ein wirklich guter Ansatz zu sein, wie es viele große Namen2 bereits tun.
Der Traum ist, dass die Leute gemeinsame UI-Muster tatsächlich konsolidieren. Selbst wenn wir nie native HTML-"Tabs" bekommen, ist es möglich, dass eine Web Component sie bereitstellen könnte, die UI, UX und Barrierefreiheit perfekt umsetzt, aber sie so gestaltbar lässt, dass sie buchstäblich jede Website verwenden könnte. Aber zuerst muss es existieren.
- Das ist auch eine coole Art, Web Components zu nutzen, aber Einfachheit erregt Aufmerksamkeit, und das ist wichtig. ⮑
- Leute erwähnen immer das Lightning Design System als ein Web-Components-basiertes Designsystem, aber ich sehe es nicht. Zum Beispiel sieht dieses Akkordeon eher wie semantisches HTML mit Klassennamen aus, nicht wie Web Components. Was übersehe ich? ⮑
Wenn Sie diese Beispiele vor 15 Jahren mit einem statt des Imports und einem
<div>mit einer bestimmten Klasse gepostet hätten, wäre niemand überrascht gewesen. Ich verstehe wirklich nicht, was seit dem ersten Tag, an dem ich von ihnen gehört habe, der Hype um Web Components istSicher, man könnte einfach ein
<div class=clipboard></div>verwenden. Aber der Wert von Web Components lässt sich mit dem<video>-Tag vergleichen: Standardanzeige (Buttons und dergleichen) und Interaktionen (Play, Pause, Scrub, etc.) sind in eine HTML-API gekapselt.Um
<video>zu verwenden, lesen Sie einfach die Dokumentation zu diesem Tag. Oh schau, eine ganze<video>JS-API!playbackRate! Untertitel-API!) Coole Sachen! Machen Sie die Grundlagen überHTMLundCSS, oder werden Sie mitJSkreativ. Portieren Sie also diesen gesamten Denkansatz auf alles Mögliche. Web Components sind ein wunderbares Design, um alle Arten von Funktionalitäten in eine Form zu kapseln, die für Webentwickler überall zu 100% vertraut ist.Ich verstehe es nicht, also mag ich es nicht. ROAR!!!!
Sicher, aber können Sie diesen Code-Snippet überall einfügen? Können Sie sicher sein, dass weder der Code noch die Stile mit etwas anderem in Konflikt geraten? Kann es Framework-agnostisch sein? Oder, da Sie von 15 Jahren gesprochen haben, passt es zu meinem jQuery-Konflikt mit meinem jQuery?
Ich will nicht pingelig sein, aber das Clipboard-Copy-Beispiel funktioniert bei mir unter Edge (v90, Win 10) nicht. In Chrome hat es sofort funktioniert.
Wahrscheinlich Anlaufschwierigkeiten, aber trotzdem!
Es könnte das iframe sein.
Versuchen Sie den Debug-Modus. https://cdpn.io/chriscoyier/debug/ZELdMvB
Aus irgendeinem Grund funktioniert es nicht auf CodePen. Hier ist ein funktionierendes Beispiel: https://github.github.io/clipboard-copy-element/examples/
Ich bin wirklich begeistert, dass Web Components immer näher an den "produktionsreifen" Zustand heranrücken. Ich habe sie mindestens seit dem Erscheinen von Shadow DOM in Firefox vor ein paar Jahren im Auge behalten.
Ich denke, sie bieten großartige Möglichkeiten für Webanwendungen, bei denen man JS braucht, im Gegensatz zu Webseiten, wenn Sie diese etwas unrealistische Schwarz-Weiß-Darstellung entschuldigen.
Bei letzteren führt die Verbreitung von Web Components zu zusätzlicher Komplexität für Progressive Enhancement oder – ich fürchte – bedeutet sogar weniger Inhalte, die für Benutzer zugänglich sind, die JavaScript lieber nicht ausführen – aus welchem Grund auch immer, Sicherheit, Datenschutz usw.
Natürlich können Standard-HTML-Elemente in benutzerdefinierte Elemente eingefügt und mit CSS gestylt werden, um ein Fallback zu bieten. Es ist möglich, kein Zweifel.
Und das ist kein Problem mit einem Emoji-Picker, da dieser nur nett zu haben ist, aber wenn ich höre, dass meine Kollegen vorschlagen, Karten oder sogar "Links mit dieser einen zusätzlichen Funktionalität" neu zu erstellen, dann mache ich mir manchmal ein wenig Sorgen.
Ja, dieses LWC "Accordion" ist viel Oldskool-Code.
Sie können ein Akkordeon erstellen, indem Sie Standard-HTML-Elemente
<detail>und<summary>verwenden, die von einer Web Component Einzeiler verwaltet werdenDokumentiert: https://dev.to/dannyengelman/acme-the-accordion-web-component-in-187-bytes-47ah
Ich würde dieses Akkordeon-Beispiel nicht als Web Component betrachten. Meiner Meinung nach würden richtige Web Components keine Implementierungsdetails wie Klassennamen preisgeben oder eine spezifische HTML-Struktur erfordern, um tatsächlich zu funktionieren. Eine richtige Akkordeon-Web-Component wäre so etwas wie
Grundsätzlich wäre eine Web Component ein in sich geschlossenes Konzept mit deklarativen Verhaltensdefinitionen über Attribute und einer imperativen API über die
class extends HTMLElement-Klassendefinition. (Und mit der Möglichkeit, andere Web Components als Kinder zu benötigen, für komplexe Wechselwirkungen, so wie<ul><li>benötigt.)