css实现文本溢出省略效果

封面.jpg

一、单行:

p {
    overflow: hidden;//超出隐藏
    text-overflow: ellipsis;//文本溢出,省略号代替
    //如果是单行
    white-space: nowrap;//设置文本内换行符无效,在同一行继续展示,除非遇到<br>
}

效果:


单行溢出省略.png

二、多行:

2.1 css

不考虑兼容(-webkit-box兼容性:/* Chrome 4+, Safari 3.1, iOS Safari 3.2+ */)

p {
    overflow: hidden;//超出隐藏
    text-overflow: ellipsis;//文本溢出,省略号代替
    //如果是多行
    -webkit-line-clamp: 2;//限制显示的行数,必须结合以下2行:
    display: -webkit-box;//作为弹性伸缩盒子模型显示
    -webkit-box-orient: vertical;(垂直的)//设置或检索伸缩盒对象的子元素的排列方式为垂直展示
}

效果:


多行文本溢出省略1.png

考虑兼容

/** css **/
        div {
            width: 100px;
            border: 1px solid red;
            overflow: hidden;
            line-height: 1.2em;
            height: 4.8em;
            position: relative;
            text-align: justify;
        }
        div::after {
            content: "...";
            position: absolute;
            bottom: 0;
            right: 0;
            width: 1em;
            background-color: #fff;
        }
<!-- html -->
<div>啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>

效果:


多行文本溢出省略2.png
2.2 使用插件
2.2.1 Clamp.js

下载地址
用法:

//Single line
$clamp(myHeader, {clamp: 1});

//Multi-line
$clamp(myHeader, {clamp: 3});

//Auto-clamp based on available height
$clamp(myParagraph, {clamp: 'auto'});

//Auto-clamp based on a fixed element height
$clamp(myParagraph, {clamp: '35px'});
2.2.2 jQuery.dotdotdot

下载地址 (个人或非营利性质,如果作商业用途则需要购买)
用法:

<script src="dotdotdot.js"></script>
<script>
  document.addEventListener( "DOMContentLoaded", () => {
     let wrapper = document.querySelector( "#element-to-truncate" );
     let options = {
        // [Options go here](https://dotdotdot.frebsite.nl/#options)
     };
     new Dotdotdot( wrapper, options );
  });
</script>
2.3 js实现
2.3.1 限制文本内字数(非行数),超出显示省略号
function wordlimit(cname,wordlength){                  //参数分别为:类名,要显示的字符串长度
    var cname=document.getElementsByClassName(cname);  //需要加省略符号的元素对象
    for(var i=0;i<cname.length;i++){           
       var nowhtml=cname[i].innerHTML;                //元素的内容
        var nowlength=cname[i].innerHTML.length;      //元素文本的长度
        if(nowlength>wordlength){
            cname[i].innerHTML=nowhtml.substr(0,wordlength)+'...';      //截取元素的文本的长度并加上省略号
        }
    }
}
wordlimit("sldiv",15);                                   //调用方法
2.3.2 算法实现
  • 监听DOM尺寸变化
  • 判断是否溢出 scrollHeight > offsetHeight
  • 二分查找多行截取字符临界值(算法的解法:判断字符串是否溢出,二分查找字符串溢出临界子串,控制...显示)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容