Zitat aus dem Abschnitt Erweiterbarkeit der HTML5-Spezifikation :
Für Funktionen auf Markup-Ebene, die auf die XML-Serialisierung beschränkt werden können und in der HTML-Serialisierung nicht unterstützt werden müssen, sollten Anbieter den Namespace-Mechanismus verwenden, um benutzerdefinierte Namespaces zu definieren, in denen die nicht standardmäßigen Elemente und Attribute unterstützt werden.
Wenn Sie also die XML-Serialisierung von HTML5 verwenden, ist es für Sie legal, Folgendes zu tun:
<greeting xmlns="http://example.com/customNamespace">Hello!</greeting>
Wenn Sie jedoch die HTML-Syntax verwenden, sind Ihre Möglichkeiten wesentlich eingeschränkter.
Für Features auf Markup-Ebene, die für die Verwendung mit der HTML-Syntax vorgesehen sind, sollten Erweiterungen auf neue Attribute der Form "x-vendor-feature" beschränkt werden. [...] Neue Elementnamen sollten nicht erstellt werden.
Diese Anweisungen richten sich jedoch in erster Linie an Browser-Anbieter, die vermutlich visuelles Design und Funktionen für die von ihnen erstellten benutzerdefinierten Elemente bereitstellen.
Für einen Autor ist es zwar zulässig, ein benutzerdefiniertes Element in die Seite einzubetten (zumindest in der XML-Serialisierung), Sie erhalten jedoch nur einen Knoten im DOM. Wenn Sie möchten, dass Ihr benutzerdefiniertes Element tatsächlich etwas tut oder auf eine bestimmte Weise gerendert wird, sollten Sie sich die Spezifikation für benutzerdefinierte Elemente ansehen .
Weitere Informationen zu diesem Thema finden Sie in der Einführung zu Webkomponenten , die auch Informationen zum Shadow DOM und zu anderen zugehörigen Spezifikationen enthält. Diese Spezifikationen sind derzeit noch in Arbeit - Sie können den aktuellen Status hier sehen - aber sie werden aktiv weiterentwickelt.
Eine einfache Definition für ein greeting
Element könnte beispielsweise so aussehen:
<element name="greeting">
<template>
<style scoped>
span { color:gray; }
</style>
<span>Simon says:</span>
<q><content/></q>
</template>
</element>
Dies weist den Browser an, den Elementinhalt in Anführungszeichen zu rendern, wobei der Text "Simon sagt:" vorangestellt wird, der mit der Farbe Grau gestaltet ist. In der Regel wird eine solche benutzerdefinierte Elementdefinition in einer separaten HTML-Datei gespeichert, die Sie mit einem Link importieren.
<link rel="import" href="greeting-definition.html" />
Sie können es aber auch inline einbinden, wenn Sie möchten.
Ich habe eine funktionierende Demonstration der obigen Definition unter Verwendung der Polymer-Polyfill-Bibliothek erstellt, die Sie hier sehen können . Beachten Sie, dass hierfür eine alte Version der Polymer-Bibliothek verwendet wird - neuere Versionen funktionieren ganz anders. Da sich die Spezifikation jedoch noch in der Entwicklung befindet, würde ich die Verwendung im Produktionscode ohnehin nicht empfehlen.