html - Nesting<p> no funcionará mientras nesting<div> will?
nested paragraph (2)
Por lo general, no voy a anidar <p>
así:
<p>The following:
<p>one</p>
<p>two</p>
</p>
y anidaré así usando <div>
lugar. Pero hoy utilicé <p>
pero parece que tanto Emacs como Google Chrome considerarían el <p>
externo cerrado tan pronto como vea que se inicia un nuevo <p>
. (el DOCTYPE
es HTML 4.01 estricto).
Pensé que <p>
no es más que un <div>
pero solo con un margen y relleno predefinidos, pero ¿es cierto que <p>
no se puede anidar? Si es así, ¿qué regla dice que no puede?
De la especificación HTML 4.01 sección 9.3.1
El elemento P representa un párrafo. No puede contener elementos de nivel de bloque (incluido P mismo).
Porque un párrafo es un párrafo ... y así es como se define HTML (y HTML no es XML).
Cualquier <p>
(u otro elemento de nivel de bloque) cerrará implícitamente cualquier <p>
abierto.
Según 9.3.1 Párrafos: el elemento P de la especificación HTML 4.01:
El elemento P representa un párrafo. No puede contener elementos de nivel de bloque (incluido P mismo).
Tenga en cuenta que así es como se analiza el HTML y que incluso un <div>
habría cerrado implícitamente el párrafo.
Sin embargo, un <span>
con display:block;
no habría cerrado el <p>
ya que un <span>
no es un elemento de nivel de bloque.
Es decir, el CSS es irrelevante en esta etapa del procesamiento de HTML y el CSS es irrelevante para el DOM / analizador al determinar si un elemento es un elemento de nivel de bloque o no. Considere el caso cuando CSS se aplica dinámicamente o mediante una hoja de estilo aún no cargada: el CSS aplicado no altera el DOM.
Si bien la especificación HTML5 (borrador de trabajo) no incluye el lenguaje anterior en la especificación HTML4, sí define un párrafo como contenedor para la fase de contenido y además tiene una sección de párrafos .
¿La respuesta aceptada a la Lista de elementos HTML5 que se pueden anidar dentro del elemento P? dice que los elementos <p>
no pueden anidar en HTML5. La frase clave de la documentación es: "Ejecuciones de contenido de redacción [que no incluye elementos <p>
forman párrafos". Además, HTML5, que intenta ser compatible con versiones anteriores en muchos aspectos, tiene una justificación para "Restricciones en los modelos de contenido y en los valores de los atributos" :
Ciertos elementos se analizan de maneras algo excéntricas (generalmente por razones históricas) , y las restricciones de su modelo de contenido pretenden evitar exponer al autor a estos problemas.
Este comportamiento se hace referencia a partir de una entrada wiki de WG HTML5 en contenido de flujo :
Las restricciones de HTML5 sobre la anidación de p elementos y sobre qué elementos p pueden contener, se deben a, citan: "peculiaridades del analizador sintáctico" que hace que p se cierre automáticamente .