【问题标题】:A cross-browser way to grow all table cells in a row to match the content of the largest one?一种跨浏览器的方式来连续增长所有表格单元格以匹配最大单元格的内容?
【发布时间】:2013-11-24 00:29:25
【问题描述】:

我有一个用于显示时间表的 HTML 表格。我最终想要的布局功能是:

  1. 如果可能,让每个表格单元格大小相同,以使表格看起来规则。 (手动选择以适应最常见的内容。)
  2. 如果内容太长,请将单元格调高以容纳它。还要使同一行中的所有其他表格单元格更高以匹配高度。 (宽度和列分别相同,但这种情况很少发生。)
  3. 内容周围有一个内边框。 (为了简单起见。我实际的东西有其他装饰样式,不应该跨越应用到它的封闭单元格。)

我的问题是:有没有一种跨浏览器的方式——最好不涉及X-UA-Compatible——来获得具有上述属性的布局?


当前代码(Codepen):

HTML

<table>
  <tr>
    <td>
      <div>
        Hello, world!
      </div>
    </td>
    <td>
      <div>
      </div>
    </td>
    <td>
      <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit</div>
    </td>
  </tr>
</table>

CSS

table {
  border-collapse: collapse;

  border: thin solid silver;
}

table td {
  height: 60px;
  width: 60px;
  box-sizing: border-box;

  padding: 1px;

  border: thin solid silver;
}

table td div {
  height: 100%;

  border: thin solid black;
  border-radius: 8px;
}

&lt;td&gt; 上的box-sizing: border-box; 真的比任何东西都更强迫症,我只是希望表格单元格的内部有60px 而不管填充。)


渲染示例

这就是上面在三种不同浏览器中的呈现方式:

  • Chrome(和 Safari)中,一切都按预期呈现。内部 &lt;div&gt; 周围有 1px 的填充,行中的所有其他 &lt;div&gt;s 都会增长以填充可用高度。到目前为止一切顺利。
  • Internet Explorer 11 中,内部的 &lt;div&gt;s 粘在表格单元格上。 IE。没有填充,除了单元格的右侧,甚至没有在行中的最后一个单元格上。 (嗯?)但是,高度确实会正确扩展。
  • Internet Explorer 10 中,填充已正确应用。不幸的是,第三个单元格的长内容溢出了单元格边框,因为高度是直接指定的。不出所料,这就是我实际的 bugrep 中的内容。 (我正在使用 IE 的 F12 开发者工具中的仿真模式来检查这一点,但渲染与我在 bugrep 中获得的屏幕截图相匹配。)

我尝试在 IE10 示例中的 &lt;td&gt; 上使用 min-height 而不是 height。这解决了溢出,但内部&lt;div&gt; 不会扩展:

所以,我要使用 WebKit 的 / Blink 的渲染,我需要它主要在 IE10 上工作,但希望在 IE11 上也能工作。解释 IE11 中发生了什么变化以使我的布局以与 IE10 中的破坏方式完全不同的方式中断的奖励积分。


IE11 问题的其他示例

为了完整起见,我在 Chrome 和 IE11 中包含了我的实际应用的屏幕截图:

如您所见,IE11 渲染中断比上例更明显,以至于表格单元格未垂直对齐。 (如果您查看顶部标记为 9:00 的垂直线。)我猜测这是因为 &lt;div&gt; 中的 height: 100% 表示“取父级的 height元素”,而不是“占用可用的垂直空间”,并将 &lt;div&gt; 中的内部 padding 添加到其中。 (这在标准盒子尺寸模型的背景下是一种变态的感觉,但我猜这艘船已经在这个话题上航行了。)

在内部&lt;div&gt; 上添加box-sizing: border-box; 几乎,但不完全可以解决问题,但结果看起来完全有问题,可能是渲染器错误:

无论如何,IE11 损坏不是我的主要问题,就像 IE10 的内容溢出/单元格没有增长一样。

【问题讨论】:

  • 我现在卡在 XP + IE6 中,所以我无法测试,但 Firefox 25 呈现你的 codepen 就像你的 IE10 屏幕截图一样。我认为这很合理,因为您特别说过 td 应该是 60px 高度。
  • @Passerby FF 现在不关心我,除了我已经知道我所拥有的东西在某种程度上被破坏/不兼容。我确实提到将 height 更改为 min-height doesn't quite get me there - the
    ` 不会增长。

标签: html css internet-explorer-10 html-table internet-explorer-11


【解决方案1】:

如果您不介意不支持 display: inline-block 应用于 div。

Example here.

【讨论】:

  • 这实际上并没有做任何事情,而且你链接到我的笔 - 这并不是你提议的一个例子。 (这可能是一个错误 - 最好自己进行更改以进行更改,因为我可以覆盖您对我的编辑。)这样做会在 IE10 模式下给我this rendering。 (Forked pen 仅添加了display: inline-block;。)
猜你喜欢
  • 1970-01-01
  • 2016-04-29
  • 2013-07-25
  • 1970-01-01
  • 2021-02-20
  • 2011-10-26
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
相关资源
最近更新 更多