49

我通常不会这样嵌套<p>

<p>The following:
    <p>one</p>
    <p>two</p>
</p>

我会这样嵌套使用<div>。但是今天我使用<p>了,但似乎 Emacs 和 Google Chrome 都会在<p>看到新<p>的启动时立即考虑外部关闭。(这DOCTYPE是 HTML 4.01 Strict)。

我认为<p>只不过是一个,但只是带有一些预定义的边距和填充,但是不能嵌套<div>是真的吗?<p>如果是这样,什么规则说它不能?

4

2 回答 2

78

因为段落就是段落……这就是 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 自动关闭..

于 2012-08-18T04:21:46.930 回答
11

来自HTML 4.01 规范第 9.3.1 节

P 元素代表一个段落。它不能包含块级元素(包括 P 本身)。

于 2012-08-18T04:22:47.817 回答