为什么<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文件。