2

将块级元素(例如p 直接嵌套在诸如b.

但是,使用诸如display: inline-blockor position: absoluteis 这样的 css 在概念上是合理的,可以在内联上下文中包含块级内容。

浏览器在很大程度上接受内联元素中的这种块级元素,但在某些情况下,无效的构造会导致真正的问题:

<p><span><p></p></span></p>

上面的例子不会被解析为三个嵌套元素;无论CSS如何,最内层<p>都会隐式关闭外层。<p>你可以看到一个 jsbin 演示

是否有某种方法可以使用中间元素将块级元素有效地放置在内联元素中?

如果这不可能<p>,对于大多数情况(最好也适用于棘手的标签)是否有无效但功能性的解决方法?

需要明确的是,我正在寻找一种不需要对文档结构进行侵入性更改的通用解决方案(即“只span在所有地方使用,用于所有内容”不是一个有吸引力的解决方案)。我想嵌入具有潜在块级内容的未知(动态生成)文档片段 - 因此修复片段以排除块级元素是不可行的。


相关:(主要解决直接嵌套的有效性)

4

2 回答 2

1

W3C 验证器(在 XHTML 模式下)列出了以下在 a<span>和 a之间有效的元素<p>

  • 目的
  • 插件
  • 德尔
  • 地图
  • 按钮

使用这些作为 inline-to-block 扳手的页面在 XHTML Strict 中验证,但在 HTML 5 中不验证。在这些标记中,我更喜欢object,因为它的语义包袱最少。

HTML 5 似乎放弃了内联与块的区别,转而采用更复杂的系统,其中有几种不同的元素类别,一个元素可以拥有哪些子元素取决于它的祖先是什么。在这些元素中insdelmap现在接受与其父元素接受的相同类型的子元素,并且button只接受“短语内容”(最接近内联元素的东西)。的错误消息object没有多大意义,但据我所知,它继承了父元素的限制,同时也施加了自己的一些限制。

据我所知,一旦你进入其中(缺少 iframe 和新文档),就无法逃避短语内容,所以这个问题的答案是否定的,不能在 HTML5 中完成(如本文)。

于 2013-04-19T19:37:27.247 回答
0

语义上是错误的,我认为 HTML5 只允许 < a > 标签内的块元素(据我所知)。

换句话说,您可以通过更改 css 使您的 html 代码按您的意愿工作,但这并不意味着您的 html 代码是正确的。您还应该考虑将出现的 SEO 和可访问性问题。

于 2013-01-18T12:12:19.010 回答