JavaScript allein mit HTML ersetzen
(htmhell.dev)- Stellt aktuelle Methoden vor, mit denen sich von JS abhängige Funktionen im Web durch HTML/CSS ersetzen lassen
- Mit Standard-Elementen wie
details·summary,datalistundpopoverlassen sich Akkordeons, Autovervollständigung, Modals und Offscreen-Navigation umsetzen - Dieser Ansatz reduziert Download-, Auswertungs- und Speichernutzung und verbessert so Performance und User Experience
- Zu jeder Funktion werden CodePen-Beispiele, MDN-Dokumentation und Informationen zur Browser-Kompatibilität bereitgestellt
- JS sollte nur dort eingesetzt werden, wo es wirklich nötig ist, und die fortgeschrittenen Funktionen von HTML/CSS sollten aktiv genutzt werden
JS-Funktionen durch HTML und CSS ersetzen
- JavaScript war lange Zeit für Funktionen zuständig, die sich nicht mit HTML und CSS umsetzen ließen
- Mit dem erweiterten Funktionsumfang von HTML und CSS lassen sich jedoch einige JS-Funktionen heute durch native Webtechnologien ersetzen
- Da JS heruntergeladen, entpackt, ausgewertet und im Speicher gehalten werden muss, ist es effizient, geeignete Funktionen auf HTML/CSS zu verlagern
- Vorgeschlagen wird ein Ansatz, bei dem sich JS auf komplexe Logik konzentriert und einfache UI-Steuerung an HTML/CSS delegiert wird
Akkordeon / erweiterbare Inhaltsbereiche
- Mit den Elementen
detailsundsummarylassen sich Akkordeons ohne JS umsetzen- Inhalte können per Klick geöffnet und geschlossen werden, und mit dem Attribut
openlässt sich der Standardzustand festlegen - Wird dasselbe Attribut
nameverwendet, kann nur ein Panel gleichzeitig geöffnet sein
- Inhalte können per Klick geöffnet und geschlossen werden, und mit dem Attribut
- Das Styling ist per CSS möglich, ebenso eine Steuerung des Öffnens/Schließens per JS
- Verwandte Ressourcen: MDN-Dokumentation zu
details, CodePen-Beispiel, Browser-Kompatibilitätstabelle
Eingabefeld mit Autovervollständigungs-Vorschlägen
- Mit der Kombination aus
inputunddatalistlässt sich ein automatisch gefiltertes Dropdown umsetzen- Beim Eingeben wird die Vorschlagsliste automatisch gefiltert
- Unterstützt neben Text auch verschiedene Eingabetypen wie
number,timeusw.
- Firefox unterstützt derzeit nur textbasierte Eingaben, außerdem gibt es Einschränkungen bei der mobilen Barrierefreiheit
- Verwandte Ressourcen: MDN-Dokumentation zu
datalist, SitePoint-Tutorial, Browser-Kompatibilitätstabelle
Modal / Popover
- Mit den Attributen
popoverundpopovertargetlassen sich Modals und Popover ohne JS umsetzen- Es gibt drei Modi:
auto,hintundmanual autowird durch Klick außerhalb oder ESC geschlossen,manualnur manuell
- Es gibt drei Modi:
- Firefox und iOS unterstützen den Modus
hintnicht - Verwandte Ressourcen: MDN-Dokumentation zu
popover, Chrome-Blog, CodePen-Beispiel, Video zur Barrierefreiheit
Offscreen-Navigation / Offscreen-Inhalte
- Mit der
popover-Funktion lässt sich ein Offscreen-Navigationsmenü umsetzen- Mit dem Element
navwird semantische Bedeutung gegeben, per CSStranslatewird es in und aus dem sichtbaren Bereich bewegt - Es schließt sich bei Klick außerhalb, und mit
popover="manual"kann manuelles Schließen festgelegt werden - Mit dem Pseudoelement
::backdroplässt sich der Hintergrund halbtransparent gestalten
- Mit dem Element
- Verwandte Ressourcen: MDN Popover API, Chrome-Blog, CodePen-Beispiel
Fazit
- Die Stärke von JS wird anerkannt, es sollte jedoch nur dort eingesetzt werden, wo es nötig ist
- Durch die jüngsten Fortschritte bei HTML/CSS sind zahlreiche Alternativen ohne JS entstanden
- Weitere Beispiele finden sich im Blogbeitrag des Autors „Replace JS with No-JS or Lo-JS Options“
- Betont wird eine bessere User Experience durch Minimierung von JS und Performance-Optimierung
5 Kommentare
Irgendwie wirkt es, als würde Inhalt fehlen.
Ich habe es angepasst~!
Es gibt offensichtliche Grenzen, und in dem Moment, in dem KI aktiv wird … ist so ein Refactoring dann überhaupt noch nötig?
Wurde dabei auch so etwas wie das Blockieren von JS-Inhalten berücksichtigt?
Meinungen auf Hacker News
Statt nur auf CodePen zu verlinken, hätte es viel überzeugender gewirkt, die HTML-Alternativen direkt auf der Seite zu zeigen
<details>/<summary>ist wirklich enormDamit kann man fast alles machen, aber die meisten Komponentenbibliotheken ignorieren das komplett
Man braucht keine aria-Attribute, und Barrierefreiheit ist von Haus aus dabei
<details>funktioniert auch auf Markdown-basierten Seiten wie GitHub. Damit kann man lange Logs einklappen und sauber postenBeim Schreiben des Buchs „You Don’t Need JavaScript“ habe ich gemerkt, dass JS oft nicht neue Funktionen hinzufügt, sondern eher die vorhandenen Fähigkeiten der Plattform ergänzt
<input>und<datalist>reichen für den Praxiseinsatz nicht ausNutzer erwarten Tippfehlertoleranz, Hilfstexte und eine gute Mobile-UX, aber datalist erfüllt das nicht
Auf semantische HTML-Nutzung oder Barrierefreiheit wird kaum geachtet
In einem Artikel mit der Aussage „Lasst es uns nur mit HTML umsetzen“ wirkt die Abhängigkeit von einem externen Dienst widersprüchlich
Sie ist bei WHATWG in Stage 3 und könnte die albtraumhafte Implementierung von JS-basierten Dropdowns ersetzen
Siehe dazu den Chrome-Blogbeitrag
Ich habe auch Alternativen wie HTMX oder Phoenix LiveView ausprobiert, aber sie sind keine vollständige Lösung
Letztlich scheint es realistischer, modernes JS zu akzeptieren
<marquee>eignete sich gut für horizontal scrollende Elemente in Shopping-Seiten, heute wird das mit Gewalt in JS nachgebaut. Ich wünschte, HTML würde mehr UI-Muster von Haus aus unterstützenFür komplexe Web-Apps ist JS unverzichtbar, aber es gibt viele Bereiche, in denen HTML allein ausreicht
Aber JS ist inzwischen zum zentralen Werkzeug für Datensammlung und Werbetracking geworden
Ich frage mich, ob Big Tech ohne JS dieselbe Art von Überwachung und Werbediensten umsetzen könnte
Letztlich kommt die Abneigung gegen JS nicht nur aus technischen Gründen, sondern aus Misstrauen gegenüber dem Werbeökosystem
Solche Versuche lassen mich zwar gelegentlich darüber nachdenken, ob ich vielleicht overengineere, aber aus der Perspektive der praktischen Arbeit mit umfangreichen Anforderungen kommt das einem Zirkuskunststück nahe.