文本多行省略的问题

在日常处理文本的工作中,经常会遇到需要对文本末尾进行省略的需求

单行文本进行省略比较简单:

overflow:hidden;//将超出的部分隐藏

text-overflow:ellipsis;//超出部分用省略号显示

white-space:nowrap;//空白处不换行

再根据需求是否设置宽高,这样就能简单实现单行文本的省略号

支持webkit的浏览器或移动端

在WebKit浏览器或移动端(绝大部分是WebKit内核的浏览器)的页面,这个功能实现起来比较简单,可以直接使用WebKit的CSS扩展属性(WebKit是私有属性)-webkit-line-clamp

-webkit-line-clamp用来限制在一个块元素显示的文本的行数。 为了实现该效果,它需要组合其他的WebKit属性。

常见结合属性:

  1. display: -webkit-box; 必须结合的属性 ,将对象作为弹性伸缩盒子模型显示 。
  2. -webkit-box-orient 必须结合的属性 ,设置或检索伸缩盒对象的子元素的排列方式 。
  3. text-overflow: ellipsis;,可以用来多行文本的情况下,用省略号“…”隐藏超出范围的文本 。

所以,当文本超出两行或以上时,需要展示末尾的省略号,这个时候需要用到

overflow:hidden;//将超出的部分隐藏

text-overflow:ellipsis;//超出部分用省略号显示

display:-webkit-box;//将对象作为弹性伸缩盒子模型显示

-webkit-box-orient:vertical;//从上到下垂直排列子元素(设置伸缩盒子的子元素排列方式)

-webkit-line-clamp:n;//这个属性不是css的规范属性,需要组合上面的两个属性,表示显示的行数

其中比较关键的是后面三句,这三句需要组合使用。同时多行省略的white-space不再是nowrap,根据场景需求自行修改。这里还要注意,父容器的white-space会影响子容器,如果没有效果可以看看是不是父容器设置了white-space

其他浏览器的兼容方案

比较常见的是利用设定好估计的宽高,然后在文本的末尾用"…"来覆盖原来的文本。这中方法比较无奈,但是也算是中解决方案,可以预见的会遇到很多异常流的问题

p {
    position:relative;
    line-height:1.4em;
    /* 3 times the line-height to show 3 lines */
    height:4.2em;
    overflow:hidden;
}
p::after {
    content:"...";
    font-weight:bold;
    position:absolute;
    bottom:0;
    right:0;
    padding:0 20px 1px 45px;
    background:url(/newimg88/2014/09/ellipsis_bg.png) repeat-y;
}

参考:https://www.html.cn/archives/5206/

你可能感兴趣的:(文本多行省略的问题)