在实际项目开发中,经常会遇到这样的需求,需要我们把单行或者多行文字溢出时自动显示省略号,今天码云笔记就为大家通过多种方法来实现本末尾省略号显示这一需求。

我们先从最原始的开始,单行文本溢出如何显示省略号。

单行文本溢出显示省略号(…)

省略号在ie中可以使用text-overflow:ellipsis,但有很多的浏览器都需要固定宽度,同时ff这些浏览器并不支持text-overflow:ellipsis设置了。

所以下面给大家整理一下兼容各浏览器显示省略号完整方法。用text-overflow:ellipsis属性可以实现单行文本的溢出显示省略号(…),但是在使用的时候,有时候发现不会出现省略标记效果,经过测试发现,使用ellipsis的时候,必须配合overflow:hidden; white-space:nowrap; width:具体值,这三个样式共同使用才会有效果。

.demo{

overflow: hidden;

white-space: nowrap;

text-overflow: ellipsis;

}

但是这个属性并不支持多行文本溢出显示省略号。

那如果我们要实现多行文本溢出显示省略号呢?

接下来重点说一说多行文本溢出显示省略号,如下。

多行文本溢出显示省略号(…)

方法一

在WebKit浏览器或移动端的页面实现比较简单,可以直接使用WebKit的CSS扩展属性(WebKit是私有属性)-webkit-line-clamp ;注意:这是一个不规范的属性,它没有出现在 CSS 规范草案中。样式说明:

-webkit-line-clamp用来限制在一个块元素显示的文本的行数。 为了实现该效果,它需要组合其他的WebKit属性。常见结合属性:

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

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

-webkit-line-clamp :代表行数,比如多少行设置省略号…。

这个属性只合适WebKit浏览器或移动端(绝大部分是WebKit内核的)浏览器

.demo{

display: -webkit-box !important;

overflow: hidden;

text-overflow: ellipsis;

word-break: break-all;

-webkit-box-orient: vertical;

-webkit-line-clamp: 2;

}

效果如下:

从效果上来看,它的优点有:

响应式截断,根据不同宽度做出调整

文本超出范围才显示省略号,否则不显示省略号

浏览器原生实现,所以省略号位置显示刚好

但是缺点也是很直接,因为 -webkit-line-clamp 是一个不规范的属性,它没有出现在 CSS 规范草案中。也就是说只有 webkit 内核的浏览器才支持这个属性,像 Firefox, IE 浏览器统统都不支持这个属性,浏览器兼容性不好。

使用场景:多用于移动端页面,因为移动设备浏览器更多是基于 webkit 内核,除了兼容性不好,实现截断的效果不错。

方法二 利用定位和伪类元素

p{

position: relative;

width:400px;

line-height: 20px;

max-height: 60px;

overflow: hidden;

}

