HTML-Tags können direkt selbst erstellt und verwendet werden
(maurycyz.com)- In HTML können nicht erkannte Tag-Namen verwendet werden, und der Browser behandelt sie dann als normale Elemente
- Wenn dieser Tag-Name in CSS als Selektor angegeben wird, sind Styling und Anzeigesteuerung möglich
- Verwendet man Namen mit Bindestrich (-), lässt sich ein Konflikt mit zukünftigen HTML-Standards vermeiden
- Statt
oderkönnen bedeutungsvolle benutzerdefinierte Tags verwendet werden, was die Lesbarkeit des Codes erhöht - Selbst in komplex verschachtelten Strukturen lässt sich die Struktur allein anhand der Tag-Namen leichter erfassen, was die Wartung erleichtert
Einsatz benutzerdefinierter HTML-Tags
-
Browser rendern unbekannte Tags wie normale Block-Elemente
- Das ist ein in der HTML-Spezifikation festgelegtes normales Verhalten; mit CSS kann das Erscheinungsbild visuell gesteuert werden
- Als Beispiel kann ein Tag wie `` definiert und in CSS in der Form
cool-thing { ... }gestaltet werden
-
Wenn der Tag-Name einen Bindestrich (-) enthält, besteht keine Gefahr, dass er künftig dem HTML-Standard hinzugefügt wird, sodass kein Kollisionsrisiko besteht
- Beispiele:
,usw.
- Beispiele:
Verbesserte Lesbarkeit und Struktur
- Wenn statt
oderTags mit aussagekräftigen Namen verwendet werden, ist der Code leichter zu verstehen- So kann zum Beispiel statt
auchverwendet werden
- So kann zum Beispiel statt
- In verschachtelten ``-Strukturen ist es schwierig, die Position schließender Tags zu erkennen, aber mit expliziten Tag-Namen wird die Struktur klarer
- Wenn
intern aus, `` usw. besteht, ist die DOM-Struktur intuitiv nachvollziehbar
- Wenn
Beispielcode
- Herkömmlicher Ansatz
Hello, World! - Ansatz mit benutzerdefiniertem Tag
Hello, World!- In CSS kann dann ein Stil wie
cool-thing { display: block; font-weight: bold; text-align: center; ... }definiert werden
- In CSS kann dann ein Stil wie
Fazit
- Wenn die vom HTML-Standard erlaubte flexible Definition von Tags genutzt wird, lässt sich strukturelles Markup mit hoher Lesbarkeit schreiben
- Wenn es jedoch bereits ein vorhandenes, semantisch passendes Tag gibt, sollte dieses bevorzugt verwendet werden
1 Kommentare
Hacker-News-Kommentare
Es wird betont, dass
kein nicht erkanntes Tag ist Der Autor verweist auf seinen [Blogbeitrag](https://dashed-html.github.io) und erklärt, dassals HTMLUnknownElement behandelt wird, bis WHATWG es als neues Element hinzufügt, währendein **gültiges HTMLElement** ist und sich daher gut für Layout und Styling eignet. Wenn es über die JavaScript Custom Elements API erweitert wird, wird es zu einem **definierten Custom Element**. Das ist Standardverhalten in allen Browsern, und auch der W3C HTML Validator erkennt Custom Elements mit Bindestrich als HTMLElement an. Allerdings wird die Regel `[hidden]{display:none}` aus dem Standard-UA-Stylesheet nicht mitvererbt und muss daher selbst gesetzt werden. Dassstandardmäßigdisplay:blockist, liegt ebenfalls am UA-Stylesheet, daher muss man bei Custom Elements diedisplay-Eigenschaft selbst setzen. Mit den CSS-Selektoren:definedund:not(:defined)lassen sich definierte und nicht definierte Elemente unterscheiden. Auch Declarative Shadow DOM (``) erzeugt auf die gleiche Weise nicht definierte Custom Elements.hiddenein HTML-Präsentationsattribut (presentation attribute) ist. Das UA-Stylesheet werde auch auf Custom Elements unverändert angewendet, eine[hidden]-Regel existiere dort nicht.hiddensei ein Beispiel dafür, dass ein Attribut selbst stilistisch interpretiert wird, ähnlich wiealign="right".-) nicht auch einen Doppelpunkt (:) verwenden kann, womit sich XML-Namespaces natürlicher hätten integrieren lassen. Erwähnt wird auch, dass nginx oder apache Doppelpunkte in Bindestriche hätten umwandeln können. Mit „Wir können nicht nach 1999 zurück“ endet der Kommentar in nostalgischem Ton.Es wird darauf hingewiesen, dass die verschachtelte
-Struktur im Beispielcode übertrieben ist. Stattdessen wird vorgeschlagen, **semantische Tags** wie,undzu verwenden.Jemand teilt seine Erfahrung aus 3 bis 4 Jahren Arbeit mit Custom Elements. Die Idee sei clever, in der Praxis aber knifflig. Bei zu vielen Custom Tags leide die Lesbarkeit, und die Unterscheidung zwischen Block- und Inline-Elementen werde schwieriger. Als ausgewogener Ansatz werden Standard-Tags beibehalten und Custom Tags nur für komponentenartige Elemente wie
oderverwendet. Untergeordnete Teile werden über slot-Attribute wie in `` unterschieden. Klassen werden nur für Modifikationen und Anpassungen genutzt, während die Struktur bevorzugt über Slots ausgedrückt wird.< !app-header />mit einem Kommentar-Knoten-Trick umgesetzt wurden.slot-Attributs einfachdiv[slot="hero-blurb"]schreiben könne.Standardmäßig verhalten sich Custom Tags wie ``. Falls nötig, kann man ihr Verhalten über die Custom Element API definieren.
Es wird ein Custom Tag namens
vorgestellt, das als Gegenstück zudient. Damit lassen sich bestimmte Bereiche ausblenden, wenn JS deaktiviert ist. Ein Projektlink wird geteilt.@media (scripting)erreichen lasse. Dazu wird ein Verweis auf die MDN-Dokumentation ergänzt.Jemand berichtet, früher das aus Browsern entfernte ``-Tag selbst nachgebaut zu haben. Es wurde mit jQuery und
visibility-Manipulation umgesetzt, und die Person war überrascht, dass Browser beliebige Tags zulassen. Da der Code nur etwa zehn Zeilen umfasste, wurde er nicht veröffentlicht, aber es gebe vermutlich viele ähnliche Versuche.blinkstatt.blinklasse sich der Effekt direkt auf das Tag anwenden.Es wird angemerkt, dass Beispiele wie
unddurch echte HTML-Tags ersetzt werden könnten. Die Verwendung von,und `` sei angemessener.Custom Tags werden standardmäßig wie `` inline gerendert, aber man kann per CSS eine Standard-
display-Eigenschaft festlegen. Früher habe man sie wegen Namespace-Problemen gemieden, doch seit der Standard Bindestriche (-) erlaubt, bestehe kein Kollisionsrisiko mehr. Sie funktionieren auch in CSS-Selektoren problemlos und lassen sich mitquerySelectoransprechen. Der Eindruck sei, dass sich auch ohne Frameworks wie Vue mit modernem HTML bereits genug ausdrücken lässt.Um allen Custom Elements einen Standardstil zu geben, könne man Folgendes verwenden:
Es wird daran erinnert, dass ältere IE-Versionen HTML5-Tags nicht erkannten, weshalb der Kommentator das um 2010 mit einem eigenen Skript gelöst habe. Wenn ein Tag per JS einmal erzeugt wurde, erkannte IE es danach, und auch nach dem Löschen blieb es funktionsfähig. So habe man erkannt, dass sich auf diese Weise auch beliebige Tags rendern lassen. Dazu wird der damalige Blogbeitrag geteilt.