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

时间:2012-08-18 04:19:41

标签: html nested paragraph

我通常不会像这样嵌套<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>是否无法嵌套?如果是这样,什么规则说它不能?

2 个答案:

答案 0 :(得分:55)

因为段落是段落..而且HTML的定义方式(HTML是不是 XML)。

任何<p>(或其他块级元素)隐式关闭任何开放的<p>

HTML 4.01规范的每9.3.1 Paragraphs: the P element条:

  

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


请注意,这是解析HTML的方式,甚至<div>也会隐式关闭该段落!

但是,<span> display:block; 关闭了<p>,而<span> 块级元素。

也就是说,在HTML处理的这个阶段,CSS是无关,并且在确定元素是否为块时,CSS与DOM /解析器无关等级元素与否。考虑动态应用CSS或通过尚未加载的样式表应用CSS的情况:应用的CSS不会改变DOM。


虽然HTML5(工作草案)规范不包含HTML4规范中的上述语言,但它会继续将段落定义为phasing content容器,并且还具有一个section on paragraphs

List of HTML5 elements that can be nested inside P element?的已接受答案表示<p>元素无法嵌套在HTML5中。文档中的关键短语是:“短语内容的运行[不包括<p>元素]形成段落”。此外,HTML5试图在许多方面向后兼容,有"Restrictions on content models and on attribute values"的基本原理:

  

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

此行为是从a HTML5 WG wiki entry on flow content引用的:

  

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

答案 1 :(得分:11)

来自HTML 4.01 specification section 9.3.1

  

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