据我所知,这是对的:
<div>
<p>some words</p>
</div>
但这是错误的:
<p>
<div>some words</div>
</p>
第一个可以通过the W3C validator(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本身)。”
简而言之,不可能在DOM中的<div>
中放置<p>
元素,因为开放的<div>
标签将自动关闭<p>
元素。
根据HTML5,content model元素的div
是flow content
文档和应用程序体中使用的大多数元素都被归类为流内容。
这包括p
元素,其中can only be used预计flow content。
因此,div
元素可以包含p
元素。
然而,content model元素的p
是Phrasing 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>
是一个错误。
在X HTML之后,约定已经改变,现在它是XML和HTML的约定的混合,因此这就是为什么第二种方法是错误的并且W3C验证器接受根据标准和约定的正确的东西。
因为div
标签的优先级高于p
标签。 p
标记表示段落标记,而div
标记表示文档标记。
您可以在文档标记中编写许多段落,但不能在段落中编写文档。与DOC文件相同。