代码之家  ›  专栏  ›  技术社区  ›  d.k

折叠边界模型在web浏览器中的实现是否有效?

  •  18
  • d.k  · 技术社区  · 8 年前

    我一直在努力理解 this excerpt 从CSS 2.2规范中删除了一段时间,但没有成功(粗体选择是我的):

    UA必须计算 最初的 表格的左右边框宽度 检查表格第一行中的第一个和最后一个单元格。表的左边框宽度为第一个单元格折叠左边框的一半 表的右边框宽度是最后一个单元格右折叠宽度的一半 边境如果后续行具有较大的折叠左和右边界, 然后任何多余的溢出到表的边缘区域。

    表格的顶部边框宽度是通过检查所有符合以下条件的单元格来计算的 用表格的顶部边框折叠它们的顶部边框。顶部边框 表的宽度等于最大折叠顶部边框的一半。

    这就是如何在Chrome中实现边框、折叠等(FF和IE>7相同):

    table {
      border: 6px solid green;
      border-spacing: 0;
      border-collapse: collapse;
    }
    #cell_1_1 {
      border: 28px solid red;
    }
    #cell_2_1 {
      border: 12px solid chartreuse;
    }
    #cell_2_2 {
      border: 2px solid cyan;
    }
    

    the implementation of the collapsing borders model in web-browsers

    当我期待这样的事情时:

    the expected result

    我希望表格的左边框是14像素厚。因为第一个单元格的折叠左边框 #cell_1_1 28px宽( 表格的左边框宽度为第一个单元格折叠左边框的一半 )在左边,边界在单元格和表格之间分割。因此,从视觉上看,表格在第一个单元格附近有28像素的边框,但14像素属于第一个单元格的边框。然后,表格左侧的边框保持不变。如果某些单元格的边框较宽,则它们会向左突出,而不会影响表的左边框。

    顶部边框也是如此。

    我还认为这个问题可能与 最初的 摘录中的单词,也就是说,这些规则只适用于表没有指定边框的情况,但结果证明它是不相关的(删除表的边框样式规则只是完全删除了绿色边框)。

    那么有人能回答下一个问题吗

    • Chrome、FF、IE中这种折叠边界模型的实现是否正确?

    • 如果它们是正确的,我对规范的理解有什么问题?


    现在,如果我们反之亦然,并假设Chrome中的实现作为导出规范的起点,那么这部分 应该是 类似于下一个(为了简洁起见,我只保留了与左边框相关的部分):

    UA必须计算表格的初始左右边框宽度 然后用于相对于其容纳块定位桌子 通过 检查表格第一行中的第一个和最后一个单元格。表格的左边框宽度为第一个单元格折叠左边框的一半 所有边界冲突(如有)解决后

    ...

    如果后续行具有较大的折叠左和右边界, 然后任何多余的溢出到表的边缘区域。

    ...

    当 确定表是否溢出某个祖先(请参见“溢出”) ,但不影响表相对于其包含块的位置

    那么摘录就有意义了。

    这里有一个表格,其边框比第一个单元格的边框宽,位于粉红色背景的包含块内(如我们所见,表格的边框选择在第一个单元格边框上方,因为它更宽,然后该边框用于将表格定位在容器内。后续单元格的较宽边框突出超出表格的边框):

    the current implementation in chrome with table's border wider than the first cell's one

    这里有一个相同的表格,第一个单元格的边界比表格的边界宽,在边界冲突解决过程中被选中。这里,这个边界用于相对于容器定位桌子:

    the current implementation in chrome with table's border narrower than the first cell's one

    1 回复  |  直到 8 年前
        1
  •  5
  •   denmch    8 年前

    答案是“不”。我喜欢CSSWG坦率的讨论,以及关于 current draft of the CSS Tables 3 editors' draft 告诉你关于这个问题你需要知道的一切。

    自浏览器以来 处理方式如此不同,没有 重新实施。

    有些组合不是适定问题,所以不是 渲染算法可能是最优的。

    因为它们从简单的(HTML)发展到非常简单的 复杂(HTML+CSS), web浏览器使用的当前表格呈现模型是疯狂的 (从某种意义上说 错误、不可互操作并且根本不是CSSish)。许多常见的CSS 假设被打破,渲染出现了很大的分歧。

    (添加了强调。)

    当前草案中有更多的信息,但CSS工作组承认(1)浏览器实现不一致,(2)即使是他们自己的当前提案也不够。