在日常处理文本的工作中,经常会遇到需要对文本末尾进行省略的需求
单行文本进行省略比较简单:
overflow:hidden;//将超出的部分隐藏
text-overflow:ellipsis;//超出部分用省略号显示
white-space:nowrap;//空白处不换行
再根据需求是否设置宽高,这样就能简单实现单行文本的省略号
支持webkit的浏览器或移动端
在WebKit浏览器或移动端(绝大部分是WebKit内核的浏览器)的页面,这个功能实现起来比较简单,可以直接使用WebKit的CSS扩展属性(WebKit是私有属性)-webkit-line-clamp
。
-webkit-line-clamp
用来限制在一个块元素显示的文本的行数。 为了实现该效果,它需要组合其他的WebKit属性。
常见结合属性:
-
display: -webkit-box;
必须结合的属性 ,将对象作为弹性伸缩盒子模型显示 。 -
-webkit-box-orient
必须结合的属性 ,设置或检索伸缩盒对象的子元素的排列方式 。 -
text-overflow: ellipsis;
,可以用来多行文本的情况下,用省略号“…”隐藏超出范围的文本 。
所以,当文本超出两行或以上时,需要展示末尾的省略号,这个时候需要用到
overflow:hidden;//将超出的部分隐藏
text-overflow:ellipsis;//超出部分用省略号显示
display:-webkit-box;//将对象作为弹性伸缩盒子模型显示
-webkit-box-orient:vertical;//从上到下垂直排列子元素(设置伸缩盒子的子元素排列方式)
-webkit-line-clamp:n;//这个属性不是css的规范属性,需要组合上面的两个属性,表示显示的行数
overflow-wrap:break-word;// 内容将在边界内换行。如果需要,单词内部允许断行
其中比较关键的是后面三句,这三句需要组合使用。同时多行省略的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;
}