JavaScript文本溢出

在 JavaScript 中,处理文本溢出(Text Overflow)通常涉及检测文本内容是否超出容器的宽度或高度,并根据需要进行截断、省略或动态调整。

1. ​CSS 实现文本溢出省略

如果只需要简单的文本溢出处理,可以使用 CSS 的 text-overflow 属性,结合 white-spaceoverflow 属性来实现。

单行文本溢出省略

css 复制代码
.ellipsis {
  white-space: nowrap;      /* 禁止换行 */
  overflow: hidden;         /* 隐藏溢出内容 */
  text-overflow: ellipsis;  /* 显示省略号 */
  width: 200px;             /* 容器宽度 */
}

多行文本溢出省略

css 复制代码
.multiline-ellipsis {
  display: -webkit-box;
  -webkit-line-clamp: 3;    /* 显示的行数 */
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
  width: 200px;
}

2. ​JavaScript 动态截断文本

如果需要在运行时动态截断文本并添加省略号,可以使用 JavaScript。

截断单行文本

ini 复制代码
javascript
function truncateText(element, maxWidth) {
  let text = element.textContent;
  while (element.scrollWidth > maxWidth && text.length > 0) {
    text = text.slice(0, -1); // 每次减少一个字符
    element.textContent = text + '...';
  }
}

const element = document.querySelector('.text');
truncateText(element, 200); // 200px 为容器宽度

截断多行文本

ini 复制代码
javascript
function truncateMultilineText(element, maxLines) {
  const lineHeight = parseInt(window.getComputedStyle(element).lineHeight);
  const maxHeight = lineHeight * maxLines;

  let text = element.textContent;
  while (element.scrollHeight > maxHeight && text.length > 0) {
    text = text.slice(0, -1); // 每次减少一个字符
    element.textContent = text + '...';
  }
}

const element = document.querySelector('.text');
truncateMultilineText(element, 3); // 最多显示 3 行

3. ​结合 CSS 和 JavaScript

可以将 CSS 和 JavaScript 结合使用,实现更灵活的效果。

示例:动态添加省略号

ini 复制代码
html
<div class="text" style="width: 200px; white-space: nowrap; overflow: hidden;">
  这是一个很长的文本内容
</div>
<script>
  const element = document.querySelector('.text');
  if (element.scrollWidth > element.clientWidth) {
    element.title = element.textContent; // 显示完整文本的提示
    element.textContent = element.textContent.slice(0, 10) + '...'; // 截断文本
  }
</script>
相关推荐
To_OC5 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
咩咩啃树皮6 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
阳光是sunny6 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
触底反弹6 小时前
一文搞懂 Tailwind CSS 弹性布局:从原理到实战
前端·css·html
阳光是sunny6 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
To_OC6 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
小林ixn7 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
REDcker7 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
এ慕ོ冬℘゜7 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery
武子康8 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端