做前端页面时,文本内容超长是最常见的排版问题之一。比如一个商品标题有几十个字,把卡片布局撑得乱七八糟;或者一段简介文字太多,把整个页面高度无限拉长。其实CSS早就为我们准备了完善的解决方案,核心就是text-overflow属性。这个属性虽然名字里带text,但单独使用它几乎没有任何效果,必须和overflow、white-space两个属性配合才能真正生效。下面我们从基本用法讲到多行截断、兼容性处理,把文本溢出控制这个知识点彻底讲透。

一、text-overflow属性的基本用法
text-overflow属性用来定义当文本溢出容器时如何展示被裁剪的部分,它有三个常用的取值:clip表示直接裁剪超出内容,是默认值;ellipsis表示用省略号来表示被裁剪的文本;string表示使用指定的字符串来替代被裁剪的内容,不过这个值目前浏览器支持度很低,实际项目中很少用到。
这里有一个非常关键的点需要理解:text-overflow本身不会产生任何裁剪行为,它只是在文本已经溢出的前提下,决定溢出部分以什么形式呈现。真正执行裁剪的是overflow: hidden,而保证文本不换行、一直往一个方向延伸的则是white-space: nowrap。三者缺一不可,少一个都看不到省略号效果。
标准的单行文本截断写法如下:
.ellipsis {
width: 200px; /* 必须限制宽度,可以是固定值也可以由父级约束 */
white-space: nowrap; /* 禁止文本换行 */
overflow: hidden; /* 隐藏超出部分 */
text-overflow: ellipsis; /* 超出部分显示省略号 */
}很多初学者写完后发现没效果,排查原因基本集中在两点:一是没有限制容器宽度,文本想多长就多长,根本不存在溢出;二是少了white-space: nowrap,文本到边界就自动换行了,同样不会溢出。理解了这两个前提,单行截断就不会再出问题。
二、多行文本截断的实现方案
单行截断只能满足部分场景,更多时候我们希望保留两三行文字,超出的部分才显示省略号。这时需要用到-webkit-line-clamp属性,虽然它带着-webkit-前缀,但现代浏览器包括Firefox都已经支持,可以放心在生产环境使用。
多行截断的完整写法需要五个属性组合:
.multi-ellipsis {
display: -webkit-box; /* 使用弹性伸缩盒子模型 */
-webkit-box-orient: vertical; /* 子元素垂直排列 */
-webkit-line-clamp: 2; /* 限制显示的行数 */
overflow: hidden; /* 隐藏超出部分 */
word-break: break-all; /* 英文长单词强制换行,可选 */
}其中-webkit-line-clamp: 2表示最多显示两行,可以按需改成3、4等任意行数。需要注意的是,采用这种写法后容器的display变成了-webkit-box,如果这个元素同时还承担其他布局职责(比如本身是flex子项),可能会产生样式冲突,建议在外层再包一层专门的截断元素。
如果项目需要兼容非常老旧的浏览器,还可以用伪元素方案:给容器设置固定的line-height和max-height,然后在右下角用伪元素绝对定位一个背景色遮挡的省略号。这种方案视觉效果稍差,但兼容性最好,属于早年间的经典技巧,现在了解即可。
三、常见失效场景与排查方法
实际项目中,明明照着写了却不出省略号的情况并不少见,下面几个场景是重灾区。
第一个场景是Flex布局。子元素设置flex: 1后,如果内部文本元素没有显式设置min-width: 0或者overflow: hidden,文本会凭借min-width:auto的默认行为把容器撑开,截断自然失效。解决方法是给flex子项加上min-width: 0,这是一个高频坑点,值得记住。
.list-item {
display: flex;
align-items: center;
}
.list-item .title {
flex: 1;
min-width: 0; /* 关键:覆盖默认的min-width:auto */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}第二个场景是表格单元格。<td>元素需要配合table-layout: fixed才能让宽度约束生效,否则表格会根据内容自动调整列宽,永远不会有溢出发生。同时给单元格设置max-width也是一个稳妥的做法。
第三个场景是英文和数字内容。连续的英文单词或长串数字不会自动断行,即使加了white-space: nowrap之外的换行设置也可能出问题。这时可以补充word-break: break-all或overflow-wrap: break-word来强制断行,让截断行为符合预期。
最后提一个细节:text-overflow: ellipsis显示的省略号样式是由浏览器和字体决定的,无法直接通过CSS修改它的颜色或大小。如果设计稿对省略号有特殊要求,只能用JS计算文本宽度或者用伪元素覆盖的方案来模拟实现。掌握以上这些内容,日常开发中百分之九十九的文本溢出问题都能顺利解决。
text-overflowCSS文本溢出省略号修改时间:2026-09-13 12:50:28