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

据我所知,这是对的:

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

但这是错误的:

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

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

HTML规范是查找允许的遏制关系的权威地方。 例如,参见http://www.w3.org/TR/html4/sgml/dtd.html 。 它指定哪些元素是块元素,哪些是内联的。 对于这些列表,search标记为“HTML内容模型”的部分。

对于P元素,它指定了以下内容,这表明P元素只允许包含内联元素。

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

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

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

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

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

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

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


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

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

这不包括div元素,它只能在预期stream内容的地方使用 。

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

由于p元素的结束标记可以在p元素之后立即跟随一个div元素(除其他之外),因此可以省略

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

被parsing为

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

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

在XHTML之后,约定被改变了,而不是XML和HTML约定的混合,所以这就是为什么第二种方法是错误的,W3Cvalidation者接受了正确的东西,按照标准和惯例。

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