正如@andi 所写,浏览器以一种有点奇怪的方式进行表格布局。这可以仅使用 HTML 中的单个单元格表来演示:
<div style="width: 270px; background: yellow">
<table>
<tr><td style="font-size: 25px; border: solid 1px">Way too much white space
</table>
</div>
浏览器首先尝试将所有文本设置在同一行,分配可用宽度(这里是270px),然后发现需要换行,然后忘记根据最长行的长度调低单元格宽度的内容。
在内容中放置一个<br>
标签(在断行的点)会“解决”这个问题,但是这样使用固定的换行符会是糟糕的设计,非常不灵活。
似乎可以通过在单元格内使用内部span
元素并将单元格的style.width
属性设置为等于元素的offsetWidth
属性,并附加单元来解决此问题:span
px
<div style="width: 270px; background: yellow">
<table>
<tr><td id=cell style="font-size: 25px; border: solid 1px"><span id=t>Way too much white
space</span>
</table>
</div>
<script>
document.getElementById('cell').style.width =
document.getElementById('t').offsetWidth + 'px';
</script>
jsfiddle
对于一般的解决方案,我想您可以编写一个脚本来遍历可能需要修复的td
元素(或用 显示的元素),而不是像上面这样的特定编码,动态插入一个元素,然后进行修复。像这样,为了明确起见,假设您的表格单元格都是元素并且具有可以安全地包含在元素中的内容:display: table-cell
span
td
span
<script>
var cells = document.getElementsByTagName('td');
for(var i = 0; i < cells.length; i++) {
var cell = cells[i];
var span = document.createElement('span');
span.innerHTML = cell.innerHTML;
cell.innerHTML = span.outerHTML;
}
for(var i = 0; i < cells.length; i++) {
var cell = cells[i];
cell.style.width = cell.childNodes[0].offsetWidth + 'px';
}
</script>