为什么不能 标签包含一个 tag inside it?

问题描述 投票:157回答:5

据我所知,这是对的:

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

但这是错误的:

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

第一个可以通过the W3C validator(XHTML 1.0),但第二个不能。我知道没有人会像第二个那样编写代码。我只是想知道为什么。

那么其他标签的遏制关系呢?

html xhtml
5个回答
190
投票

查找允许的包含关系的权威位置是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本身)。”


63
投票

简而言之,不可能在DOM中的<div>中放置<p>元素,因为开放的<div>标签将自动关闭<p>元素。


34
投票

根据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元素。

由于当end tag元素紧跟一个p元素(以及其他)时,可以省略p元素的div,以下

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

被解析为

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

而最后一个</p>是一个错误。


0
投票

在X HTML之后,约定已经改变,现在它是XML和HTML的约定的混合,因此这就是为什么第二种方法是错误的并且W3C验证器接受根据标准和约定的正确的东西。


-6
投票

因为div标签的优先级高于p标签。 p标记表示段落标记,而div标记表示文档标记。

您可以在文档标记中编写许多段落,但不能在段落中编写文档。与DOC文件相同。

© www.soinside.com 2019 - 2024. All rights reserved.