web-dev-qa-db-fra.com

Pourquoi la balise <p> ne peut-elle pas contenir une balise <div>?

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?

160
Henry H Miao

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). "

190
Colin Campbell

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>.

64
defau1t

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é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é quecontenu 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.

34
Oriol

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.

0
geekdev786