Warning Sintaxis de autocierre en un elemento no-void
Por qué <div /> en realidad no cierra un <div> en HTML5, a diferencia de XML o JSX, y qué hace el parser en su lugar.
El validador marca una etiqueta de apertura que termina en /> donde el elemento no es uno de los elementos vacíos (void) de HTML (img, br, input, hr, meta, link y algunos otros que nunca tienen contenido ni etiqueta de cierre).
Ejemplo
<!-- Parece cerrado, pero no lo está -->
<div class="tarjeta" />
<p>Esto termina anidado dentro del div de arriba.</p>
<!-- Correcto -->
<div class="tarjeta"></div>
<p>Esto es un hermano, como se pretendía.</p>Por qué importa
XML, XHTML y JSX tratan un /> final como algo con significado en cualquier elemento — cierra la etiqueta de inmediato, sin contenido. El parser de HTML5 no funciona así: la barra final solo se reconoce en los elementos vacíos (void), donde es opcional y puramente estilística (<br> y <br /> son idénticos). En cualquier otro caso, la barra se ignora en silencio y el elemento queda abierto exactamente como si se hubiera escrito <div class="tarjeta"> sin ninguna barra — todo lo que sigue se convierte en hijo suyo hasta que aparece una etiqueta de cierre real o hasta que las reglas de recuperación de errores del parser infieren una. Esta es una de las sorpresas más comunes para desarrolladores que vienen de React/JSX o de plantillas basadas en XML.
Frequently asked questions
¿Entonces incluir la barra final alguna vez está mal?
Es inofensiva en elementos vacíos (img, br, input, etc.) donde la especificación HTML5 la permite explícitamente pero no la exige — eso es puramente una elección de estilo, muchas veces mantenida por consistencia al estilo XHTML. Solo causa un error activo en elementos no-void.
¿Entonces por qué esto funciona en JSX?
JSX se compila a llamadas createElement(), no a texto HTML crudo — el parser HTML del navegador nunca ve el código fuente de JSX, así que la sintaxis de autocierre al estilo XML es completamente válida ahí. La brecha solo aparece al escribir archivos .html crudos o HTML como string.