为什么<p>标签内部不能包含</p> <div>标签?</div>

时间:2011-12-06 09:44:33

标签: html xhtml

据我所知, 这是对的:

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

但这是错误的:

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

第一个可以传递w3c验证器(xhtml 1.0),但第二个不能。 我知道没有人会像第二个那样编写代码。我只是想知道为什么。 那么其他标签的遏制关系呢?

5 个答案:

答案 0 :(得分:188)

查找允许的包含关系的权威位置是HTML规范。例如,请参阅http://www.w3.org/TR/html4/sgml/dtd.html。它指定哪些元素是块元素,哪些元素是内联元素。对于这些列表,请搜索标记为“HTML内容模型”的部分。

对于P元素,它指定以下内容,表示P元素仅允许包含内联元素。

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

这与http://www.w3.org/TR/html401/struct/text.html#h-9.3.1一致,它表示P元素“不能包含块级元素(包括P本身)。”

答案 1 :(得分:63)

简而言之,无法在<div>的DOM中放置<p>元素,因为开始<div>标记会自动关闭<p>元素。

答案 2 :(得分:32)

根据HTML5,content model元素的divflow content

  

文档和应用程序正文中使用的大多数元素都被归类为流内容。

其中包含p个元素,其中can only be used符合预期flow content

因此,div元素可以包含p个元素。

但是,content model元素pPhrasing content

  

短语内容是文档的文本,以及元素   在段落内标记该文本。运行phrasing content表格paragraphs

这不包括div个元素,can only be used预计会flow content

因此,p元素不能包含div元素。

由于当p元素紧跟div元素(以及其他元素)后,end tag元素p可以省略,所以

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

被解析为

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

,最后</p>是错误。

答案 3 :(得分:0)

在X HTML之后,会更改约定而不是XML和HTML约定的混合,这就是为什么第二种方法是错误的并且w3c验证器接受符合标准和约定的正确的东西。

答案 4 :(得分:-6)

因为div标签的优先级高于p标签。 p标记表示段标记是否div标记表示文档标记。您可以在文档标记中写入许多段落,但不能在段落中编写文档。相同的DOC文件。