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