CSS实现单行、多行文本溢出显示省略号

单行文本溢出显示省略号的实现方法:

overflow: hidden; /* 隐藏文字 */
text-overflow: ellipsis; /* 省略号 */
white-space: nowrap /* 强制不换行 */

 

多行显示省略号的实现方法:

  • css 限制显示文本的行数,超出不显示
display: -webkit-box; /* 将对象作为弹性伸缩盒子模型显示 */
-webkit-box-orient: vertical; /* 设置或检索伸缩盒对象的子元素的排列方式 */
-webkit-line-clamp: 3; /* 限制显示文本的行数 */ /* 这是一个不规范的属性,它没有出现在 css 规范草案中 */
overflow: hidden;
text-overflow: ellipsis;

因为使用了 webkit 的 css 扩展属性,只有-webkit内核才有作用,移动端浏览器绝大部分是 WebKit 内核的,所以该方法也适用于移动端。

 

  • 利用绝对定位和 padding

首先在包含文字的元素里,嵌入一个<span>...</span>,然后包含文字的元素右侧设置 padding-right 预留出省略号... 的位置, 最后利用绝对定位将...定位至右侧的 padding-right 区域

p {
    position: relative;
    height: 40px;
    width: 250px;
    line-height: 20px;
    overflow: hidden;
    padding-right: 12px;
}  
span {
    position: absolute;
    right: 0;
    bottom: 0;
} 

span 标签也可以换成伪元素 :after 来实现,原理差不多

p {
    position: relative;
    width: 240px;
    max-height: 40px;
    line-height: 20px;
    overflow: hidden;
}  
p::after {
    content: "...";  
    position: absolute;
    right: 0;
    bottom: 0;
    padding-left: 32px;    
    background: -webkit-linear-gradient(left, transparent, #fff 55%);
    background: -o-linear-gradient(right, transparent, #fff 55%);
    background: -moz-linear-gradient(right, transparent, #fff 55%);
    background: linear-gradient(to right, transparent, #fff 55%);  
} 

 

这种方法对搜索引擎还是比较友好的,因为标题实际上并未被截取,而是局限于宽度未被显示而已。但是在内容不足设定显示行的情况下,省略号 “...” 依然会存在,并不会隐藏,可以结合 js 优化。暂时还没有想出利用 css 来实现不足显示行隐藏的办法。

 

  • 使用 js
function mitulineHide(num,con){
        var contain = document.getElementById(con);
         console.log(con);
        var maxSize = num;
        var txt = contain.innerHTML;
        if(txt.length > num){
            console.log('1');
            txt = txt.substring(0,num-1) + "...";
            contain.innerHTML = txt;
        } else {
            console.log("error");
        }
}
mitulineHide(100, "element");

CSS 代码:

.ele {
    width: 200px;
    height: 100px;
    overflow: hidden;
}  
JS 代码:

$(".words").each(function(i){
    var divH = $(this).height();
    var $p = $("p",$(this)).eq(0);
    while($p.outerHeight() > divh) {
        $p.text($p.text().replace(/(\s)*([a-zA-Z0-9]+|\W)(\.\.\.)?$/, "..."));
    }
});  

 

posted @ 2019-02-19 14:09  sugar_coffee  阅读(249)  评论(0编辑  收藏  举报