多余文字省略解决方案

网页前端开发过程中,后端传来的文本数据长短不可控,如果接收到的文本非常长且又没有作自适应处理,页面效果会十分可怕。自适应处理在这种场景下确实很重要,不过,另一种解决方案同样也可以考虑,那就是本文将要讨论的省略多余文字,尤其是在移动端屏幕资源有限的情况下,更应该采用省略文字的解决方案。
本文将讨论单行和多行文字省略的方案,特别是多行文字的省略,不像单行省略的解决方案那么简单全面,故本文重点讨论多行文字的方案。

单行文字省略

单行文字的省略方案已经有比较主流又有效的解决方案,就是CSS3的text-overflow属性。该属性能够优雅地完成所有单行文字省略的需求,而且覆盖了目前市场上几乎所有的浏览器版本(浏览器支持情况,请参考:http://caniuse.com/#search=te... )。
在使用中唯一需要注意的是要加上代码:

.truncation {
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;
}

white-space: nowrap 保证单行文字不会换行,若无此属性文字会自动换行而不会显示省略号。overflow: hidden 则不显示超出容器的文字内容,若无此属性,文字会显示超过容器而不省略。

多行文字省略

方案一:-webkit-line-clamp(仅适用于webkit内核浏览器)

在webkit内核的浏览器中,多行文字省略可以采用CSS属性-webkit-line-clamp实现。

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

其中overflow:hidden 保证超出行数的内容不显示;display: -webkit-box-webkit-box-orient: vertical 表示采用-webkit-box显示,其行数方向为垂直。
这种方法实现起来简单明了,缺点就是受用面太窄,只适用于webkit内核浏览器。而且,-webkit-box已经被flex替代,后续不太可能被其他内核浏览器支持。不过,由于大部分移动端浏览器(Safari, Android Browser, Chrome)都是webkit内核的,如果该页面仅在移动端浏览,那么这不失为一种最简单有效的方案。

方案二:clamp.js

CSS搞不定的事情,只能交给JS了。
解决方案代码,请参考这个仓库~ https://github.com/yuanqing/l...

基本思路

先按单词截断,再按字符进行截断。单词与字符的截断方法类似,以截断字符的思路为例:

  • 每次循环减少element.innerHTML一个字符;

  • 观察此时的element元素内容的高度是否满足要求的最大高度

    • 其中元素内容的高度用element.offsetHeight获取;

    • 获取要求的最大高度:由于传入的是最大行数,故而将其与line-height相乘得到(line-height可以由计算样式获得window.getComputedStyle(element).lineHeight);

function truncateByCharacter(element, maximumHeight, ellipsisCharacter) {
  const innerHTML = element.innerHTML;
  let length = innerHTML.length;

  while (length > 0) {
      element.innerHTML = innerHTML.substring(0, length).replace(TRAILING_WHITESPACE_REGEX, '') + ellipsisCharacter;
    if (element.offsetHeight <= maximumHeight) {
      return;
    }
    length--;
  }
}

JS的解决方案相比CSS的更加灵活,如需要隐藏或显示更多文字信息时,则应该采用clamp.js解决方案。

总结

本文介绍的多余文字省略方案,都是较为常用的。单行文字解决方案中的text-overflow已经足以应对各种场景各种浏览器;而多行省略文字的解决方案较简单的可采用-webkit-line-clamp方法,尤其是移动端,若存在兼容性问题则参考clamp.js用JS来解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CSS 中可以使用省略号(ellipsis)来显示省略的文本内容,以达到多余文本的隐藏效果。 在 CSS 中,可以通过使用 text-overflow 属性来实现省略号的效果。该属性的值通常是 ellipsis,表示使用省略号来显示多余的文本内容。 例如,以下代码将文本框中多余的文本内容隐藏,并使用省略号来表示: ``` overflow: hidden; text-overflow: ellipsis; white-space: nowrap; ``` 其中,overflow 属性设置为 hidden,表示超出文本框范围的内容将被隐藏。white-space 属性设置为 nowrap,表示文本不会换行。 以上代码可以适用于大部分文本框,但是在一些情况下可能需要根据具体的需求进行调整。 ### 回答2: 在CSS中,如果希望当文字内容过多时能够显示省略号,可以使用text-overflow属性。它经常与white-space和overflow属性一起使用。 首先,将white-space属性设置为nowrap,这样文字就会在一行内显示,不会换行。然后,将overflow属性设置为hidden,这样超出容器宽度的文字将被隐藏。 接着,使用text-overflow属性来指定省略号的显示方式。常用的取值有: - clip:超出容器宽度的文字被裁剪隐藏。 - ellipsis:超出容器宽度的文字显示省略号。 如果配合使用了white-space和overflow属性,并且需要显示省略号,可以将text-overflow属性设置为ellipsis。 同时,为了让省略号生效,还需要设置容器的宽度。可以使用width属性来指定容器的宽度。 以下是一个示例的CSS代码: ``` CSS .container { width: 200px; /* 设置容器的宽度 */ white-space: nowrap; /* 文字在一行内显示 */ overflow: hidden; /* 超出容器宽度的文字隐藏 */ text-overflow: ellipsis; /* 超出容器宽度的文字显示省略号 */ } ``` 使用上述CSS代码,可以实现当文字过多时显示省略号的效果。 ### 回答3: 在CSS中,我们可以使用text-overflow属性来实现多余文字的显示省略号。 首先,要让文本内容能够被省略,我们需要设置一个固定的宽度或者最大宽度给包裹文本内容的元素,例如一个div或者一个段落(p)。 接下来,我们可以通过设置white-space属性为nowrap来让文本内容在一行显示,这样多余文字就会溢出元素。 然后,我们使用overflow属性来显示溢出的内容。一般来说,我们会使用overflow: hidden来隐藏溢出的内容,这样超出宽度的部分就不会显示出来。 最后,我们通过设置text-overflow属性为ellipsis来显示省略号。这样,当文字超出宽度时,省略号会显示在文本末尾,表示文本的截断。 以下是一个例子的CSS代码: ```css .container { width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } ``` 上面的代码将一个宽度为200px的容器中的文本内容进行省略显示,超出宽度的部分将显示省略号。 需要注意的是,text-overflow属性只在某些浏览器中支持,所以在使用时需要进行兼容性的考虑。有时候,我们还需要配合使用其他的CSS属性来实现更复杂的效果,例如通过伪元素来添加省略号等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值