【问题标题】:CSS table-cell equal widthCSS表格单元格等宽
【发布时间】:2012-05-18 12:55:02
【问题描述】:

我的表格容器中有不定数量的表格单元格元素。

<div style="display:table;">
  <div style="display:table-cell;"></div>
  <div style="display:table-cell;"></div>
</div>

是否有一种纯 CSS 方法可以使表格单元格的宽度相等,即使它们中的内容大小不同?

拥有最大宽度需要知道我认为你有多少个单元格?

【问题讨论】:

  • 列数如何确定:客户端还是服务器端?
  • 在我尝试了一些方法之后,我想如果你想要多行并且希望它们等宽,请使用 flexbox 而不是 table

标签: html css html-table


【解决方案1】:

这是一个单元格数量不确定的工作小提琴:http://jsfiddle.net/r9yrM/1/

您可以为每个父 divtable)固定一个宽度,否则它将像往常一样是 100%。

诀窍是使用 table-layout: fixed; 和每个单元格上的一些宽度来触发它,这里是 2%。这将触发 other 表算法,在该算法中,浏览器会非常努力地尊重所指示的尺寸。
请使用 Chrome(和 IE8- 如果需要)进行测试。最近的 Safari 没问题,但我不记得这个技巧与它们的兼容性。

CSS(相关说明):

div {
  display: table;
  width: 250px;
  table-layout: fixed;
}

div > div {
  display: table-cell;
  width: 2%; /* or 100% according to OP comment. See edit about Safari 6 below */
}

编辑(2013 年):提防 OS X 上的 Safari 6,它有 table-layout: fixed; 错误(或者可能只是不同,与其他浏览器非常不同。我没有校对 CSS2。 1 REC 表布局 ;) )。为不同的结果做好准备。

【讨论】:

  • 谢谢,这似乎是答案。我不知道为什么,但如果我将宽度设置为 2%,它实际上会将每一列都挤成 2%。但是 100% 似乎效果很好。知道那里发生了什么吗?
  • 我遇到了同样的问题,需要在表格单元格上使用 100% 宽度。发生这种情况是因为将 clearfix 应用于具有 display: table 的父元素。由于 100% 宽度的单元格在 IE8 中不起作用,我的修复是删除 clearfix。希望这对某人有所帮助。
  • 为了扩展这一点,这适用于简单的布局(1x1、2x2、3x3 等),但复杂的布局(1x3x1、1x2x3x4 等)需要额外的divs 和display:table 才能使用好像它们是行,而不是某些人可能期望的display:tabl-rowExample here.
  • 100% 宽度在 IE8 上不起作用(惊喜),但最初建议的 2% 提供了正确的结果。
  • 100% 宽度在 IE10 中也不起作用。它确实在 IE11 中工作。而 1% 的宽度使 Mobile Safari 显示超窄列。所以我最终使用了针对 IE9 和 IE10 的 CSS hack:.my-cell { width: 100%; }; @media screen and (min-width:0\0) { .my-cell { width: 1%; } } CSS hack 来自这里:stackoverflow.com/a/24321386/6962
【解决方案2】:

HTML

<div class="table">
  <div class="table_cell">Cell-1</div>
  <div class="table_cell">Cell-2 Cell-2 Cell-2 Cell-2Cell-2 Cell-2</div>
  <div class="table_cell">Cell-3Cell-3 Cell-3Cell-3 Cell-3Cell-3</div>
  <div class="table_cell">Cell-4Cell-4Cell-4 Cell-4Cell-4Cell-4 Cell-4Cell-4Cell-4Cell-4</div>
</div>​

CSS

.table{
  display:table;
  width:100%;
  table-layout:fixed;
}
.table_cell{
  display:table-cell;
  width:100px;
  border:solid black 1px;
}

DEMO.

