css实现代码:

.text-container {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
  text-overflow: ellipsis;
}

解释:
1.-webkit-box 和 -webkit-box-orient 属性将容器元素设置为一个垂直方向的弹性盒子,并指定了最多显示三行文本;
2.overflow: hidden 来隐藏超出容器高度的文本;
3.text-overflow: ellipsis 来在文本溢出时显示省略号;

注意,
-webkit-line-clamp 是一个非标准属性,只在 WebKit 内核的浏览器(如 Chrome 和 Safari)中生效。如果需要兼容其他浏览器,可以考虑使用 JavaScript 或其他方法来实现类似的效果。

javascript实现代码:

<div id="textContainer">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed fermentum turpis nec orci aliquam, et luctus nisi feugiat.
</div>
var textContainer = document.getElementById("textContainer");
var lineHeight = parseInt(window.getComputedStyle(textContainer).lineHeight);
var maxHeight = lineHeight * 3;

if (textContainer.offsetHeight > maxHeight) {
  while (textContainer.offsetHeight > maxHeight) {
    textContainer.textContent = textContainer.textContent.replace(/\W*\s(\S)*$/, '...');
  }
}

解释:
1.通过 document.getElementById() 方法获取到 id 为 “textContainer” 的容器元素;
2.window.getComputedStyle() 方法获取到容器元素的行高(line-height)属性,并将其转换为整数;
3.计算出最大高度(maxHeight),即三行文本的高度;
4.检查容器元素的实际高度是否超过最大高度。如果超过,则进入循环;
在循环中,我们使用正则表达式将容器元素的文本内容逐渐缩短,直到其高度不再超过最大高度为止。我们使用正则表达式\W*\s(\S)*$来匹配最后一个单词之后的所有字符,并将其替换为省略号。
最终,当容器元素的文本内容被缩短到不再溢出三行时,循环结束。

11-23 16:39