我正在尝试在中间单元格中实现响应式表格宽度text-overflow: ellipsis;
,如下所示:
| Button 1 | A one-lined text that is too long and has to be... | Button 2 |
整个表格应该width: 100%;
与设备一样大。我无法在Button 1
和Button 2
上设置固定宽度,因为应用程序是多语言的(尽管应该可以max-width
)。
我可以尝试任何我想要的东西,...
仅在我设置固定宽度时出现。如何在不借助JavaScript的情况下告诉中间单元“使用可用空间”?
答案 0 :(得分:76)
这不是一个干净的解决方案,但它不使用JS,并且可以在我测试过的每个浏览器中使用。
我的解决方案是将单元格的内容包装在包含table-layout: fixed
和width: 100%
的表格中。
请参阅demo。
以下是完整的解决方案:
<table class="main-table">
<tr>
<td class="nowrap">Button 1</td>
<td>
<table class="fixed-table">
<tr>
<td>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Delectus doloremque magni illo reprehenderit consequuntur quia dicta labore veniam distinctio quod iure vitae porro nesciunt. Minus ipsam facilis! Velit sapiente numquam.</td>
</tr>
</table>
</td>
<td class="nowrap">Button 2</td>
</tr>
</table>
.main-table {
width: 100%;
}
.fixed-table {
/* magic */
width: 100%;
table-layout: fixed;
/*not really necessary, removes extra white space */
border-collapse: collapse;
border-spacing: 0;
border: 0;
}
.fixed-table td {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.nowrap {
/* used to keep buttons' text in a single line,
* remove this class to allow natural line-breaking.
*/
white-space: nowrap;
}
侧面按钮的意图并不是很清楚,因此我使用white-space: nowrap
将它们保持在同一行。根据用例的不同,您可能更愿意应用min-width
并让它们自然换行。
答案 1 :(得分:18)
在表格上设置100%宽度并指定fixed
表格布局:
table {
width: 100%;
table-layout: fixed;
}
然后,为具有省略号的表格单元格设置以下内容:
td:nth-child(2) {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
瞧!带有省略号溢出的响应表!
答案 2 :(得分:8)
HTML
<tr>
<td>
<span class="ellipsis"> A very looooooooooooooooooooooooooooooong string</span>
</td>
</tr>
CSS
td {
position: relative;
}
.ellipsis {
/*Here is the trick:*/
position: absolute;
width: 100%;
/*End of the trick*/
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
答案 3 :(得分:4)
更简洁的方法是在td上设置最大宽度。
基于@FabrícioMatté的回复,
<table class="main-table">
<tr>
<td class="nowrap">Button 1</td>
<td class="truncate">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Delectus doloremque magni illo reprehenderit consequuntur quia dicta labore veniam distinctio quod iure vitae porro nesciunt. Minus ipsam facilis! Velit sapiente numquam.</td>
<td class="nowrap">Button 2</td>
</tr>
和
body { margin: 0; }
.main-table {
width: 100%;
}
.truncate {
text-overflow: ellipsis;
white-space : nowrap;
overflow : hidden;
max-width : 100px; /* Can be any size, just small enough */
}
.nowrap {
white-space: nowrap;
}
我不知道为什么会这样,但确实如此,所以如果有人可以知道为什么应用最大宽度的工作,那么请让我知道,因为我偶然做到了。
答案 4 :(得分:2)
在敲了几个小时之后,没有任何解决方案可行,最终找到了它。
溢出基底所需的元素需要最小/最大宽度,其中最大值小于最小宽度。然后你可以溢出它或它的孩子,你可以用你选择的任何方式设置:%,px,auto。
我在不止一个棘手的情况下尝试了它,它适用于所有。
我会试着用我的例子发布一个文件,但这应该可以帮助你。
/* Apply on base element for proper overflow */
max-width: 1px;
min-width: 10000px;
/* Apply on self or child, according to need */
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
答案 5 :(得分:0)
[更新] 我道歉,似乎没有“就像那样”:http://jsfiddle.net/kQKfc/1/
但是会留在这里,因为在某些情况下它会对我们有所帮助 [/更新]
我们在项目中有这个css,试一试:
.nowr
{
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
答案 6 :(得分:0)
<div class="container">
<div>
Button 1
</div>
<div class="fill">
<div class="lockText">
A one-lined text that is too long and has to be...
</div>
</div>
<div>
Button 2
</div>
</div>
诀窍是设置一个表格布局,其中一个单元格首先占用剩余空间(css表,请注意!)。
.container {
display: table;
width: 100%;
}
.container > div {
display: table-cell;
white-space: nowrap;
position : relative;
width : auto;
/*make it easier to see what's going on*/
padding : 2px;
border : 1px solid gray;
}
.container > .fill {
width : 100%;
}
然后添加限制自己的文本。
.lockText {
position : absolute;
left : 0;
right : 0;
overflow: hidden;
text-overflow: ellipsis;
}