据我所知,这是对的:
<div>
<p>some words</p>
</div>
Run Code Online (Sandbox Code Playgroud)
但这是错误的:
<p>
<div>some words</div>
</p>
Run Code Online (Sandbox Code Playgroud)
第一个可以通过w3c验证器(xhtml 1.0),但第二个不能.我知道没有人会像第二个那样编写代码.我只是想知道为什么.那么其他标签的遏制关系呢?
来自http://webdesign.about.com/od/htmltags/p/aadivtag.htm
在HTML 4中,DIV元素不能位于另一个块级元素内,就像P元素一样.但是,在HTML5中,DIV元素可以在里面找到,并且可以包含其他流内容元素,如P和DIV.
我在表格中有这样的东西
<p> <label...> <input...> </p>
Run Code Online (Sandbox Code Playgroud)
但是当Rails自动生成一个包含输入的error_explanation div时,一个段落变为两个,我在Firebug中看到了这个:
<p> <label...> </p> <div...> <input...> </div> <p> </p>
Run Code Online (Sandbox Code Playgroud)
另外,如果我只是添加一个简单的
<p> <div> test </div> </p>
Run Code Online (Sandbox Code Playgroud)
发生同样的问题(JSFiddle),它在DOM中呈现为
<p> </p> <div> test </div> <p> </p>
Run Code Online (Sandbox Code Playgroud)
为什么?
更新:我通过电子邮件发送了文章的作者,并做了相应的更改.