- Ein minimalistisches HTML-Mikroframework, mit dem sich modulare und dynamische Web-Benutzeroberflächen auf ebenso einfache Weise wie mit plain HTML erstellen lassen
- Es macht genau eine Sache: HTML-Ressourcen können von jedem Element auf der Seite geladen werden
- Dadurch lassen sich Teile der Seite aktualisieren und Seitenfragmente ersetzen
- Insgesamt nur 166 Byte groß, verwendet ausschließlich pures HTML, ist frei von Abhängigkeiten und benötigt weder JS-Bundles noch ein Backend, spezielle Attribute, eine DSL oder Custom Elements
- Interagiert mit dem echten DOM und verwendet weder VDOM noch Click-Listener, AJAX oder
fetch
- Man muss nur ein Inline-HTML-Snippet als
iframe hinzufügen
<iframe hidden name=htmz onload="setTimeout(()=>document.querySelector(this.contentWindow.location.hash||null)?.replaceWith(...this.contentDocument.body.childNodes))"></iframe>
Grundlegende Verwendung
- Um htmz zu verwenden, benötigt man einen Hyperlink (oder ein Formular) mit einem
href-Attribut (bzw. action bei Formularen), das auf eine Ressourcen-URL zeigt, sowie einen Ziel-ID-Selektor.
- Es sieht so aus, als würde das URL-Fragment als Ziel-ID-Selektor wiederverwendet, aber da das URL-Fragment in diesem Kontext nicht anderweitig verwendet wird, kann es dafür genutzt werden.
Was genau macht es?
- htmz bietet genau eine Funktion: HTML-Ressourcen in ein beliebiges Element innerhalb einer Seite zu laden.
- Die Idee ist nicht neu; Web-Seiten in unabhängig neu ladbare Teile aufzuteilen gibt es bereits seit Mitte der 1990er-Jahre.
- htmz ist eine Generalisierung von HTML-Frames und kann HTML-Ressourcen in jedes Element innerhalb einer Seite laden.
Fortgeschrittene Verwendung
- Im aktuellen HTML5 können nur die Elemente und als Ziel für htmz angegeben und aufgerufen werden.
- Mit dem Element kann htmz als Standardziel für alle relativen Links festgelegt werden.
- Wenn man lieber einen echten Zielwert verwendet, kann man einen Hack nutzen, bei dem der Ziel-ID-Selektor direkt im
target-Attribut selbst steht.
Scripting / Interaktion
- Wenn mehr Interaktivität benötigt wird, kann JavaScript verwendet werden, die begleitende Skriptsprache von htmz.
- htmz schließt weder das Schreiben von JS noch die Nutzung von UI-Bibliotheken aus, und mit htmz lassen sich Formularwerte weiterhin über normale HTTP-Formulare absenden.
Erweiterbarkeit
- Wenn erweiterte Selektoren, Fehlerbehandlung oder mehrere Ziele benötigt werden, können Entwickler dies nach Bedarf erweitern.
FAQ
- htmz ist ein
iframe mit dem Namen "htmz"; aufgerufen wird htmz, indem eine URL über das iframe geladen wird.
- htmz fungiert als Proxy-Ziel und leitet die Antwort an das angegebene Ziel weiter.
- htmz parst das DOM nicht fortlaufend, sucht nicht nach speziellen Attributen oder Syntax und hängt keine Listener an das DOM an.
- htmz ist ein HTML-Mikroframework und verwendet nur ein Minimum an JS.
- htmz ist ein Snippet; die Abkürzung steht für 'Html with Targeted Manipulation Zones'.
- Das Projekt entstand als Reaktion auf htmx und war ein Experiment dazu, ob sich Load-Link-Target-Funktionalität im heutigen Web auch ohne htmx umsetzen lässt.
- Trotz seiner winzigen Größe wirkt htmz erstaunlich leistungsfähig; die wichtigste Einschränkung ist, dass pro Antwort nur ein einziges Ziel möglich ist.
Meinung von GN⁺
- Innovativer Ansatz: htmz bietet einen innovativen Ansatz für die Webentwicklung, indem es die Komplexität von Frameworks reduziert und Web-Oberflächen mit reinem HTML aufbaut. Das bedeutet eine Form der Webentwicklung, die selbst für Junior-Softwareingenieure leicht zugänglich ist.
- Balance aus Performance und Einfachheit: Die extrem leichte Größe von 166 Byte und die abhängigskeitsfreie Struktur können die Performance von Web-Seiten deutlich verbessern. Gleichzeitig bietet htmz eine Einfachheit, mit der sich effektive Web-Seiten erstellen lassen, ohne komplexe JavaScript-Frameworks lernen zu müssen.
- Die Zukunft der Webentwicklung: htmz liefert eine interessante Perspektive auf die Zukunft der Webentwicklung. Es zeigt, wie die Weiterentwicklung von Web-Standards und -Technologien Entwicklern einfachere und effizientere Werkzeuge bereitstellen kann.
3 Kommentare
Wow, das ist wirklich originell, haha. Im Link steht, dass es selbst weder eine Bibliothek noch ein Framework ist, sondern einfach nur ein Snippet ... hehe
Fortgeschrittene Verwendung: Im aktuellen HTML5 scheinen nur die Elemente
undkein HTML-Escaping anzuwenden Derzeit scheint kein HTML-Escaping angewendet zu werdenHacker-News-Kommentare
Zusammenfassung des ersten Kommentars:
Zusammenfassung des zweiten Kommentars:
Zusammenfassung des dritten Kommentars:
Zusammenfassung des vierten Kommentars:
Zusammenfassung des fünften Kommentars:
Zusammenfassung des sechsten Kommentars:
this.in Inline-Event-Listenern zu entfernen, um den Code noch weiter zu verkleinern.Zusammenfassung des siebten Kommentars:
targetmöglicherweise keine elegante Degradation wie bei htmx erfolgt, wenn JS deaktiviert ist.Zusammenfassung des achten Kommentars:
<slot>-Elements auf diese Weise eine schlechte Idee ist.<slot>ein sehr spezifisches Verhalten, und unabhängig davon, was die Bibliothek macht, wird es durch die Kinder des Host-Elements ersetzt.<output>-Element existiert.Zusammenfassung des neunten Kommentars:
Zusammenfassung des zehnten Kommentars: