在<div>
标记内嵌套<p>
或任何其他块级元素在语法和语义上是否正确。我在谈论HTML4 Transitional DTD。
如果没有,那么可以改为使用<span style="display: block">
吗?
答案 0 :(得分:87)
从语法上讲,div
中的p
在所有HTML标准中都无效。此外,在使用符合标准的HTML解析器时,无法在<div>
内的<p>
内放置<div>
元素,因为开始<p>
标记会自动关闭<div>
元素。
从语义上讲,正确的选择取决于您要标记的内容。您需要至少显示一个完整的段落样本以及可能的周围内容,以确保为正确的语义标记提供足够的信息。
但是,鉴于<span>
和<p>
都是免费的语义,并且CSS绝不能改变它,如果你确定<span style="display: block">
标签的内容真的形成一个段落,并{{1}}为您提供您正在寻找的表现效果,然后这是有效的HTML并且将是一个完全合适的解决方案。
答案 1 :(得分:23)
不,段落元素可能不包含其他块元素。
段落标记用于文本块。如果你的元素是文本的一部分(而不是块元素),那么它在语义上是正确的,否则就不是。带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)