Se pueden crear y usar etiquetas HTML directamente
(maurycyz.com)- En HTML, incluso si se usan nombres de etiquetas no reconocidos, el navegador los trata como elementos genéricos
- Si ese nombre de etiqueta se especifica como selector en CSS, es posible aplicar estilos y controlar su visualización
- Usar nombres que incluyan un guion (-) ayuda a evitar conflictos con futuros estándares de HTML
- En lugar de
o, usar etiquetas personalizadas con significado mejora la legibilidad del código - Incluso en estructuras anidadas complejas, es más fácil entender la estructura solo con los nombres de las etiquetas, lo que facilita el mantenimiento
Uso de etiquetas HTML personalizadas
-
El navegador renderiza las etiquetas desconocidas como elementos de bloque genéricos
- Este es un comportamiento normal especificado en el estándar HTML, y se pueden controlar visualmente si se les aplican estilos en CSS
- Por ejemplo, se puede definir una etiqueta como `` y darle estilo en CSS con
cool-thing { ... }
-
Si el nombre de la etiqueta incluye un guion (-), no habrá riesgo de conflicto con posibles adiciones futuras al estándar HTML
- Ej.:
,
- Ej.:
Mejora de legibilidad y estructura
- Si se usan etiquetas con nombres significativos en lugar de
o, el código se vuelve más fácil de entender- Por ejemplo, se puede usar
en lugar de
- Por ejemplo, se puede usar
- En estructuras anidadas de ``, puede ser difícil ubicar qué etiqueta de cierre corresponde a qué parte, pero con nombres de etiqueta explícitos la estructura queda clara
- Si dentro de
se organiza con, ``, etc., la estructura del DOM se entiende de forma intuitiva
- Si dentro de
Código de ejemplo
- Forma tradicional
Hello, World! - Forma con etiqueta personalizada
Hello, World!- En CSS, se puede aplicar estilo con algo como
cool-thing { display: block; font-weight: bold; text-align: center; ... }
- En CSS, se puede aplicar estilo con algo como
Conclusión
- Si se aprovecha la flexibilidad para definir etiquetas que permite el estándar HTML, se puede escribir un marcado estructurado con alta legibilidad
- Aun así, si ya existe una etiqueta semántica adecuada definida, debe priorizarse el uso de esa etiqueta existente
1 comentarios
Comentarios de Hacker News
Se enfatiza que
no es una etiqueta no reconocida Presenta su [publicación de blog](https://dashed-html.github.io) y explica que, hasta que WHATWG agreguecomo nuevo elemento, este se trata como HTMLUnknownElement, mientras quees un **HTMLElement válido**, útil para maquetación y estilos Si se actualiza con la JavaScript Custom Elements API, se convierte en un **elemento personalizado definido** Es un comportamiento estándar en todos los navegadores, y el W3C HTML Validator también reconoce los elementos personalizados con guion como HTMLElement Sin embargo, la regla `[hidden]{display:none}` de la hoja de estilos UA predeterminada no se hereda, así que hay que declararla manualmente Comotienedisplay:blockpor defecto gracias a la hoja de estilos UA, en los elementos personalizados hay que establecer la propiedaddisplaydirectamente Los selectores:definedy:not(:defined)de CSS permiten distinguir entre elementos definidos y no definidos Declarative Shadow DOM (``) también crea elementos personalizados no definidos de la misma formahiddenes un atributo de presentación HTML (presentation attribute) La hoja de estilos UA se aplica igual a los elementos personalizados, y la regla[hidden]no existehiddenes un ejemplo de atributo que se interpreta como estilo, comoalign="right"-), porque habría permitido integrar de forma natural los espacios de nombres XML Menciona que también habría sido posible convertir dos puntos en guiones en nginx o apache Cierra con un tono nostálgico: “no podemos volver a 1999”Señala que la estructura anidada de
en el código de ejemplo es excesiva Propone que sería más apropiado usar **etiquetas semánticas** como,yclass, una etiqueta personalizada solo puede tener un nombre Las clases pueden ser varias y no tienen orden, pero los elementos personalizados anidados fuerzan un orden, así que es difícil expresar lo mismoComparte su experiencia usando elementos personalizados durante 3 o 4 años La idea es ingeniosa, pero complicada en la práctica Usar demasiadas etiquetas personalizadas reduce la legibilidad y dificulta distinguir entre bloques e inline Como enfoque equilibrado, deja las etiquetas base tal como están y usa etiquetas personalizadas solo para elementos tipo componente como
oLos subcomponentes se distinguen con el atributoslot, como en `` Prefiere limitar las clases a modificaciones o personalización, y expresar la estructura mediante slots< !app-header />mediante un truco con nodos de comentariosloten CSS, habría que usar algo comodiv[slot="hero-blurb"]Por defecto, las etiquetas personalizadas se comportan como `` Si hace falta, se puede definir su comportamiento con la Custom Element API
Presenta una etiqueta personalizada llamada
que implementa lo contrario dePermite ocultar cierta área cuando JS está desactivado Comparte el enlace del proyecto@media (scripting)de CSS se puede lograr el mismo efecto solo con CSS puro Adjunta un enlace a la documentación de MDNComparte que en el pasado recreó por su cuenta la etiqueta eliminada `` La implementó con jQuery y manipulando visibility, y dice que le sorprendió que el navegador permitiera etiquetas arbitrarias No publicó el código porque eran apenas unas 10 líneas, aunque supone que hubo muchos intentos parecidos
blinken lugar de.blink, se aplica directamente a la etiquetaSeñala que ejemplos como
ypueden sustituirse por etiquetas HTML reales Sería más apropiado usar,y ``Los elementos personalizados por defecto se renderizan inline como ``, pero basta con definir una propiedad
displaypredeterminada con CSS Antes se evitaban por problemas de espacios de nombres, pero al permitir el estándar el guion (-), el riesgo de conflicto desapareció También funcionan sin problema en selectores CSS y se puede acceder a ellos conquerySelectorSiente que incluso sin frameworks como Vue, el HTML moderno ya es suficientemente expresivoPara asignar estilos predeterminados a todos los elementos personalizados, basta con hacer algo así
Recuerda que el IE antiguo no reconocía las etiquetas HTML5, así que lo resolvió con un script que hizo alrededor de 2010 Si se creaba una vez la etiqueta con JS, IE pasaba a reconocerla, y luego ya no importaba borrarla Dice que así se dio cuenta de que también se podían renderizar etiquetas arbitrarias Comparte una entrada de blog de esa época