在网页开发过程中,文本内容的长度往往不可控,如果容器宽度固定,过长的内容很容易超出容器范围,破坏页面整体布局。掌握CSS防止文本溢出容器的方法,是每个前端开发者必备的技能。

常见文本溢出场景与基础属性
文本溢出主要分为单行文本溢出和多行文本溢出两种场景,不同的场景需要搭配不同的CSS属性组合来实现防止溢出的效果。下面先介绍几个核心的CSS属性。
white-space属性
该属性用来设置如何处理元素内的空白字符和换行规则,常用取值如下:
- normal:默认值,空白会被浏览器忽略,文本会在容器边界自动换行
- nowrap:文本不会换行,会在同一行继续显示,直到遇到<br>标签为止
- pre:保留空白符序列,文本只在遇到换行符或者<br>标签时才换行
- pre-wrap:保留空白符序列,但是正常地进行换行
- pre-line:合并空白符序列,但是保留换行符
word-break属性
该属性用来指定怎样在单词内换行,解决长单词或者URL地址溢出容器的问题,常用取值如下:
- normal:默认值,使用浏览器默认的换行规则
- break-all:允许在单词内换行,对于非中文、日文、韩文的文本,会在任意字符处换行
- keep-all:只能在半角空格或连字符处换行,不允许单词内换行,适合中文、日文、韩文文本
overflow-wrap属性
该属性原来叫做word-wrap,用来设置浏览器是否可以在单词内换行,常用取值如下:
- normal:默认值,只在允许的断字点换行
- break-word:如果行内没有多余的空间容纳整个单词,那么该单词会被强制换行
text-overflow属性
该属性用来设置当文本溢出包含元素时如何处理,需要和overflow属性配合使用,常用取值如下:
- clip:默认值,直接裁剪溢出的文本,不显示省略标记
- ellipsis:用省略号来代表被裁剪的文本
单行文本防止溢出方法
单行文本防止溢出通常有两种需求,一种是让文本自动换行,另一种是让溢出的文本显示省略号。下面分别给出实现方案。
单行文本自动换行
只需要设置white-space为normal,同时保证容器有明确的宽度即可,示例代码如下:
/* 容器样式 */
.single-line-wrap {
width: 200px;
border: 1px solid #ccc;
white-space: normal;
}
对应的HTML结构:
<div class="single-line-wrap">
这是一段很长的单行文本内容,当内容超过容器宽度时会自动换行显示
</div>
单行文本溢出显示省略号
需要同时设置white-space为nowrap、overflow为hidden、text-overflow为ellipsis,示例代码如下:
/* 单行省略样式 */
.single-line-ellipsis {
width: 200px;
border: 1px solid #ccc;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
对应的HTML结构:
<div class="single-line-ellipsis">
这是一段很长的单行文本内容,超过容器宽度会显示省略号
</div>
多行文本防止溢出方法
多行文本防止溢出的场景更多,需要根据实际需求选择不同的方案,下面介绍几种常用的实现方式。
多行文本自动换行
默认情况下,只要容器设置了宽度,文本就会自动换行,但是如果遇到长单词或者URL,可能需要搭配word-break或者overflow-wrap属性,示例代码如下:
/* 多行自动换行样式 */
.multi-line-wrap {
width: 200px;
border: 1px solid #ccc;
/* 处理长单词溢出问题 */
word-break: break-all;
/* 或者可以使用 overflow-wrap: break-word; */
}
对应的HTML结构:
<div class="multi-line-wrap">
这是一段很长的多行文本内容,还有很长很长的英文单词abcdefghijklmnopqrstuvwxyz,会自动换行显示
</div>
多行文本溢出显示省略号
多行省略的实现方式有多种,兼容性较好的方式是使用-webkit-line-clamp属性,不过该属性是WebKit内核的私有属性,示例代码如下:
/* 多行省略样式,兼容WebKit内核浏览器 */
.multi-line-ellipsis {
width: 200px;
border: 1px solid #ccc;
display: -webkit-box;
-webkit-box-orient: vertical;
/* 显示的行数 */
-webkit-line-clamp: 3;
overflow: hidden;
}
如果需要兼容更多浏览器,可以通过设置固定高度和行高,结合overflow:hidden来实现,示例代码如下:
/* 通用多行省略方案 */
.multi-line-ellipsis-common {
width: 200px;
border: 1px solid #ccc;
line-height: 24px;
/* 行高乘以显示行数,这里显示3行,所以高度是72px */
height: 72px;
overflow: hidden;
}
对应的HTML结构:
<div class="multi-line-ellipsis">
这是一段很长的多行文本内容,当内容超过三行之后,超出的部分会被隐藏,不会溢出容器
</div>
不同场景的属性搭配建议
为了更清晰地选择合适的属性组合,下面整理了不同场景的推荐方案:
| 场景 | 推荐属性组合 |
|---|---|
| 单行文本自动换行 | white-space: normal + 固定容器宽度 |
| 单行文本溢出省略 | white-space: nowrap + overflow: hidden + text-overflow: ellipsis |
| 多行文本自动换行(含长单词) | word-break: break-all 或 overflow-wrap: break-word + 固定容器宽度 |
| 多行文本溢出省略(WebKit内核) | display: -webkit-box + -webkit-box-orient: vertical + -webkit-line-clamp: 行数 + overflow: hidden |
| 多行文本溢出省略(通用兼容) | 固定行高 + 高度=行高*行数 + overflow: hidden |
注意事项
在使用这些属性时,需要注意以下几点:
- text-overflow属性必须和overflow: hidden配合使用才会生效,否则无法裁剪溢出文本
- -webkit-line-clamp属性需要配合display: -webkit-box和-webkit-box-orient: vertical使用,且只在WebKit内核浏览器生效
- word-break: break-all会强制在任意字符处换行,可能会导致英文单词被拆分成两半,影响阅读,非必要场景可以优先使用overflow-wrap: break-word
- 如果容器没有设置明确的宽度,文本会默认占满父容器的宽度,不会出现溢出情况,所以防止溢出首先要保证容器有明确的宽度限制
CSS文本溢出换行white_spacetext_overflow修改时间:2026-06-21 02:21:40