【发布时间】:2020-06-21 03:04:31
【问题描述】:
我想创建一个有 4 列的表。表中的 2 列是标签,应该自动调整到最宽的元素。其他列之一是固定宽度,最后一列应填充剩余空间。我第一次尝试创建此表如下所示:
HTML
<table style="width:100%">
<tr>
<td class="lbl">lbl:</td> <td class="fluidContent">Expandable Content 1</td>
<td class="lbl">longer label:</td> <td class="fixedContent">Me Fixed</td>
</tr>
<tr>
<td class="lbl">longer label:</td> <td class="fluidContent">Expandable Content 2</td>
<td class="lbl">lbl:</td> <td class="fixedContent">Me Fixed</td>
</tr>
</table>
CSS
table {
white-space: nowrap;
}
td {
border: 1px solid orange;
}
.lbl {
text-align: right;
font-style: italic;
width: auto;
}
.fluidContent {
width: calc(100% - 120px);
}
.fixedContent {
width: 120px;
}
https://jsfiddle.net/vf5p0m82/
不幸的是,这种标记会产生具有流动宽度的标签列。 “lbl”类单元格被视为宽度为 27%,而“fluidContent”单元格的宽度为 46%。我想要的是“lbl”单元格尽可能小,同时仍然适合它们包含的最大字符串。
有没有什么方法可以简单地使用表格来实现这一点,或者是时候使用新的 CSS3 flex-boxes 了吗?
编辑:解决方案
为了清楚起见,我在这个问题中添加了另一个示例,但我偶然发现了一个让它起作用的技巧。如果您只是为自动调整大小的列提供 1px 的宽度,那么一切正常。看这里: https://jsfiddle.net/vf5p0m82/2/
是否有既定/规范的方式来做到这一点,或者是这样吗?
【问题讨论】:
-
abels and should auto-size to the widest element是什么意思?您希望标签是其内容的宽度、最大列的宽度还是其他? -
如果您对browser support for flexbox 感到满意,请用双臂搂住它,永远不要松开(我是最近的皈依者)
-
@dlsso - 我的意思是“标签”列的宽度应该是自动的。它们只包含文本并且没有换行,因此列中具有最长字符串的单元格设置了整个列的宽度。
标签: html css html-table fluid-layout