Html 将块级元素嵌套在<;p>;标签。。。对还是错?

Html 将块级元素嵌套在<;p>;标签。。。对还是错?,html,css,Html,Css,将或任何其他块级元素嵌套在标记内在语法和语义上是否正确。我说的是HTML4过渡DTD 如果没有,那么可以使用来代替吗?没有任何上下文,我觉得这很好,只要你的外部标签仍然是一个段落。如果您的div与顶部导航栏相似,那么就不太一样了,但是如果它是一个图像和标题的容器,您将向右浮动,那么就没有问题。这在语法上是不正确的,您可以通过使用 从语义和实践上来说,我会说这是“ok”,因为a)这是非常自然的,b)所有浏览器都能正确处理它(事实上,这是他们每天必须面对的最容易的问题之一) 如果您的HTML是由用户

或任何其他块级元素嵌套在
标记内在语法和语义上是否正确。我说的是HTML4过渡DTD


如果没有,那么可以使用
来代替吗?

没有任何上下文,我觉得这很好,只要你的外部标签仍然是一个段落。如果您的div与顶部导航栏相似,那么就不太一样了,但是如果它是一个图像和标题的容器,您将向右浮动,那么就没有问题。

这在语法上是不正确的,您可以通过使用

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

如果您的HTML是由用户输入生成的(例如,一个HTML编辑器小部件,访问者可以使用它留下评论),那么我会说,即使它是“不正确的”,也让它成为现实

否则,您可以稍微更改标记。就我个人而言,我会同意

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

一些内容

并用CSS给
.para
适当的边距。

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


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

从语法上讲,
p
中的
div
在所有HTML标准中都是无效的。此外,当使用一致性HTML解析器时,不可能在DOM中的
内放置
元素,因为打开的
标记将自动关闭
元素

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


然而,鉴于
都是语义自由的,而且CSS无法改变这一点,如果您确信
标记的内容确实构成了一个段落,并且
为您提供了所寻求的呈现效果,那么这就是有效的HTML,是一个完全合适的解决方案

这篇文章展示了这方面的一些内容。看起来这是标准的浏览器行为


FWIW:我有一个段落被段落标签括起来了。在里面,我在div上放了一个带display:inline的div。但它仍然将div作为块元素处理,并关闭了段落,创建了一个带有段落间距的新行


似乎段落标记中的任何块元素都会强制段落关闭,即使块元素在其CSS中显示为内联

这是一个包含星级的div(例如5分之3)。
.para
,虽然在技术层面上更有效的CSS,但就语义而言是非常糟糕的:/@Matchu:这就是为什么我说不正确的方法在实际应用中可能更好。而且,考虑到<>代码>代码>比OP所提到的<代码> >代码>好得多。如果你不关心IE7和IE6,那么显示:内嵌块 CSS值对你来说是完美的。相关:它是一个图形评级(例如5个3颗星),我试图在段落内连同文本一起注入。结果页面每个结果只包含1个标题和1个段落,因此我想在段落中插入图形,而不是添加额外的div。那么标记中的块级元素呢?您能参考一些说明这一点的文档吗?这仅仅是
p
标记遇到
div
时的某个规则,还是
div
除了
div
之外的每个标记都有一个
div
的规则?@jmlopez-广义地说,这是关于
p
元素中的块级元素的规则。但更准确地说,这只是解析算法中的一组特定规则。请参阅并向下搜索“如果打开元素的堆栈在按钮作用域中有一个p元素,那么就好像看到了一个标记名为“p”的结束标记一样。”(有几个单独的规则可以这样说)。换句话说,
很糟糕,只是对文档引入了不必要的限制。+1用于引用W3C。您可以尝试从W3C复制并粘贴这些内容,以查看答案是否获得更多投票。@GarciaWebDev:复制格式化内容并使其看起来相当不错有点困难。我认为W3C是为数不多的可以链接到的资源之一,而不存在它消失或更改过多的大风险。毕竟,如果W3C退出,这个答案毫无意义……:)