对td使用 overflow:hidden; 无效的几点错误认识

发布时间:2016-03-16 浏览次数:3907 文章来源:个人博客


td使用 overflow:hidden; 无效没有效果,具体的原因和办法如下:


一、是 td 的原因。

其实这关 td 什么事呢?div 也是一样的,看示例:

<div style="width:100px;overflow:hidden;">中华人民共和国中华人民共和国</div>

并没有直接截断,而是出现了换行。所以跟 td 无关,而是受内容的影响。

二、td 中多套一层标签(比如 div),table 指定 table-layout:fixed。

<table style="table-layout:fixed;">
<tr>
    <td style="width:100px;overflow:hidden;white-space:nowrap;"><div>中华人民共和国中华人民共和国</div></td>
</tr>
<tr>
    <td>中华人民共和国中华人民共和国</td>
</tr>
</table>

前面说了,这个 overflow 跟内容有关,而跟是不是 td 没关系,所以以上做法也是行不通的。

三、使用 white-space:pre;。

这个是错误的,输出内容会照源码输出,比如源码中“中”和“国”之间换行了,但没有任何标签,那么输出时也会显示在两行,而 HTML 中,默认 <br /> 才会换行,与实际需求不符。

正确的做法

CSS 代码

div{width:100px;overflow:hidden;white-space:nowrap;}
td{width:100px;overflow:hidden;white-space:nowrap;word-break:keep-all;}

HTML 代码

<div>中华人民共和国中华人民共和国</div>
<table>
<tr>
    <td><div>中华人民共和国中华人民共和国</div></td>
</tr>
<tr>
    <td>中华人民共和国中华人民共和国</td>
</tr>
</table>

全部 OK。可以看出 td 比 div 多一个 word-break:keep-all;。这是由于 IE 中,对 td 的解释与 Firefox、Chrome 的不同,若不加的话,IE 中第三行仍然会转到下一行,而不是截断。


key-word
overflow无效 css overflow没作用 td下overflow无效