ti-enxame.com

Por que a tag <p> não pode conter a tag <div> dentro dela?

Tanto quanto eu sei, isso é certo:

<div>
  <p>some words</p>
</div>

Mas isso está errado:

<p>
  <div>some words</div>
</p>

O primeiro pode passar o validador w3c (xhtml 1.0), mas o segundo não pode. Eu sei que ninguém vai escrever código como o segundo. Eu só quero saber porque. E quanto ao relacionamento de contenção de outras marcas?

159
Henry H Miao

Um local autoritativo para procurar por relações de contenção permitidas é a especificação HTML. Veja, por exemplo, http://www.w3.org/TR/html4/sgml/dtd.html . Especifica quais elementos são elementos de bloco e quais são inline. Para essas listas, pesquise a seção marcada "Modelos de conteúdo HTML".

Para o elemento P, especifica o seguinte, que indica que os elementos P só podem conter elementos sequenciais.

<!ELEMENT P - O (%inline;)*            -- paragraph -->

Isso é consistente com http://www.w3.org/TR/html401/struct/text.html#h-9.3.1 , que diz que o elemento P "não pode conter elementos no nível do bloco (incluindo o próprio P). "

189
Colin Campbell

Em suma, é impossível colocar um elemento <div> dentro de um <p> no DOM porque a tag <div> de abertura fechará automaticamente o elemento <p>.

63
defau1t

De acordo com o HTML5, o modelo de conteúdo de divNAME _ elementos é conteúdo de fluxo

A maioria dos elementos usados ​​no corpo de documentos e aplicativos é categorizada como conteúdo de fluxo.

Isso inclui pNAME _ elementos, que só pode ser usado onde conteúdo do fluxo é esperado.

Portanto, os elementos divpodem conter elementos pname__.


No entanto, o modelo de conteúdo de pNAME _ elementos é Conteúdo de redação

Conteúdo de frase é o texto do documento, bem como os elementos que marcam esse texto no nível intra-parágrafo. Execuções de conteúdo de frase forma parágrafos .

Isso não inclui divNAME _ elementos, que só pode ser usado onde conteúdo de fluxo é esperado.

Portanto, os elementos pnão podem conter elementos divname__.

Como os elementos end tag of pNAME _ podem ser omitidos quando o elemento pé imediatamente seguido por um elemento div(entre outros), o seguinte

<p>
  <div>some words</div>
</p>

é analisado como

<p></p>
<div>some words</div>
</p>

e o último </p> é um erro.

33
Oriol

Depois do X HTML, as convenções foram alteradas, não é uma mistura de convenções de XML e HTML, e é por isso que a segunda abordagem está errada e o w3c validator aceita as coisas corretas que estão de acordo com os padrões e convenções.

0
geekdev786