我想在表格单元格中使用CSS文本溢出,这样,如果文本太长而不能适合一行,它将用省略号剪辑,而不是包装到多行。这可能吗?

我试了一下:

td {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

但是white-space: nowrap似乎使文本(及其单元格)不断向右扩展,将表的总宽度推到容器的宽度之外。但是,如果没有它,当文本到达单元格边缘时,它将继续换行为多行。


当前回答

指定max-width或固定宽度并不适用于所有情况,表应该是流动的,并自动为单元格设置空间。这就是桌子的作用。适用于IE9和其他浏览器。

使用这个:http://jsfiddle.net/maruxa1j/

table { width: 100%; } .first { width: 50%; } .ellipsis { position: relative; } .ellipsis:before { content: '&nbsp;'; visibility: hidden; } .ellipsis span { position: absolute; left: 0; right: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } <table border="1"> <thead> <tr> <th>Header 1</th> <th>Header 2</th> <th>Header 3</th> <th>Header 4</th> </tr> </thead> <tbody> <tr> <td class="ellipsis first"><span>This Text Overflows and is too large for its cell.</span></td> <td class="ellipsis"><span>This Text Overflows and is too large for its cell.</span></td> <td class="ellipsis"><span>This Text Overflows and is too large for its cell.</span></td> <td class="ellipsis"><span>This Text Overflows and is too large for its cell.</span></td> </tr> </tbody> </table>

其他回答

指定max-width或固定宽度并不适用于所有情况,表应该是流动的,并自动为单元格设置空间。这就是桌子的作用。适用于IE9和其他浏览器。

使用这个:http://jsfiddle.net/maruxa1j/

table { width: 100%; } .first { width: 50%; } .ellipsis { position: relative; } .ellipsis:before { content: '&nbsp;'; visibility: hidden; } .ellipsis span { position: absolute; left: 0; right: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } <table border="1"> <thead> <tr> <th>Header 1</th> <th>Header 2</th> <th>Header 3</th> <th>Header 4</th> </tr> </thead> <tbody> <tr> <td class="ellipsis first"><span>This Text Overflows and is too large for its cell.</span></td> <td class="ellipsis"><span>This Text Overflows and is too large for its cell.</span></td> <td class="ellipsis"><span>This Text Overflows and is too large for its cell.</span></td> <td class="ellipsis"><span>This Text Overflows and is too large for its cell.</span></td> </tr> </tbody> </table>

如果你只是想让表格自动布局

不使用max-width,或百分比列宽度,或表布局:固定等。

https://jsfiddle.net/tturadqq/

工作原理:


步骤1:让表自动布局完成它的工作。

当有一个或多个列有很多文本时,它会尽可能地缩小其他列,然后将长列的文本换行:


步骤2:将单元格内容包装在一个div中,然后将该div设置为max-height: 1.1em

(额外的0.1em用于显示在文本底部下方的字符,如'g'和'y'的尾部)


步骤3:在divs上设置标题

这对可访问性有好处,并且对于我们稍后使用的小技巧是必要的。


第四步:在div上添加CSS::after

这是一个棘手的问题。我们使用content: attr(title)设置CSS::after,然后将其放置在div的顶部,并设置text-overflow: ellipsis。我把它涂成红色,让它更清楚。

(注意长列现在有一个尾省略号)


步骤5:设置div文本的颜色为透明

我们做完了!

如果你不想设置固定宽度

下面的解决方案允许您拥有较长的表单元格内容,但不能影响父表的宽度,也不能影响父行的高度。例如,你想要一个宽度为:100%的表格,但仍然对所有其他单元格应用自动调整大小的功能。在有“注释”或“评论”列的数据网格中很有用。

将这3条规则添加到你的CSS中:

.text-overflow-dynamic-container {
    position: relative;
    max-width: 100%;
    padding: 0 !important;
    display: -webkit-flex;
    display: -moz-flex;
    display: flex;
    vertical-align: text-bottom !important;
}
.text-overflow-dynamic-ellipsis {
    position: absolute;
    white-space: nowrap;
    overflow-y: visible;
    overflow-x: hidden;
    text-overflow: ellipsis;
    -ms-text-overflow: ellipsis;
    -o-text-overflow: ellipsis;
    max-width: 100%;
    min-width: 0;
    width:100%;
    top: 0;
    left: 0;
}
.text-overflow-dynamic-container:after,
.text-overflow-dynamic-ellipsis:after {
    content: '-';
    display: inline;
    visibility: hidden;
    width: 0;
}

在任何你想要动态文本溢出的表格单元格中像这样格式化HTML:

<td>
  <span class="text-overflow-dynamic-container">
    <span class="text-overflow-dynamic-ellipsis" title="...your text again for usability...">
      //...your long text here...
    </span>
  </span>
</td>

此外,对表格单元格应用所需的min-width(或根本不应用)。

当然是小提琴:https://jsfiddle.net/9wycg99v/23/

当它以表格宽度百分比为单位时,或者你不能在表格单元格上设置固定宽度。你可以应用table-layout: fixed;让它起作用。

table { table-layout: fixed; width: 100%; } td { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; border: 1px solid red; } <table> <tr> <td>Lorem ipsum and dim sum yeah yeah yeah. Lorem ipsum and dim sum yeah yeah yeah. Lorem ipsum and dim sum yeah yeah yeah. Lorem ipsum and dim sum yeah yeah yeah. Lorem ipsum and dim sum yeah yeah yeah.</td> <td>Lorem ipsum and dim sum yeah yeah yeah. Lorem ipsum and dim sum yeah yeah yeah. Lorem ipsum and dim sum yeah yeah yeah. Lorem ipsum and dim sum yeah yeah yeah. Lorem ipsum and dim sum yeah yeah yeah.</td> </tr> </table>

这对我很管用

table {
    width: 100%;
    table-layout: fixed;
}

td {
   text-overflow: ellipsis;
   white-space: nowrap;
}