提问人:Henry H Miao 提问时间:12/6/2011 最后编辑:Peter MortensenHenry H Miao 更新时间:6/11/2022 访问量:92219
为什么 <p> 标签不能包含 <div> 标签?
Why can't the <p> tag contain a <div> tag inside it?
问:
据我所知,这是对的:
<div>
<p>some words</p>
</div>
但这是错误的:
<p>
<div>some words</div>
</p>
第一个可以通过 W3C 验证器 (XHTML 1.0),但第二个不能。我知道没有人会写出像第二个这样的代码。我只是想知道为什么。
那么其他标签的包含关系呢?
答:
因为标签的优先级高于标签。标签表示段落标签,而标签表示文档标签。div
p
p
div
您可以在文档标签中编写多个段落,但不能在一个段落中编写文档。与 DOC 文件相同。
评论
<doc>
简而言之,不可能在 DOM 中将元素放在 a 中,因为开始标签会自动关闭该元素。<div>
<p>
<div>
<p>
评论
div
p
myP.appendChild(myDiv)
查找允许的包含关系的权威位置是 HTML 规范。例如,请参阅 http://www.w3.org/TR/html4/sgml/dtd.html。它指定哪些元素是块元素,哪些是内联元素。对于这些列表,请搜索标记为“HTML 内容模型”的部分。
对于 P 元素,它指定以下内容,这表示只允许 P 元素包含内联元素。
<!ELEMENT P - O (%inline;)* -- paragraph -->
这与 http://www.w3.org/TR/html401/struct/text.html#h-9.3.1 一致,即 P 元素“不能包含块级元素(包括 P 本身)”。
评论
在 X HTML 之后,约定已经改变,现在它是 XML 和 HTML 约定的混合体,所以这就是为什么第二种方法是错误的,W3C 验证器接受符合标准和约定的正确内容。
评论
文档和应用程序正文中使用的大多数元素都归类为流内容。
因此,元素可以包含元素。div
p
这不包括 div 元素,这些
元素只能在需要流内容的地方使用。
因此,元素不能包含元素。p
div
由于当元素紧跟一个元素(以及其他元素)时,可以省略 p
元素的结束标记,因此以下p
div
<p>
<div>some words</div>
</p>
解析为
<p></p>
<div>some words</div>
</p>
最后一个是错误。</p>
评论
div as inline in CSS
<p>Text</p> <div>some words</div> <p></p>
请看 HTML 规范中的这个例子
<!-- Example of data from the client database: -->
<!-- Name: Stephane Boyera, Tel: (212) 555-1212, Email: [email protected] -->
<DIV id="client-boyera" class="client">
<P><SPAN class="client-title">Client information:</SPAN>
<TABLE class="client-data">
<TR><TH>Last name:<TD>Boyera</TR>
<TR><TH>First name:<TD>Stephane</TR>
<TR><TH>Tel:<TD>(212) 555-1212</TR>
<TR><TH>Email:<TD>[email protected]</TR>
</TABLE>
</DIV>
你注意到什么了吗?:元素没有结束标记。规格错误?不可以。<p>
提示#1:的结束标记是可选的<p>
你可能会问:但是,一个元素怎么知道在哪里停下来呢?<p>
来自 w3docs:
如果省略结束标记,则认为段落的末尾与下一个块级元素的开头匹配。
简单来说:a 是一个块元素,它的开始标签会导致父元素被关闭,因此永远不能嵌套在里面。<div>
<p>
<div>
<p>
但是相反的情况呢?你可能会问
井。。。
提示 #2:元素的结束标记是必需的<div>
根据 O'Reilly HTML 和 XHTML 袖珍参考,第四版(第 50 页)
<div> . . . </div>
开始/结束标签 必需/必需
也就是说,元素的结束将仅由其结束标记决定,因此内部的元素不会破坏它。<div>
</div>
<p>
评论
<p>
<span>
<strong>
p
div