弗雷德会面。他是一张桌子:
<table border="1" style="width: 100%;">
<tr>
<td>This cells has more content</td>
<td>Less content here</td>
</tr>
</table>
弗雷德的公寓有改变大小的奇怪习惯,所以他学会了隐藏一些他的内容,这样就不会把其他所有的单元都挤过去,把惠特福德夫人的客厅挤到被遗忘的地方:
<table border="1" style="width: 100%; white-space: nowrap; table-layout: fixed;">
<tr>
<td style="overflow: hidden; text-overflow: ellipsis">This cells has more content</td>
<td style="overflow: hidden; text-overflow: ellipsis">Less content here</td>
</tr>
</table>
这种方法很有效,但弗雷德有一种挥之不去的感觉,如果他的右细胞(他昵称为Celldito)让出一点空间,他的左细胞就不会经常被截断。你能挽救他的理智吗?
总之:表的单元格如何才能均匀溢出,并且只有在它们都放弃了所有空白的情况下才能溢出?
就像samplebias答案一样,如果Javascript是一个可接受的答案,我专门为此目的做了一个jQuery插件:https://github.com/marcogrcr/jquery-tableoverflow
要使用插件,只需输入
$('selector').tableoverflow();
完整示例:http://jsfiddle.net/Cw7TD/3/embedded/result/
编辑:
修复了jsfiddle的IE兼容性问题。
修复jsfiddle中更好的浏览器兼容性(Chrome, Firefox, IE8+)。
几天前我也遇到了同样的挑战。看来路西法·萨姆找到了最好的解决办法。
但我注意到你应该在spacer元素复制内容。认为它不是那么糟糕,但我也想应用标题弹出剪切文本。这意味着长文本将在我的代码中出现第三次。
在这里,我建议在伪元素之后访问title属性以生成间隔并保持HTML干净。
适用于IE8+, FF, Chrome, Safari, Opera
<table border="1">
<tr>
<td class="ellipsis_cell">
<div title="This cells has more content">
<span>This cells has more content</span>
</div>
</td>
<td class="nowrap">Less content here</td>
</tr>
</table>
.ellipsis_cell > div {
position: relative;
overflow: hidden;
height: 1em;
}
/* visible content */
.ellipsis_cell > div > span {
display: block;
position: absolute;
max-width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1em;
}
/* spacer content */
.ellipsis_cell > div:after {
content: attr(title);
overflow: hidden;
height: 0;
display: block;
}
http://jsfiddle.net/feesler/HQU5J/
这个问题在谷歌的顶部弹出,所以在我的例子中,我使用了css代码片段
从https://css-tricks.com/snippets/css/truncate-string-with-ellipsis/,但应用到td没有给出预期的结果。
我不得不在td的文本周围添加一个div标签,省略号终于起作用了。
简写HTML代码;
<table style="width:100%">
<tr>
<td><div class='truncate'>Some Long Text Here</div></td>
</tr>
</table>
缩写CSS;
.truncate { width: 300px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }