CSS:-webkit-line-clamp 多行文字溢出...


一、应用

CSS代码:

.box { 

    width: 100px;  

    display: -webkit-box; 

    -webkit-line-clamp: 2; 

    -webkit-box-orient: vertical; 

    overflow: hidden; 

}

HTML代码:

 

    莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。 

效果:

莫听穿林打叶声,何妨吟啸且徐行。

竹杖芒鞋轻胜马,谁怕?一蓑烟...

 

二、理解

注意:-webkit-line-clamp是webkit的私有属性,是一个 不规范的属性(unsupported WebKit property),

它没有出现在 CSS 规范草案中。


        -webkit-line-clamp用来限制在一个块元素显示的文本的行数。 为了实现该效果,

它需要组合其他的WebKit属性。常见结合属性:


         display: -webkit-box; 必须结合的属性 ,将对象作为弹性伸缩盒子模型显示 。


        -webkit-box-orient 必须结合的属性 ,设置或检索伸缩盒对象的子元素的排列方式 。


 


三、兼容性

这个属性 目前仅支持webkit浏览器,比较合适WebKit浏览器或移动端

(移动端绝大部分是WebKit内核的浏览器)


跨浏览器兼容的方案


A:比较靠谱简单的做法就是设置相对定位的容器高度,用包含省略号(…)的元素模拟实现


p { 


  position: relative; 


  line-height: 1.4em; 


  height: 4.2em; 


  overflow: hidden; 



p::after { 


  content: "..."; 


  font-weight: bold; 


  position: absolute; 


  bottom: 0; 


  right: 0; 


  padding: 0 20px 1px 45px; 


  background: url(images/ellipsis_bg.png) repeat-y; 


}

View Code 

这里注意几点:


height高度正好是line-height的3倍;


结束的省略好用了半透明的png做了减淡的效果,或者设置背景颜色;


IE6-7不显示content内容,所以要兼容IE6-7可以是在内容中加入一个标签,

比如用...去模拟;


要支持IE8,需要将::after替换成:after;


 


B:Javascript (插件)方案    


用js也可以根据上面的思路去模拟,实现也很简单


1.clamp.js   使用也非常简单:


var module = document.getElementById("clamp-this-module"); 


$clamp(module, {clamp: 2});

 


2.jQuery插件-jQuery.dotdotdot   这个使用起来也很方便:

$(function(){ 

  $("wrapper").dotdotdot({ 

    // configuration goes here 

  }); 

});


延伸:单行文本溢出显示省略号...代码

  overflow:hidden; 

  text-overflow:ellipsis; 

  white-space:nowrap