自动省略号
在网页开发中,我们经常会遇到文本溢出显示省略号的需求:比如文章列表的摘要、卡片的简介、商品名称等,单行或多行文本超出容器时,自动截断并显示 …,保持页面整洁美观。
CSS 的 text-overflow: ellipsis 只能解决单行省略,多行省略在现代浏览器中可以用 -webkit-line-clamp,但兼容性和灵活性有限。这时候,专门的 JS 库就是更好的选择。
这里介绍两个非常经典的自动省略号 JS 库:Clamp.js 和 dotdotdot.js,轻量且强大,能完美覆盖单行、多行、HTML 内容截断等场景。
一、先了解:CSS 原生方案(基础场景首选)
在介绍 JS 库之前,先补充 CSS 原生方案,简单场景优先用 CSS,性能更好:
1. 单行省略(兼容性最好)
1 | |
2. 多行省略(现代浏览器支持)
1 | |
局限:仅支持 WebKit 内核浏览器(Chrome、Safari、Edge),Firefox 需配合
-moz-box,且无法自定义省略位置、添加“阅读更多”链接。
二、Clamp.js:超轻量无依赖的省略号库
Clamp.js 是一个无依赖、纯 JS 的轻量库,压缩后仅约 2.475 KB,专门用于截断 HTML 元素内容并添加省略号。
1. 核心特性
- ✅ 超轻量,无任何依赖
- ✅ 支持单行、多行、固定高度、自适应高度截断
- ✅ 支持自定义省略字符、添加“阅读更多”HTML
- ✅ 可选原生
-webkit-line-clamp加速(WebKit 浏览器) - ✅ 支持按句子/单词/字符智能截断,提升性能
2. 安装与引入
方式1:直接下载
从 GitHub 下载 clamp.min.js:https://github.com/josephschmitt/Clamp.js
方式2:CDN 引入(示例)
1 | |
3. 快速上手
1 | |
4. 完整配置选项
| 选项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
clamp |
Number / String / ‘auto’ | 截断规则: - Number:显示行数 - String(如 ‘35px’):固定高度 - ‘auto’:自适应容器 CSS 高度 |
- |
useNativeClamp |
Boolean | 是否启用 WebKit 原生 -webkit-line-clamp(性能更好) |
WebKit 浏览器默认 true,其他 false |
truncationChar |
String | 截断后显示的字符 | '…'(省略号) |
truncationHTML |
String | 截断字符前插入的 HTML(如“阅读更多”链接) | undefined |
splitOnChars |
Array | 智能截断的字符优先级(先按句子、再按单词、最后按字符),提升性能 | ['.', '-', '–', '—', ' '] |
animate |
Boolean | 是否开启截断动画(彩蛋功能,逐个删除字符直到 fit) | false |
5. 进阶示例:添加“阅读更多”链接
1 | |
三、dotdotdot.js:功能强大的跨浏览器省略号插件
dotdotdot.js 是一个更强大的省略号插件,早期依赖 jQuery,现在也支持原生 JS,压缩后约 6.15 KB,专门处理多行 HTML 内容截断,响应式支持更好。
1. 核心特性
- ✅ 支持复杂 HTML 内容截断(自动处理标签闭合)
- ✅ 响应式:窗口大小变化时自动重新计算省略号
- ✅ 可保留“阅读更多”链接在省略号后
- ✅ 提供完整 API:截断、恢复、销毁、监听尺寸变化
- ✅ 支持按节点/单词/字符三种截断方式
2. 许可证说明
- 个人/非商业使用:免费
- 商业使用:需购买许可证(单网站 $5,多网站 $40)
- GitHub:https://github.com/BeSite/jQuery.dotdotdot
- 官网:http://dotdotdot.frebsite.nl
3. 安装与引入
方式1:NPM 安装
1 | |
方式2:CDN 引入
1 | |
方式3:jQuery 版本(旧版兼容)
如果需要支持 IE 9/10,使用 legacy jQuery 版本(v3.2.3)。
4. 快速上手(原生 JS 版)
1 | |
5. 完整配置选项
| 选项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
callback |
Function | 截断完成后的回调函数,参数 isTruncated 表示是否被截断 |
- |
ellipsis |
String | 省略号字符 | "\u2026 "(…) |
height |
Number / String / null | 容器最大高度: - null:读取 CSS max-height- Number:像素值 - “watch”:持续监听高度 |
null |
keep |
String | 选择器,指定省略号后要保留的元素(如“阅读更多”按钮) | null |
tolerance |
Number | 高度计算的容差(像素) | 0 |
truncate |
String | 截断方式:"node"(按节点)/ "word"(按单词)/ "letter"(按字符) |
"word" |
watch |
Boolean / String | 是否监听尺寸变化: - true:监听容器尺寸 - “window”:监听窗口尺寸 |
"window" |
6. 常用 API 方法
初始化后可通过 dot.API 调用方法:
1 | |
四、两个库对比与选择建议
| 对比项 | Clamp.js | dotdotdot.js |
|---|---|---|
| 体积 | 约 2.475 KB(更轻量) | 约 6.15 KB |
| 依赖 | 无 | 新版无依赖,旧版依赖 jQuery |
| HTML 内容支持 | 基础支持 | 强大(自动处理标签闭合) |
| 响应式 | 需手动处理 | 原生支持(watch 选项) |
| API 完整性 | 简单配置 | 完整 API(截断/恢复/监听) |
| 许可证 | 公共领域(完全免费) | 非商业免费,商业需付费 |
| 适用场景 | 简单文本、单行/多行截断 | 复杂 HTML、响应式页面、需要“阅读更多” |
选择建议
- 简单场景、追求极致轻量:选 Clamp.js(无依赖、免费、够用)
- 复杂 HTML 内容、响应式页面、需要完整 API:选 dotdotdot.js(功能更强大,体验更好)
- 现代浏览器、无特殊需求:优先用 CSS 原生方案(性能最好)
五、总结
自动省略号是网页开发中的高频需求,CSS 原生方案能解决大部分简单场景,而 Clamp.js 和 dotdotdot.js 则能覆盖更复杂的需求:
- Clamp.js 胜在轻量、无依赖、完全免费,适合基础文本截断;
- dotdotdot.js 胜在功能强大、HTML 支持好、响应式完善,适合复杂场景。
根据你的项目需求选择即可,两个库都是经过时间检验的经典工具,稳定可靠!