因为段落就是段落……这就是 HTML 的定义方式(而 HTML不是XML)。
任何<p>
(或其他块级元素)将隐式关闭任何 open <p>
。
根据9.3.1 段落: HTML 4.01 规范的 P 元素:
P 元素代表一个段落。它不能包含块级元素(包括 P 本身)。
请注意,这就是HTML 的解析方式,甚至 a<div>
也会隐式关闭该段落!
但是,a不会关闭 a,<span>
因为a 不是块级元素。display:block;
<p>
<span>
也就是说,在 HTML 处理的这个阶段,CSS 是无关紧要的,在确定元素是否为块级元素时,CSS 与 DOM/解析器无关。考虑动态应用 CSS 或通过尚未加载的样式表应用 CSS 的情况:应用的 CSS 不会改变 DOM。
虽然 HTML5(工作草案)规范不包括 HTML4 规范中的上述语言,但它确实继续将段落定义为分阶段内容的容器,并且进一步有一个关于段落的部分。
可以嵌套在 P 元素中的 HTML5 元素列表的公认答案?说<p>
元素不能嵌套在 HTML5 中。文档中的关键短语是:“短语内容 [不包括<p>
元素] 形成段落”。此外,HTML5 试图在许多方面向后兼容,其理由是“对内容模型和属性值的限制”:
某些元素的解析方式有些古怪(通常是出于历史原因),它们的内容模型限制旨在避免将作者暴露于这些问题。
此行为引用自HTML5 WG wiki entry on flow content:
HTML5 对 p 元素的嵌套以及 p 元素可能包含的内容的限制是由于引用:“解析器的特性”导致 p 自动关闭..