为什么<p>标签里面不能包含<div>标签?

据我所知,这是对的:

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

但这是错误的:

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

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


寻找允许的收容关系的权威地方是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本身)”。


总之,这是不可能放置<div>元素内的<p>在DOM因为开口<div>标签将自动关闭<p>元件。


根据HTML5, div元素的内容模型是流内容

文档和应用程序主体中使用的大多数元素被分类为流内容。

这包括p元素,这些元素只能用于需要流内容的地方。

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


然而, p元素的内容模型是Phrasing内容

短语内容是文档的文本,以及在段落内标记该文本的元素。 短语内容的运行形成段落。

这不包括div元素,它只能用于需要流内容的地方。

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

由于当p元素之后紧接着一个div元素(除其他之外)时,可以省略p元素的结束标记,如下所示

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

被解析为

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

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

链接地址: http://www.djcxy.com/p/15663.html

上一篇: Why <p> tag can't contain <div> tag inside it?

下一篇: Why the select tag need at least on child to be xhtml 1.0 valid