Decisión de diseño: ¿por qué generar p sin / p?

14

tl;dr

Algunos programas ampliamente utilizados, que generan html, solo generarán etiquetas de párrafo de apertura y no de cierre, suponiendo que el navegador cerrará párrafos correctamente.

A primera vista, me parece que la suposición de que los navegadores cerrarán correctamente los párrafos no es correcta. ¿Es mi interpretación correcta? De manera más general, ¿qué compensaciones están involucradas en este tipo de decisión?

Al buscar en el código fuente de moinmoin, la siguiente línea de código me llamó la atención:

# We only open those tags and let the browser auto-close them:
_auto_closing_tags = set(['p'])

( fuente )

Después de leer el resto de la implementación, me convencí a mí mismo de que sí, de hecho, cuando moinmoin genera código html para una de sus páginas, generará correctamente las etiquetas de párrafo abierto, cuando sea apropiado, mientras que al mismo tiempo evitando cualquiera de las etiquetas de cierre de párrafo (a pesar de ser capaz de hacerlo trivialmente).

Para mi caso de uso específico, bastante inusual, este comportamiento no es correcto. Estoy tentado a enviar un informe de error y / o cambiar el comportamiento. Sin embargo, parece que esta decisión de diseño fue tomada cuidadosamente. No estoy lo suficientemente versado en las complejidades del estándar html, o las diversas implementaciones del navegador, para poder decir si este es el comportamiento correcto en general, y tengo la sensación de que mi instinto de corregir / cambiar este comportamiento podría ser mal orientado.

¿Este código hace una suposición válida sobre las implementaciones del navegador? ¿El HTML generado es válido? En términos más generales, ¿qué compensaciones podría faltar aquí?

    
pregunta blueberryfields 04.09.2013 - 00:16
fuente

2 respuestas

33

Las etiquetas finales para los elementos p eran opcionales en HTML y solo se requerían en XHTML. Sin embargo, el borrador de HTML5 introduce un conjunto de condiciones para cuando la etiqueta final p sea realmente opcional:

  

La etiqueta final de un elemento p se puede omitir si el elemento p es seguido inmediatamente por una dirección, artículo, aparte, blockquote, dir, div, dl, fieldset, footer, form, h1, h2, h3, h4, h5, h6, encabezado, hgroup, hr, menu, nav, ol, p, pre, section, table o ul, elemento, o si no hay más contenido en el elemento principal y el elemento principal no es un elemento a.

     

Fuente: especificación de HTML5

Dicho esto, el único argumento que escuché para omitir las etiquetas finales para los elementos p es el tamaño del documento. Depende de usted decidir si tiene sentido para su documento o no. Personalmente tiendo a incluir todas las etiquetas finales opcionales, en caso de que no cumpla con los requisitos para cuando la etiqueta final sea opcional.

    
respondido por el yannis 04.09.2013 - 00:22
fuente
16

La especificación W3C para HTML5 establece específicamente que:

  

La etiqueta final de un elemento p se puede omitir si el elemento p está inmediatamente   seguido de una dirección, artículo, aparte, blockquote, dir, div, dl,   fieldset, pie de página, formulario, h1, h2, h3, h4, h5, h6, encabezado, hr, menú, nav,   ol, p, pre, sección, tabla o elemento ul, o si no hay más   El contenido en el elemento padre y el elemento padre no es una   elemento.

Así que, básicamente, la especificación ha proporcionado muchas maneras de evitar la complejidad (grande o pequeña que puede ser) de cerrar la etiqueta. Cualquier implementación de navegador conforme tendría que adaptarse a estas excepciones.

    
respondido por el Robert Harvey 04.09.2013 - 00:22
fuente

Lea otras preguntas en las etiquetas