【讨论】:

  • 小提琴在这里不起作用。单元格始终为 25%。
  • 这个解决方案对于任何动态的东西都不是很可扩展,例如由客户端控制的网站导航。
  • 可能你是对的,顺便说一句,这是将近两年的 anser @QuantumDynamix。有什么更好的想法吗?为什么不只是分享你的想法,让世界知道更好的事情:-)
【解决方案3】:

display: table-cell 元素中使用max-width: 0 对我有用:

.table {
  display: table;
  width: 100%;
}

.table-cell {
  display: table-cell;
  max-width: 0px;
  border: 1px solid gray;
}
<div class="table">
  <div class="table-cell">short</div>
  <div class="table-cell">loooooong</div>
  <div class="table-cell">Veeeeeeery loooooong</div>
</div>

【讨论】:

  • 这里只是吹毛求疵,但0px 不是有效单位。它应该只是0
  • 这对我有用,但你能解释一下这是如何工作的吗?
【解决方案4】:

替换

  <div style="display:table;">
    <div style="display:table-cell;"></div>
    <div style="display:table-cell;"></div>
  </div>

  <table>
    <tr><td>content cell1</td></tr>
    <tr><td>content cell1</td></tr>
  </table>

看看试图让 div 像表格一样执行的所有问题。他们不得不添加 table-xxx 来模仿表格布局

表格在所有浏览器中都受支持并且运行良好。为什么要抛弃他们?他们必须模仿他们的事实证明他们做得很好。

在我看来,使用最好的工具来完成这项工作,如果您想要表格数据或类似于表格数据表的东西就可以了。

我知道回复很晚,但值得表达。

【讨论】:

  • +1 因为它可以工作并且因为 CSS 在 2014 年仍然不能在所有浏览器中正确执行此操作。
  • 有时您希望对非表格数据的内容进行类似表格的布局。例如应该使用&lt;nav&gt;&lt;ul&gt;等的导航元素。
  • 对于响应式,最好有一个基于 div 的布局。在移动设备上显示表格是一件很麻烦的事情。
  • 试图模拟表格会妨碍响应式设计。我同意如果你想要响应式设计,表格不是选择。
  • 表格是为显示表格数据而创建的:过去是,现在是,将来也是用于显示表格数据的 HTML 元素,为什么会有人放弃它们(为此目的)?表格布局不是模仿:它已经成为 CSS2 推荐的一部分,而且 HTML 表格的默认布局恰好是 display: table-etc(很自然)。我不会花时间制作链接来模仿 div 或 div 模仿表格、跨度或输入:我只是使用 CSS 进行样式设置。最后,祝 IE9 好运,将 display 属性的任何其他值应用于 table、tr、td 元素。
【解决方案5】:

这对每个人都有效

<table border="your val" cellspacing="your val" cellpadding="your val" role="grid" style="width=100%; table-layout=fixed">
<!-- set the table td element roll attr to gridcell -->
<tr>
<td roll="gridcell"></td>
</tr>
</table>

这也适用于迭代创建的表数据

【讨论】:

    【解决方案6】:

    这可以通过将表格单元格样式设置为width: auto,并将内容为空来完成。列现在等宽,但不包含任何内容。

    要向单元格插入内容,请使用 css 添加 div

    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    

    您还需要将position: relative 添加到单元格中。

    现在你可以把实际的内容放到上面提到的div中了。

    https://jsfiddle.net/vensdvvb/

    【讨论】:

      【解决方案7】:

      给你:

      http://jsfiddle.net/damsarabi/gwAdA/

      您不能使用宽度:100px,因为显示是表格单元格。但是,您可以使用 Max-width: 100px。那么你的盒子永远不会超过100px。但是您需要添加溢出:隐藏以确保连接不会流血到其他单元格。如果您希望保持高度不增加,您还可以添加空格:nowrap。

      【讨论】:

        猜你喜欢
        • 2017-12-17
        • 2012-10-03
        • 1970-01-01
        • 2021-08-07
        • 2018-09-11
        • 2014-07-13
        • 2015-08-04
        • 2014-11-11
        • 1970-01-01
        相关资源
        最近更新 更多