用不同的规则为不同的列控制 html 表格的列宽

Posted

技术标签:

【中文标题】用不同的规则为不同的列控制 html 表格的列宽【英文标题】:Controlling html table column widths with different rules for different columns 【发布时间】:2016-11-04 10:54:06 【问题描述】:

我有一个有 5 列的表格。

第一列应该是其最宽内容的宽度。

第三、四、五列的宽度应该是固定的像素数。

第二列应该填满剩余的宽度。内容经常会溢出,但我不希望这影响列的宽度(我会在该列上用省略号隐藏溢出。)

到目前为止我所拥有的是:

table 
    table-layout: fixed;

th:nth-child(3), th:nth-child(4), th:nth-child(5) 
    width: 30px;

th:nth-child(2) 
    width: auto;
    overflow: hidden;

th:nth-child(1) 
    /* width: ????? */

这样做是成功地使前两列具有相同的宽度。即分割剩余空间。

如何为第一列指定“占用显示所有内容所需的确切空间量”?如果我没有指定“table-layout:fixed”,它会这样做,但是我无法控制其他列。

【问题讨论】:

作为一种解决方法,在您的第三列中创建了一个表格来保存其余三列。检查codepen 链接。有帮助吗? 感谢您的建议。不过,我正在使用数据表进行排序,因此我需要将 html 作为一个普通表。 【参考方案1】:

我很想找到一种纯 css 的方式来做到这一点,但我最终使用了 javascript

<!-- wrap the text to measure in a span and measure the width of the span -->
<table id="my-table">
    <tr><th>First</th> etc... </tr>
    <tr><td><span class="name-text">Adam</span></td>etc...</tr>
    etc...
</table>

var names = $("#my-table").find(".name-text");
var width = 0;
names.each(function(i, name) 
    var w = parseInt($(name).width());
    width = Math.max(width, w);
);

var th = $("#my-table").find("th:nth-child(1)");
th.css( width: (width + 10) + "px" );

【讨论】:

以上是关于用不同的规则为不同的列控制 html 表格的列宽的主要内容,如果未能解决你的问题,请参考以下文章

同步两个不同框架中表格之间的列宽等

html table 列宽

自动调整 HTML 表格中的列宽

如果表格只有一行,则 HTML 表格中的列宽会发生变化

HTML 表格样式

表格标题和表格单元格显示不同的宽度