Pour autant que je sache, c'est vrai:
<div>
<p>some words</p>
</div>
Mais c'est faux:
<p>
<div>some words</div>
</p>
Le premier peut passer le validateur W3C (XHTML 1.0), mais le second ne le peut pas. Je sais que personne n’écrira du code comme le second. Je veux juste savoir pourquoi.
Et qu'en est-il de la relation de confinement des autres balises?
La spécification HTML est un endroit faisant autorité pour rechercher les relations de confinement autorisées. Voir, par exemple, http://www.w3.org/TR/html4/sgml/dtd.html . Il spécifie quels éléments sont des éléments de bloc et lesquels sont en ligne. Pour ces listes, recherchez la section intitulée "Modèles de contenu HTML".
Pour l'élément P, il spécifie ce qui suit, qui indique que les éléments P ne peuvent contenir que des éléments en ligne.
<!ELEMENT P - O (%inline;)* -- paragraph -->
Ceci est cohérent avec http://www.w3.org/TR/html401/struct/text.html#h-9.3.1 , qui indique que l'élément P "ne peut pas contenir d'éléments de niveau bloc (y compris P lui-même). "
En bref, il est impossible de placer un élément <div>
Dans un <p>
Dans le DOM, car la balise d'ouverture <div>
Fermera automatiquement l'élément <p>
.
Selon HTML5, les éléments modèle de conten de div
sont contenu du flux
La plupart des éléments utilisés dans le corps des documents et des applications sont classés en tant que contenu de flux.
Cela inclut p
éléments, lesquels ne peut être utilisé où contenu du flux est attendu.
Par conséquent, les éléments div
peuvent contenir des éléments p
.
Cependant, les éléments modèle de conten de p
sont contenu de formulation
Le contenu de formulation est le texte du document, ainsi que les éléments qui le balisent au niveau intra-paragraphe. Runs of contenu de la formulation forme paragraphes .
Cela n'inclut pas les éléments div
, qui ne peut être utilisé que où contenu du flux est attendu.
Par conséquent, les éléments p
ne peuvent pas contenir les éléments div
.
Étant donné que les éléments balise de fin sur p
peuvent être omis lorsque l'élément p
est immédiatement suivi d'un élément div
(entre autres), les suivants
<p>
<div>some words</div>
</p>
est analysé comme
<p></p>
<div>some words</div>
</p>
et le dernier </p>
est une erreur.
Après le code X HTML, les conventions ont été modifiées. C’est maintenant un mélange de conventions XML et HTML. C’est pourquoi la deuxième approche est fausse et que le validateur W3C accepte les éléments corrects qui sont conformes aux normes et conventions.