p::after{

content: "...";

position: absolute;

bottom: 0;

right: 0;

padding-left: 40px;

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优化该方法。

需要注意:

将height设置为line-height的整数倍,防止超出的文字露出。

给p::after添加渐变背景可避免文字只显示一半。

由于ie6-7不显示content内容,所以要添加标签兼容ie6-7(如:…);兼容ie8需要将::after替换成:after。

结合js优化代码

$(function(){

//获取文本的行高,并获取文本的高度,假设我们规定的行数是五行,那么对超过行数的部分进行限制高度,并加上省略号

$('p').each(function(i, obj){

var lineHeight = parseInt($(this).css("line-height"));

var height = parseInt($(this).height());

if((height / lineHeight) >3 ){

$(this).addClass("p-after")

$(this).css("height","60px");

}else{

$(this).removeClass("p-after");

}

});

})

margin负值定位法

这里先上代码,HTML部分:

这是一段比较长的文字,用来测试是否文字溢出时会用省略号显示。

css部分:

.mybj_text_overflow{width:24em; height:1.3em; overflow:hidden; zoom:1;}

.mybj_text_overflow .text_con{float:left; height:1.3em; margin-right:3em; overflow:hidden;}

.mybj_text_overflow .text_dotted{width:3em; height:1.31em; float:right; margin-top:-1.3em;}

结果在不同浏览器下的表现如下(IE6,IE7以IE6示例,Firefox和chrome以Firefox示例):

IE6下,IE7同类型,表现一致

Firefox浏览器下表现

opera浏览器下表现

Safari浏览器下表现

简要说明:此方法兼容IE6,IE7(IE8未测过),Firefox,chrome,Safari,opera浏览器。没有hack,没有生僻的css样式。文字短时,没有省略号,文字溢出时就出现省略号。可以说是相当不错的一个方法。原理也很简单:当文字内容足够长时就把隐藏在上面的省略号层给挤下来了。关键就是点点点所在div层的高度的绝对值要比其margin的绝对值大那么一点点。 如果您不习惯用em做单位,直接换作px就可以了,效果是一样的。

jQuery限制字符字数的方法

//限制字符个数

$(".mybj_text_overflow").each(function(){

var maxwidth=23;

if($(this).text().length > maxwidth){

$(this).text($(this).text().substring(0,maxwidth));

$(this).html($(this).html()+'...');

}

});

所产生的结果是:页面中class为”mybj_text_overflow”的标签内部字符的个数将最多显示23个,如果原本字符个数大于23,则会在后面添加点点点省略号(…),如下图所示的:

js脚本控制

//div

这里是你的一大堆内容

//css

.box {

width: 400px;

height: 40px;

border: 1px solid #f70505;

line-height: 20px;

}

//js

$(function() {

var content_arr = []; //定义一个空数组

$('.box').each(function() { //遍历box内容

var content = $.trim($(this).text()); //去掉前后文空格

content_arr.push(content); //内容放进数组

})

for (var i = 0; i < content_arr.length; i++) { //遍历循环数组

if (content_arr[i].length >= 50) { //如果数组长度(也就是文本长度)大于等于50(数字可自己定义)

content = content_arr[i].substr(0, 50) + '...'; //添加省略号并放进box文字内容后面

$(".box").eq(i).text(content);

} else {

content = content_arr[i];

$(".box").eq(i).text(content);

}

}

})

自己封装一个小插件

写了个小小的jQuery插件,方便对jQuery感兴趣的人直接使用了。

这个单行文字溢出用点点点省略号显示的jQuery插件的使用很简单。例如:

$(".test1").wordLimit();

自动获取css宽度进行处理,如果css中未对.test1给定宽度,则不起作用

$(".test2").wordLimit(24);

截取字符数,值为大于0的整数,这里表示class为test2的标签内字符数最多24个

$.wordLimit()里面为空则根据宽度自动截取,有值的话就按照字符数进行截取了。

如何下载本插件,右侧下载

结语

css,js等前端技术博大精深,肯定还有其他更好的解决方法,这里只是把我所知道的写下来,希望对其他人有所帮助。

html文本自动省略,css单行、多行文本溢出时自动显示省略号方法相关推荐

  1. CSS多行文本溢出隐藏,显示省略号

    单行文本溢出隐藏: overflow: hidden; 单行文本溢出隐藏显示省略号: white-space: nowrap; overflow: hidden; text-overflow: ell ...

  2. CSS内容溢出时,显示省略号

    在对网页进行美化的时候, 我们经常会需要截断内容, 以显示简洁内容, 然后通过链接查看详细内容, 以下给出两个例子. eg-1: 对于此情况, 并不是使用css控制显示省略号, 而是从服务器获取的内容 ...

  3. CSS单行/多行文本溢出显示省略号(...)

    1.单行文本CSS设置: { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } 2.多行文本CSS设置: { over ...

  4. CSS控制的内容超过容器宽度后显示省略号

    text-overflow:ellipsis属性在FF中是没有效果的. 同时应用: text-overflow:ellipsis; white-space:nowrap; overflow:hidde ...

  5. html 文字超出部分,CSS控制文字超出部分显示省略号方法

    我们经常会看到有些网站比较长的字符就会显示省略号了,实现这种效果有两个办法,一种利用程序截取字符,另一种利用css实现超出部分显示省略号,下面我来介绍第二种. 测试浏览器: IE6/7/8/9.ope ...

  6. CSS div内文字溢出部分隐藏显示...省略号

    div内文字溢出部分隐藏显示-省略号 单行溢出显示省略号: overflow: hidden; white-space: nowrap;//内容超出不换行 text-overflow: ellipsi ...

  7. css控制文本超出省略(单行、两行、多行)

    想要控制文本长度? 想要文本超出隐藏? 还想要不用JavaScript实现? 让我们来用css试试吧~ 本文重点 css控制文本超出省略.完成单行.两行.多行的效果 注意点 本文提到的方法 都需要控制 ...

  8. html 文本溢出 兼容,CSS - 纯css实现多行文本溢出省略(兼容所有浏览器)

    前言 多行文本超出高度限制出现省略号 , 移动端多为webkit内核的 , 有扩展属性-webkit-line-clamp , 但并不是CSS规范中的属性 , PC端往往要借助js去实现这一效果,但麻 ...

  9. css实现多行文本溢出显示省略号(…)全攻略

    省略号在ie中可以使用text-overflow:ellipsis了,但有很多的浏览器都需要固定宽度了,同时ff这些浏览器并不支持text-overflow:ellipsis设置了,下文来给各位整理一 ...

最新文章

  1. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法
  2. All CUDA devices are used for display and cannot be used while debugging.
  3. php变量前下滑_PHP变量
  4. python爬虫07--代理
  5. 写在使用 Linux 工作一年后
  6. 【点阵液晶编程连载四】MenuGUI 菜单应用
  7. 如何使用融云地图,文件等插件--融云 Android SDK 2.8.0+ Extension 开发文档
  8. Visual Foxpro 6.0教程
  9. Python数据分析-绘图-2-Seaborn进阶绘图-7-网格图
  10. uni-app快速上手顺序
  11. FileZilla软件的下载、服务器站点配置与数据传输方法
  12. 阿里云对象存储Java-SDK实战
  13. 非零基础自学Golang 第15章 Go命令行工具 15.4 注释文档(doc)
  14. 怎样修复win7无线服务器,win7开启无线服务器
  15. Apache2 + PHP之伪静态
  16. html首页我的待办,我的待办.html
  17. 一文搞懂各大APP!网站python网络爬虫!
  18. 用Python吐槽国产综艺节目!
  19. APK瘦身记,如何实现高达53%的压缩效果
  20. web使用字体包_如何使用跨浏览器Web字体,第2部分

热门文章

  1. 菜鸟驿站智能柜全面开启“刷脸取件”
  2. 淘宝等电商平台API接口评论,item_review-获得商品评论
  3. 鸿蒙王者荣耀想要转区吗,王者荣耀转区功能怎么设置 王者荣耀角色迁移设置方法...
  4. Photoshop最常见的问答集
  5. hide show vue 动画_做一个可复用的 echarts-vue 组件(延迟动画加载)
  6. 1504:Adding Reversed Numbers
  7. 【生活现场】从洗袜子到hbase存储原理解析
  8. 工作以来的第二次年假
  9. 2019年8月2日实验室学术研讨会议
  10. 超级计算机预测南方下雪,大范围雨雪要来,南方确定再下雪!权威预报:14省有雪最大暴雪...