Citando de la sección Extensibilidad de la especificación HTML5 :
Para las características de nivel de marcado que pueden limitarse a la serialización XML y no necesitan ser compatibles con la serialización HTML, los proveedores deben usar el mecanismo de espacio de nombres para definir espacios de nombres personalizados en los que se admiten los elementos y atributos no estándar.
Entonces, si está utilizando la serialización XML de HTML5, es legal que haga algo como esto:
<greeting xmlns="http://example.com/customNamespace">Hello!</greeting>
Sin embargo, si está utilizando la sintaxis HTML, está mucho más limitado en lo que puede hacer.
Para las características de nivel de marcado destinadas a la sintaxis HTML, las extensiones deben limitarse a los nuevos atributos del formulario "x-vendor-feature" [...] No se deben crear nuevos nombres de elementos.
Pero esas instrucciones están dirigidas principalmente a los proveedores de navegadores, que supuestamente proporcionarían un estilo visual y funcionalidad para cualquier elemento personalizado que elijan crear.
Sin embargo, para un autor, aunque puede ser legal incrustar un elemento personalizado en la página (al menos en la serialización XML), no obtendrá nada más que un nodo en el DOM. Si desea que su elemento personalizado realmente haga algo, o se represente de alguna manera especial, debería estar mirando la especificación de Elementos personalizados .
Para obtener una introducción más suave sobre el tema, lea la Introducción a los componentes web , que también incluye información sobre el DOM DOM y otras especificaciones relacionadas. Por el momento, estas especificaciones todavía están en borrador, puedes ver el estado actual aquí , pero se están desarrollando activamente.
Como ejemplo, una definición simple para un greeting
elemento podría verse así:
<element name="greeting">
<template>
<style scoped>
span { color:gray; }
</style>
<span>Simon says:</span>
<q><content/></q>
</template>
</element>
Esto le dice al navegador que represente el contenido del elemento entre comillas, y con el prefijo del texto "Simon dice:" que está diseñado con el color gris. Por lo general, una definición de elemento personalizado como esta se almacenaría en un archivo html separado que importaría con un enlace.
<link rel="import" href="greeting-definition.html" />
Aunque también puede incluirlo en línea si lo desea.
He creado una demostración de trabajo de la definición anterior usando la biblioteca Polyfill polyfill que puedes ver aquí . Tenga en cuenta que esto está utilizando una versión anterior de la biblioteca Polymer: las versiones más recientes funcionan de manera bastante diferente. Sin embargo, con la especificación aún en desarrollo, esto no es algo que recomendaría usar en el código de producción de todos modos.