据我所知, 这是对的:
<div>
<p>some words</p>
</div>
但这是错误的:
<p>
<div>some words</div>
</p>
第一个可以传递w3c验证器(xhtml 1.0),但第二个不能。 我知道没有人会像第二个那样编写代码。我只是想知道为什么。 那么其他标签的遏制关系呢?
答案 0 :(得分:188)
查找允许的包含关系的权威位置是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本身)。”
答案 1 :(得分:63)
简而言之,无法在<div>
的DOM中放置<p>
元素,因为开始<div>
标记会自动关闭<p>
元素。
答案 2 :(得分:32)
根据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
元素。
由于当p
元素紧跟div
元素(以及其他元素)后,end tag元素p
可以省略,所以
<p>
<div>some words</div>
</p>
被解析为
<p></p>
<div>some words</div>
</p>
,最后</p>
是错误。
答案 3 :(得分:0)
在X HTML之后,会更改约定而不是XML和HTML约定的混合,这就是为什么第二种方法是错误的并且w3c验证器接受符合标准和约定的正确的东西。
答案 4 :(得分:-6)
因为div标签的优先级高于p标签。 p标记表示段标记是否div标记表示文档标记。您可以在文档标记中写入许多段落,但不能在段落中编写文档。相同的DOC文件。