- Mit reinem HTML gibt es keine
include-Funktion, um dasselbe Element auf mehreren Seiten einzubinden
- CSS kann CSS und JavaScript kann JS laden, aber HTML kann kein HTML importieren – genau das wirft Fragen auf
- Zur Lösung dieses Problems werden verschiedene JavaScript-Ansätze, Template-Sprachen und statische Site-Generatoren verwendet
- Performance, Sicherheit, Rendering-Verzögerungen und zirkuläre Includes gelten als Hürden für die Einführung
- Viele Entwickler wünschen sich eine rein deklarative Include-Funktion in HTML, doch bisher hat sie es nicht in den Webstandard geschafft
Die Frage, warum HTML keine Include-Funktion hat
Problemstellung
- Auf mehreren Seiten wie
index.html, about.html und contact.html denselben gemeinsamen Header immer wieder einzufügen, ist umständlich
- Entwickler möchten einen einmal definierten Header ohne Duplikate wiederverwenden
Bereits vorhandene Alternativen
- Externes HTML per Fetch API von JavaScript laden und in das DOM einfügen
- Server Side Includes (SSI),
include in PHP, statische Site-Generatoren und Template-Sprachen sind vorhandene Lösungen
- Auch HTML-Elemente wie
<iframe> und <object> sind möglich, aber wegen Barrierefreiheit, Performance und Stil-Isolation ungeeignet
- Letztlich gibt es in HTML selbst keine einfache Include-Syntax
Warum hat HTML diese Funktion nicht?
- CSS und JS haben mit
@import bzw. import jeweils eine entsprechende Syntax, HTML jedoch nicht
- Webstandards haben Funktionen oft übernommen, wenn sie von Entwicklern stark nachgefragt wurden, bei HTML-Includes war das bislang nicht der Fall
- Als mögliche Gründe werden genannt:
- mögliche Beeinträchtigung des Preload-Scanners
- Layout-Verschiebungen oder Flackern bei asynchronem Laden
- Komplexität bei verschachtelten oder zirkulären Includes
- Widerstand gegen erhöhten Traffic beim Webhosting
- Sicherheitsprobleme (CORS, CSP usw.) sowie Kollisionen beim Timing von Dokument-Ladeereignissen
- oder einfach, dass die Priorität niedrig war und ein klarer Vorschlag fehlte
Verwandte Diskussionen
- Im WHATWG-Issue-Thread auf GitHub #2791 wird das Thema aktiv diskutiert
- In Chrome gab es früher einmal HTML Imports, diese wurden jedoch wegen fehlender Unterstützung durch andere Browser wieder abgeschafft
- Als alternative Ansätze werden HTMX, Web Components, XSLT und SSI genannt
Zusammenfassung der Reaktionen aus der Community
- Weil sich HTML weiterhin stark auf statisches Markup konzentriert, ist die Philosophie, logische Funktionen auszuklammern, nach wie vor verbreitet
- Viele wünschen sich diese Funktion, doch einzelne Entwickler haben es im Standardisierungsprozess schwer, Gehör zu finden
- Analysen zufolge ist eine Einführung schwierig, solange komplexe Designfragen rund um Performance, Sicherheit, Rendering und die Vermeidung von Zyklen nicht gelöst sind
- Manche Entwickler sehen den Grund auch einfach darin, dass HTML konzeptionell nur für das „Ergebnis“ zuständig sein soll
Fazit
- HTML besitzt bis heute keine native Include-Funktion, sodass man auf verschiedene externe Tools und Sprachen ausweichen muss
- Dennoch hoffen viele Entwickler weiterhin auf eine einfache, HTML-basierte Struktur zur Wiederverwendung
1 Kommentare
Hacker-News-Kommentare