【问题标题】:table-layout: fixed issue with column widths表格布局:修复了列宽问题
【发布时间】:2017-05-16 16:22:17
【问题描述】:

我们正在为我们的移动应用程序使用 CSS table-layout: fixed 属性。 (我不记得全部原因,但我相信这与启用某种自动换行有关)...

我遇到了一个问题,我们需要调整两列表的两列之一的大小。没什么大不了的,通常我们这样做:

<table>
  <tbody>        
    <tr>
      <th width="20%">hello world</th>
      <td>hello world</td>
    </tr>
  </tbody>
</table>

效果很好。

但是,如果我们需要在此之前创建一个跨越两列的行:

<table>
  <tbody>   
    <tr>
      <td colspan="2">hello world</th>
    </tr>     
    <tr>
      <th width="20%">hello world</th>
      <td>hello world</td>
    </tr>
  </tbody>
</table>

至少在 Chrome 中发生的情况是两列对齐到 50% 的宽度。我这里有一个 jsbin 示例:

http://jsbin.com/ejovut/3

这是正常行为吗?一个 Chrome 错误?解决此问题的方法?

【问题讨论】:

    标签: google-chrome html-table tablelayout


    【解决方案1】:

    这不是错误。 table-layout:fixed 意味着允许浏览器通过假设只有第一行和第一列的规范来优化表格布局计算。特别是,它不需要需要检查和对以后的表格内容进行布局计算,这会对布局性能产生很大影响。

    正确的解决方案是使用&lt;col&gt;&lt;colgroup&gt; 元素明确指定列宽,而不是使用第一行。

    【讨论】:

    • 抱歉显得很密集,但是的解决方案是使用table-layout:fixed吗?或者使用 col 和 colgroup 除了 table-layout:fixed 如果这个固定的“自动换行”? (TBH 我完全不知道为什么在这个例子中会使用 table-layout 并且简单地删除它就可以解决问题?
    • table-layout: fixed 可能是打破长词所必需的(请参阅jsbin.com/utifiy/2/edit)。一般来说,如果您需要精确的布局控制,fixed 值会为您提供,而默认值会更神奇:但您需要用 something 替换那个神奇的大小 - 这就是为什么您需要明确调整 第一行col 元素规格的大小。 OP 的问题是,如果第一行包含跨列的单元格,则您无法声明单元格上列的大小,因此解决方案是使用基于col 的大小调整。
    【解决方案2】:

    第一行应该包含所有 此外,Chrome 的错误不允许用于此。

    【讨论】:

    • 那么,这是一个已知的 Chrome 错误,解决方法是确保有一个空白的第一行包含每个单独的 TD?
    • 是的,指定“宽度”,它不仅适用于Chrome,也适用于FF和IE,虽然IE和FF允许使用标签指定每个单元格的“宽度”跨度>
    • “Chrome 错误不允许用于此” - 究竟是哪些错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多