为什么<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>
是一个错误。
上一篇: 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