¿Cuáles son todos los elementos de cierre automático válidos (p. Ej., <br/>) en XHTML (implementado por los principales navegadores)?
Sé que XHTML técnicamente permite que cualquier elemento se cierre automáticamente, pero estoy buscando una lista de esos elementos compatibles con todos los principales navegadores. Consulte http://dusan.fora.si/blog/self-closing-tags para ver ejemplos de algunos problemas causados por elementos de cierre automático como <div />.
html
xhtml
browser
cross-browser
kamens
fuente
fuente
Respuestas:
Todos los navegadores que admiten XHTML (Firefox, Opera, Safari, IE9 ) admiten sintaxis de cierre automático en cada elemento .
<div/>
,<script/>
,<br></br>
Todo debería funcionar bien. Si no lo hacen, entonces tiene HTML con XHTML DOCTYPE agregado de manera inapropiada.DOCTYPE no cambia la forma en que se interpreta el documento. Solo el tipo MIME lo hace .
Decisión del W3C sobre ignorar DOCTYPE :
Es una trampa muy común, porque el Validador W3C ignora en gran medida esa regla, pero los navegadores la siguen religiosamente. Lea Comprensión de HTML, XML y XHTML del blog de WebKit:
Para probar si tiene XHTML real o HTML no válido con DOCTYPE de XHTML, coloque esto en su documento:
Valida, y en XHTML real funciona perfectamente (ver: 1 vs 2 ). Si no puede creer lo que ve (o no sabe cómo configurar los tipos MIME), abra su página a través del proxy XHTML .
Otra forma de verificar es ver la fuente en Firefox. Destacará las barras en rojo cuando no sean válidas.
En HTML5 / XHTML5 esto no ha cambiado, y la distinción es aún más clara, porque ni siquiera tiene más
DOCTYPE
.Content-Type
es el reyPara el registro, la especificación XHTML permite que cualquier elemento se cierre automáticamente al hacer de XHTML una aplicación XML : [énfasis mío]
También se muestra explícitamente en la especificación XHTML :
fuente
<script>
o<div>
resultados en interpretación / interpretación diferentetext/html
. En XHTML real, enviado yaapplication/xhtml+xml
que funciona bien. Lea el artículo al que me vinculé (o el apéndice C de la especificación XHTML) antes de votar en contra.application/xhtml+xml
tipo MIME , puedo garantizar que<script/>
funcionará. Con el tipo MIME. Solamente.Un elemento a tener mucho cuidado con este tema es el
<script
elemento>. Si tiene un archivo fuente externo, causará problemas cuando lo cierre. Intentalo:Esto funcionará en Firefox, pero se rompe en IE6 al menos. Lo sé, porque me encontré con esto cuando cerré demasiado celosamente cada elemento que vi ;-)
fuente
La sintaxis de cierre automático funciona en todos los elementos en application / xhtml + xml. No es compatible con ningún elemento en text / html, pero los elementos que están "vacíos" en HTML4 o "void" en HTML5 no toman una etiqueta final de todos modos, por lo que si coloca una barra diagonal en ellos, parece que Se admitió la sintaxis de cierre automático.
fuente
Desde el sitio de referencia de W3 Schools :
fuente
/>
:"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "link", "meta", "param"
grep EMPTY xhtml1-strict.dtd | sort
ogrep EMPTY xhtml1-transitional.dtd | sort
La mejor pregunta sería: ¿qué etiquetas pueden cerrarse automáticamente incluso en modo HTML sin afectar el código? Respuesta: solo aquellos que tienen contenido vacío (son nulos). De acuerdo con las especificaciones HTML, los siguientes elementos son nulos:
area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr
La versión anterior de la especificación también figura en la lista
command
. Además, según diversas fuentes, las siguientes etiquetas obsoletas o no estándar son nulas:basefont, bgsound, frame, isindex
fuente
Espero que esto ayude a alguien:
fuente
¿Qué hay de
<meta>
y<link>
? ¿Por qué no están en esa lista?Como regla general, no cierre automáticamente ningún elemento que tenga la intención de tener contenido, porque definitivamente causará problemas al navegador tarde o temprano.
Los que son de cierre automático, como
<br>
y<img>
, deberían ser obvios. Los que no lo son ... ¡simplemente no los cierren!fuente
La última vez que verifiqué, los siguientes fueron los elementos vacíos / vacíos enumerados en HTML5.
Válido para autores: area, base, br, col, command, embed, eventsource, hr, img, input, link, meta, param, source
Inválido para autores: basefont, bgsound, frame, spacer, wbr
Además de los pocos que son nuevos en HTML5, eso debería darle una idea de los que podrían ser compatibles al servir XHTML como texto / html. (Solo pruébelos examinando el DOM producido).
En cuanto a XHTML servido como application / xhtml + xml (lo que lo convierte en XML), se aplican las reglas XML y cualquier elemento puede estar vacío (a pesar de que XHTML DTD no puede expresar esto).
fuente
Debes echar un vistazo a los DTD xHTML , todos están listados. Aquí hay una revisión rápida de todos los principales:
fuente
Se llaman elementos "nulos" en HTML 5. Están listados en la especificación oficial de W3 .
A partir de abril de 2013, son:
A diciembre de 2018 (HTML 5.2), son:
fuente
Otro problema de etiqueta de cierre automático para IE es el elemento de título. Cuando IE (solo lo probé en IE7) ve esto, le presenta al usuario una página en blanco. Sin embargo, "ves la fuente" y todo está ahí.
Originalmente vi esto cuando mi XSLT generó la etiqueta de cierre automático.
fuente
<title/>
etiquetas.No voy a tratar de trabajar demasiado en esto, especialmente porque la mayoría de las páginas que escribo se generan o la etiqueta tiene contenido. Los únicos dos que me han causado problemas al hacer que se cierren automáticamente son:
<title/>
Para esto, simplemente he recurrido a darle siempre una etiqueta de cierre separada, ya que una vez que está allí, en
<head></head>
realidad no hace que su código sea más desordenado para trabajar de todos modos.<script/>
Este es el grande con el que recientemente tuve problemas. Durante años, siempre había usado
<script/>
etiquetas de cierre automático cuando el script proviene de una fuente externa. Pero recientemente comencé a recibir mensajes de error de JavaScript sobre un formulario nulo. Después de varios días de investigación, descubrí que el problema era (supuestamente) que el navegador nunca estaba llegando a la<form>
etiqueta porque no se daba cuenta de que era el final de la<script/>
etiqueta. Entonces, cuando lo hice en<script></script>
etiquetas separadas , todo funcionó. No sé por qué es diferente en las diferentes páginas que hice en el mismo navegador, ¡pero fue un gran alivio encontrar la solución!fuente
<hr /> es otro
fuente