html - 浏览器如何将某些标签处理为 "allow overlap",将其他标签处理为 "do not allow"

标签 html

<br><b>ABCDEF<u>GHJIKLOM</b>PQRST</u>UVWXYZ
<br><b>ABCDEF<ins>GHJIKLOM</b>PQRST</ins>UVWXYZ

看看第一个示例中下划线如何向下延伸至 T,而在第二个示例中下划线突然以 M 结束。但代码基本上是相同的,除了 u 应该改变特定的外观,而 ins 只是提示文本已插入并且应该标记为“某种方式”,好吧被标记为下划线。经验告诉我,这肯定没问题,但我只是想知道为什么有些标签允许与其他标签重叠,而与其他标签配对则不允许重叠?浏览器中是否有一个配对表?或者某些标签被标记为“重叠友好”?这是为什么?

最佳答案

这两个片段都无效。浏览器必须根据您的输入重建有效的 DOM 树;在这两种情况下,最终结果是:

<b>
    ABCDEF
    <u>
        GHJIKLOM
    </u>
</b>
<u>
    PQRST
</u>
UVWXYZ

<b>
    ABCDEF
    <ins>
        GHJIKLOM
    </ins>
</b>
PQRSTUVWXYZ

控制从无效 HTML 输入中恢复的算法在 section 12.2.3.3 ("Parse state") of the HTML5 standard 中指定。 .

造成结果差异的具体原因是 <ins>标签被 HTML5 分类为格式化元素,而 <b><i>是。 (格式化元素的完整列表给出 in section 12.2.3.2 ,并且非常小。)这会导致 <ins>当它被另一个结束标签“中断”时,不会重新打开。

关于html - 浏览器如何将某些标签处理为 "allow overlap",将其他标签处理为 "do not allow",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25923242/

相关文章:

html - 如何让图像向左浮动,文本框向右浮动,并根据屏幕尺寸缩放到相同的高度?

html - 如何让这些 div 在滚动 div 中扩展到全宽?

php - 如何将选择表值存储为 php 以在 sql 查询中使用

javascript - 需要从 get ByID 更改为 ClassName (Javascript)

jquery - CSS 按钮在双击时选择整个部分

html - 如何在主要内容之后有左右侧边栏?

html - 将 DIV 的内容包裹在一个 DIV 周围

php - 验证后将 PHP 变量数据传递到另一个页面

CSS 多 DIV 布局不垂直扩展

html - 编码 <ul> <li> 菜单以适应主 <div>