Citando dalla sezione Extensibility della specifica HTML5 :
Per le funzionalità a livello di markup che possono essere limitate alla serializzazione XML e che non devono essere supportate nella serializzazione HTML, i fornitori devono utilizzare il meccanismo dello spazio dei nomi per definire spazi dei nomi personalizzati in cui sono supportati gli elementi e gli attributi non standard.
Quindi, se stai usando la serializzazione XML di HTML5, è legale che tu faccia qualcosa del genere:
<greeting xmlns="http://example.com/customNamespace">Hello!</greeting>
Tuttavia, se stai utilizzando la sintassi HTML, sei molto più limitato in ciò che puoi fare.
Per le funzionalità a livello di markup destinate all'uso con la sintassi HTML, le estensioni devono essere limitate ai nuovi attributi del modulo "funzionalità x-vendor" [...] Non devono essere creati nuovi nomi di elementi.
Ma queste istruzioni sono dirette principalmente ai fornitori di browser, che presumibilmente dovrebbero fornire uno stile visivo e funzionalità per qualsiasi elemento personalizzato che hanno scelto di creare.
Per un autore, tuttavia, mentre può essere legale incorporare un elemento personalizzato nella pagina (almeno nella serializzazione XML), non otterrai nulla di più di un nodo nel DOM. Se vuoi che il tuo elemento personalizzato faccia effettivamente qualcosa o sia reso in un modo speciale, dovresti guardare la specifica degli elementi personalizzati .
Per un approfondimento più delicato sull'argomento, leggi Introduzione ai componenti Web , che include anche informazioni su Shadow DOM e altre specifiche correlate. Al momento queste specifiche funzionano ancora alle bozze: puoi vedere lo stato corrente qui - ma sono attivamente sviluppati.
Ad esempio, una semplice definizione per un greeting
elemento potrebbe assomigliare a questa:
<element name="greeting">
<template>
<style scoped>
span { color:gray; }
</style>
<span>Simon says:</span>
<q><content/></q>
</template>
</element>
Questo dice al browser di rendere il contenuto dell'elemento tra virgolette e preceduto dal testo "Simon afferma:" che è disegnato con il colore grigio. In genere una definizione di elemento personalizzata come questa verrebbe archiviata in un file html separato che verrebbe importato con un collegamento.
<link rel="import" href="greeting-definition.html" />
Anche se puoi anche includerlo in linea, se lo desideri.
Ho creato una dimostrazione funzionante della definizione sopra usando la libreria Polyfill Polymer che puoi vedere qui . Si noti che questo utilizza una versione precedente della libreria Polymer: le versioni più recenti funzionano in modo abbastanza diverso. Tuttavia, con le specifiche ancora in fase di sviluppo, questo non è qualcosa che consiglierei di utilizzare comunque nel codice di produzione.