<div>
<p>some words</p>
</div>
但这是错误的:
<p>
<div>some words</div>
</p>
第一个可以通过W3C验证器(XHTML 1.0),但第二个不能。我知道没有人会写类似第二个的代码,我只是想知道为什么。
其他标签的包含关系呢?
查找容纳关系允许的权威来源是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本身)”。
简而言之,在DOM中无法将<div>
元素放置在<p>
元素内,因为开启<div>
标签会自动关闭<p>
元素。
div
元素放在p
元素里,例如:myP.appendChild(myDiv)
。但HTML解析器不会这样做。 - Orioldiv
设置为内联元素也没有用,因为新解析的结构是:一些单词
```
我的理解正确吗?
- Sanjay<!-- Example of data from the client database: -->
<!-- Name: Stephane Boyera, Tel: (212) 555-1212, Email: sb@foo.org -->
<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>sb@foo.org</TR>
</TABLE>
</DIV>
你有注意到什么吗?:在<p>
元素中没有结束标签。规范的错误吗?不是。
<p>
关闭标签你可能会问:那么<p>
元素如何知道该在哪里停止呢?
根据 w3docs:
如果省略了结束标记,则认为段落的结尾与下一个块级元素的开头匹配。
简单来说: <div>
是块元素,它的开标签将导致父级 <p>
被关闭,因此 <div>
永远不能嵌套在 <p>
中。
但是反过来呢? 你可能会问
那好...
<div>
元素的结束标记根据 O’Reilly HTML and XHTML Pocket Reference,第四版(第50页)
<div> . . . </div>
开始/结束标记 必须/必须
也就是说,<div>
元素的结尾只能通过其关闭标记 </div>
确定,因此其中的 <p>
元素不会中断它。
div
标签的优先级高于 p
标签。 p
标签表示段落标签,而 div
标签表示文档标签。<doc>
:D - Kyle
<p>
是一个块级元素,用于显示文本,它不允许其他块级元素嵌套在其中,只能使用内联元素如<span>
和<strong>
。 - Bojangles