嵌套<div>将嵌套<p>不起作用?

nop*_*ole 40 html nested paragraph

我通常不会这样筑巢<p>:

<p>The following:
    <p>one</p>
    <p>two</p>
</p>
Run Code Online (Sandbox Code Playgroud)

我将使用<div>相反的方式嵌套.但是今天我用过<p>但似乎Emacs和谷歌Chrome都会在<p>看到新<p>的开始时就考虑外部关闭.(这DOCTYPE是HTML 4.01严格).

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

小智 60

因为段落是一个段落..这就是HTML的定义方式(HTML 不是 XML).

任何<p>(或其他块级元素)将隐式关闭任何打开<p>.

9.3.1段落: HTML 4.01规范的P元素:

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


请注意,这就是解析HTML的方式,甚至<div>可以隐式关闭段落!

然而,<span>display:block;关闭了<p>作为<span>不是一个块级元素.

也就是说,CSS是不相关的,在这个阶段的HTML处理和CSS是不相关的确定,如果一个元素是一个块级元素或不时对DOM /解析器.考虑动态应用CSS或通过尚未加载的样式表应用CSS的情况:应用的CSS不会改变DOM.


虽然HTML5(工作草案)规范不包含HTML4规范中的上述语言,但它确实将段落定义为用于分阶段内容容器,并且还有一个关于段落的部分.

可以嵌套在P元素中的HTML5元素列表的已接受答案<p>元素不能嵌套在HTML5中.文件中的关键短语是:"措词内容的运行[不包括<p>元素]形成段落".此外,HTML5试图在许多方面向后兼容,它具有"对内容模型和属性值的限制"的基本原理:

某些元素以某种古怪的方式进行解析(通常是出于历史原因),其内容模型限制旨在避免将作者暴露给这些问题.

流内容的HTML5 WG wiki条目引用此行为:

HTML5对p元素嵌套和p元素可能包含的限制是由于引用:"解析器的特性" 导致p自动关闭 ..


Ant*_*ony 11

HTML 4.01规范第9.3.1节

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

  • `<p>`不是遗产*它定义*语义意图* - 毫不奇怪,一个段落.如果`<p>`被定义为*legacy*那么我们也应该摆脱`<hX>`元素..毕竟,它们可以用`<div>`表示. (6认同)
  • @pst实际上,我确实觉得,为什么段落中不能包含任何块元素?在通常的用法中,我们可能有一个段落,而且这一段可以引用一个短行然后继续,所以这个引用在逻辑上更多地是本段作为一个单元的一部分,而不是本段之外的单独实体.但当然,如果就是这样,那么人们就必须按照这个规则进行设计 (2认同)