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

时间:2010-11-27 11:45:13

标签: html css

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

如果没有,那么可以改为使用<span style="display: block">吗?

6 个答案:

答案 0 :(得分:87)

从语法上讲,div中的p在所有HTML标准中都无效。此外,在使用符合标准的HTML解析器时,无法在<div>内的<p>内放置<div>元素,因为开始<p>标记会自动关闭<div>元素。

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

但是,鉴于<span><p>都是免费的语义,并且CSS绝不能改变它,如果你确定<span style="display: block">标签的内容真的形成一个段落,并{{1}}为您提供您正在寻找的表现效果,然后这是有效的HTML并且将是一个完全合适的解决方案。

答案 1 :(得分:23)

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

Reference

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

答案 2 :(得分:6)

语法不正确,您可以使用W3C markup validator自行查看。

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

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

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

一起去
<div class="para">
    <div>Some content</div>
</div>

并使用CSS为.para提供适当的边距。

答案 3 :(得分:1)

FWIW:我有一段用段落标签括起来的段落。在里面我放了一个带显示的div:内联在div上。但它仍然将div视为块元素并关闭段落,创建一个带段落间距的新行。

看来段落标记内的任何块元素都会强制段落关闭,即使块元素在CSS中显示为内联也是如此。

答案 4 :(得分:0)

没有任何上下文,对我来说似乎很好,只要你的外部标签真的仍然是一个段落。如果你的div类似于你的顶级导航栏,那就不是那么多了,但是如果它是一个图像和标题的容器,你将向右浮动,那么就没有问题了。

答案 5 :(得分:0)

这篇文章展示了这一点。看起来它是标准的浏览器行为。

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