在<p>标记内嵌套块级元素…对还是错?

<p>标签中嵌套<div>或任何其他块级元素在语法和语义上是否正确。 我正在谈论HTML4 Transitional DTD。

如果不是的话,可以改用<span style="display: block">来代替吗?

在语法上, pdiv在HTML的所有标准中都是无效的。 而且,当使用符合的HTML解析器时,不可能在DOM中放置一个<div>元素,因为开放的<div>标签会自动关闭<p>元素。

在语义上,正确的选择取决于你正在标记的内容。 您至少需要显示一个完整的段落样本,并且可能需要显示其周围的内容,以确保提供足够的信息,以便确定正确的语义标记。

但是,既然<div><span>都是免费的语义,并且CSS决不能改变它,如果你确定<p>标签的内容真正构成了一个段落,那<span style="display: block">会得到你正在寻找的表现效果,那么这是有效的HTML,并且将是一个完全合适的解决方案。

不,段落元素可能不包含其他块元素。

参考

段落标记用于文本块。 如果你的元素是文本的一部分(而不是块元素),它将在语义上是正确的,否则不是。 带有display:block span标签仍然是一个块元素。

它在语法上是不正确的,正如你可以看到自己使用W3C标记验证器 。

在语义和实际上,我会说这是“好的”,因为a)它是非常自然的,b)所有的浏览器正确地处理它(事实上,这是他们每天必须面对的最简单的问题之一)。

如果您的HTML是由用户输入(例如,一个HTML编辑器小部件使用哪些访问者可以留下评论)产生的,那么我只是说,即使它是“不正确的”。

否则,您可以稍微更改标记。 我个人会去

 <div class="para"> <div>Some content</div> </div> 

并给予.para适当的利润与CSS。

没有任何语境,只要你的外层标签还是一个段落,对我来说就好了。 如果您的div与您的顶级导航栏相似,那就不是那么多了,但是如果它是一个图像和标题的容器,那么您将要漂浮到右侧,那么没有任何问题。

这篇文章展示了一些关于这个。 看起来这是标准的浏览器行为。

http://blog.programmingsolution.net/html/html-div-tag-inside-html-p-paragraph-tag-does-not-work-correctly/

FWIW:我有一段由段落标记括起来。 里面,我把一个div与显示:内联的div。 但它仍然将div作为块元素处理,并关闭段落,创建一个带有段落间距的新行。

看起来,段落标记中的任何块元素都会强制段落关闭,即使块元素在CSS中以内联方式显示。