63 votes

Imbrication des éléments de niveau bloc à l'intérieur du <p> tag ... vrai ou faux?

La syntaxe et la sémantique sont-elles correctes pour imbriquer <div> ou tout autre élément de niveau bloc dans la balise <p> ? Je parle de la DTD HTML4 transitoire.

Si ce n'est pas le cas, puis-je utiliser plutôt <span style="display: block"> ?

88voto

Alohci Points 30645

Du point de vue syntaxique, une div à l'intérieur d'un p n'est pas valide dans toutes les normes de HTML. En outre, lors de l'utilisation conforme analyseur HTML, il est impossible de placer un <div> élément à l'intérieur d'un <p> dans les DOM en raison de l'ouverture <div> balise doit se fermer automatiquement l' <p> élément.

Sémantiquement, le bon choix dépend du contenu que vous marquez. Vous aurez besoin d'au moins montrer un exemple de paragraphe complet et éventuellement le contenu qui l'entoure pour être sûr de fournir des informations suffisantes pour la bonne sémantique mark-up à déterminer.

Toutefois, étant donné que les deux <div> et <span> sont de la sémantique libre, et que les CSS ne jamais changer cela, si vous êtes certain que le contenu de l' <p> balise vraiment la forme d'un paragraphe, et qu' <span style="display: block"> vous obtient le problème de l'effet que vous recherchez, alors que c'est valide HTML et serait tout à fait approprié de la solution.

23voto

Guffa Points 308133

Non, un élément de paragraphe ne peut pas contenir d'autres éléments de bloc.

Référence

Une balise de paragraphe est destinée à un bloc de texte. Si vos éléments font partie du texte (et non des éléments de bloc), il serait sémantiquement correct, sinon ce ne serait pas le cas. Une balise span avec display:block est toujours un élément de bloc.

6voto

Jon Points 194296

Il est syntaxiquement incorrect, comme vous pouvez le voir par vous-même en utilisant le validateur du W3C.

Du point de vue sémantique et pratiquement, je dirais que c'est "ok" dans le sens que a) il est très naturel, b) tous les navigateurs les manipuler correctement (en effet, c'est le moyen le plus simple des problèmes qu'ils ont à faire face à tous les jours).

Si votre code HTML est produit par la saisie de l'utilisateur (par exemple, un éditeur HTML du widget à l'aide de laquelle les visiteurs peuvent laisser des commentaires), alors je dirais simplement laissé faire, même si elle est "incorrect".

Sinon, vous pouvez modifier le balisage un peu. Personnellement, je aller avec

<div class="para">
    <div>Some content</div>
</div>

et donnez - .para marges appropriées avec les CSS.

0voto

Matchu Points 37755

Sans aucun contexte, cela me semble bien, tant que votre balise externe est toujours un paragraphe. Si votre div ressemble à quelque chose qui ressemble à votre barre de navigation supérieure, alors pas tant que ça, mais si c'est un conteneur pour une image et une légende que vous allez laisser flotter à droite, alors aucun problème

0voto

maeenul Points 1

Cet article montre quelque chose à ce sujet. On dirait que c'est le comportement standard du navigateur.

http://blog.programmingsolution.net/html/html-div-tag-inside-html-p-article-tag-does-not-work-correctly/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X