前些天做个页面需要实现容器内文本溢出部分显示为省略号(...)的功能。我搜了下相关的资料,比较全的资料应该是张大神写的《关于文字内容溢出用点点点(...)省略号表示》 结合各类资料,我整理出效果比较好的几个实现办法。另外,个人感觉这些资料都是比较久远的。不知当下主要的实现办法是什么望各位前辈分享,谢谢!
本文内容
单行文本
实现代码
<style>
/*单行长文本的溢出显示省略号(...)*/
.single {
width:200px;
height:20px;
border:1px solid lavender;
/*以下三个属性设置是不能省的,切记!*/
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;/*规定段落文本不换行*/
}
</style>
<fieldsetclass="f1">
<legend>单行文本</legend>
<divclass="single">
这是一段完整的文本,用来测试的,你觉得呢?我觉得很棒,你觉得呢?那就很棒吧!大家一起棒棒哒!
</div>
</fieldset>
页面效果
多行文本
★ 使用-webkit-box
预备知识:-webkit-box
实现代码
<style>
.mul {
height:200px;
width:112px;
border:1px solid lavender;
display:-webkit-box;/*仅支持web-kit内核的浏览器*/
-webkit-line-clamp:6;
/*指定该容器所能容纳的全行显示的文本行数*/
-webkit-box-orient: vertical;/*制定文本内容的排列方式*/
overflow: hidden;
text-overflow: ellipsis;
}
</style>
<span>使用-webkit-box实现</span>
<divclass="mul">
这是一段完整的文本,用来测试的,你觉得呢?我觉得很棒,那你觉得呢?那就很棒吧!大家一起棒棒哒!
</div>
实现代码
<style>
/*使用margin结合浮动属性,实现省略号*/
.text_overflow_1 {
width:24em;
height:2.4em;
overflow: hidden;
zoom:1;
}
.text_overflow_1 .text_con {
float: left;
height:1.1em;
margin-right:3em;;/*使之与省略号保持一定的间距*/
overflow: hidden;
}
.text_overflow_1 .text_dotted {
width:3em;
height:1.2em;
float: right;/*向右浮动*/
margin-top:-1.21em;/*隐藏在div外面*/
}
</style>
<span>使用浮动和margin实现</span>
<divclass="text_overflow_1">
<divclass="text_con">这是一段比较长的文字,用来测试是否文字溢出时会用省略号显示。</div>
<divclass="text_dotted">…</div>
</div>
原理:当文本足够长时,将会把向右浮动的省略号被挤到问本行显示。关键是省略号margin-top和.text_con数值的设置,建议添加文本框,多次改变数值观察对比。(我就是这么干的::>_<:: )
缺点:经过我的测试,发现jQuery 3.1.1版本对字符个数的控制并不好,无论是字母还是中文!
优点:IE也支持!
实现代码
<divclass="byjQuery">
The context is used for checking.Can you see ?
</div>
<!--使用jQuery限制字数-->
<script>
$(document).ready(function(){
$(".byjQuery").each(function(){
var maxWidth =10;
/*限制字符个数*/
if($(this).text().length > maxWidth){
$(this).text($(this).text().substring(0, maxWidth));
$(this).html($(this).html()+'...');
}
});
});
</script>
重大消息!!! 对于这个办法的实现,我还是不太了解(反思中...)
实现代码
<style>.text_overflow_judge {
width:400px;
}</style>
<span>函数</span>
<divclass="text_overflow_judge">你个杀千刀的,怎么写了这么多的文字,我要被拦腰截断了啊,kitty救我!</div>
<script>
var wordLimit =function(){
$(".text_overflow_judge").each(function(){
var copyThis = $(this.cloneNode(true)).hide().css({
'position':'absolute',
'width':'auto',
'overflow':'visible'
});
$(this).after(copyThis);
if(copyThis.width()> $(this).width()){
$(this).text($(this).text().substring(0, $(this).html().length -4));
$(this).html($(this).html()+'...');
copyThis.remove();
wordLimit();
}else{
copyThis.remove();//清除复制
return;
}
});
};
wordLimit();
</script>
感悟:
功能的实现永远永远有更高效有力的办法!