在 JavaScript 中,处理文本溢出(Text Overflow)通常涉及检测文本内容是否超出容器的宽度或高度,并根据需要进行截断、省略或动态调整。
1. CSS 实现文本溢出省略
如果只需要简单的文本溢出处理,可以使用 CSS 的 text-overflow
属性,结合 white-space
和 overflow
属性来实现。
单行文本溢出省略
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>