Hasta donde yo sé, esto es correcto:
<div>
<p>some words</p>
</div>
Pero esto está mal:
<p>
<div>some words</div>
</p>
El primero puede pasar el validador W3C (XHTML 1.0), pero el segundo no. Sé que nadie escribirá código como el segundo. Solo quiero saber por qué.
¿Y qué hay de la relación de contención de otras etiquetas?
<p>
es un elemento de nivel de bloque, y (se supone que debe usarse) para mostrar texto, no permitirá otros elementos de nivel de bloque dentro de él, sino solo elementos en línea como<span>
y<strong>
.p
es un elemento de nivel de bloque que no tiene nada que ver con eso.div
También es uno y permite otros bloques.Respuestas:
Un lugar autorizado para buscar relaciones de contención permitidas es la especificación HTML. Ver, por ejemplo, http://www.w3.org/TR/html4/sgml/dtd.html . Especifica qué elementos son elementos de bloque y cuáles están en línea. Para esas listas, busque la sección marcada "Modelos de contenido HTML".
Para el elemento P, especifica lo siguiente, lo que indica que los elementos P solo pueden contener elementos en línea.
Esto es coherente con http://www.w3.org/TR/html401/struct/text.html#h-9.3.1 , que dice que el elemento P "no puede contener elementos de nivel de bloque (incluido el propio P)".
fuente
%inline
bit anterior. Ver también la respuesta de Oriol.En resumen, es imposible colocar un
<div>
elemento dentro de a<p>
en el DOM porque la<div>
etiqueta de apertura cerrará automáticamente el<p>
elemento.fuente
div
elemento dentro de unap
en el DOM , por ejemplomyP.appendChild(myDiv)
. Pero un analizador HTML no lo hará.Según HTML5, el modelo de contenido de
div
elementos es contenido de flujoEso incluye
p
elementos, que solo pueden usarse donde se espera contenido de flujo .Por lo tanto, los
div
elementos pueden contenerp
elementos.Sin embargo, el modelo de contenido de
p
elementos es contenido de fraseoEso no incluye
div
elementos, que solo se pueden usar donde se espera contenido de flujo .Por lo tanto, los
p
elementos no pueden contenerdiv
elementos.Dado que la etiqueta final de
p
elementos puede omitirse cuando elp
elemento es seguido inmediatamente por undiv
elemento (entre otros), lo siguientese analiza como
Y el último
</p>
es un error.fuente
div as inline in CSS
no sirve de nada, ya que la nueva estructura analizada es<p>Text</p> <div>some words</div> <p></p>
correcta.Después del X HTML, las convenciones han cambiado, y ahora es una mezcla de convenciones de XML y HTML, por eso el segundo enfoque es incorrecto y el validador W3C acepta las cosas correctas que están de acuerdo con los estándares y convenciones.
fuente
Porque la
div
etiqueta tiene mayor prioridad que lap
etiqueta. Lap
etiqueta representa una etiqueta de párrafo, mientras que ladiv
etiqueta representa una etiqueta de documento.Puede escribir muchos párrafos en una etiqueta de documento, pero no puede escribir un documento en un párrafo. Lo mismo que un archivo DOC.
fuente
<doc>
: D