css强制换行显示省略号之显示两行后显示省略号
1,首先来一个固定宽度,在一行显示,超出隐藏,显示省略号的样式
display:block;
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
2,其实来一个可以设置让它显示多少行后再显示省略号,这只能用私有属性解决了
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;/*重点,不能用block等其他*/
-webkit-line-clamp: 2;/*重点IE和火狐不支持*/
-webkit-box-orient: vertical;/*重点*/
因为 -webkit-line-clamp: 2 是webkit的私有属性,其他浏览器不可以用。所以在网上找了一下,有个插件还是很好用的,完美的实现了这个属性。
还可以配置很多属性,比如 是否动画展开,不一定要显示省略号,可以显示其他符号,是否启用 -webkit-line-clamp: 这个属性等等;
下载地址 https://github.com/josephschmitt/Clamp.js
首先引入
<script src="../clamp.js"></script>
//调用方法:$clamp(dom,options); dom是节点,options是配置项
用这个插件需要注意一下事项:
我在用这个插件的时候,IE和火狐下面形态各异,火狐在第二行还没到第二行的末尾处(甚至还有很宽的距离)就显示省略号了。IE有时候也出现。
查看了一下源码发现 这个和指定不指定line-height有关系,因为源码中会获取line-height获取高度 来判断显示省略号的;
function getLineHeight(elem) {//计算高度
var lh = computeStyle(elem, 'line-height');
if (lh == 'normal') {//如果DOM 节点没有指定line-height 那么IE会输出默认的normal 火狐会输出22px
lh = parseInt(computeStyle(elem, 'font-size')) * 1.2;
}
return parseInt(lh);
}
如果没有指定行高,IE下面computeStyle(elem, 'line-height');就会返回 nomal。火狐下面就会根据浏览器返回[22px]
再接着看源码
if (supportsNativeClamp && opt.useNativeClamp) {//如果支持webkit-line-clamp 直接用
sty.overflow = 'hidden';
sty.textOverflow = 'ellipsis';
sty.webkitBoxOrient = 'vertical';
sty.display = '-webkit-box';
//sty.wordWrap = 'break-word';
sty.webkitLineClamp = clampValue;
if (isCSSValue) {
sty.height = opt.clamp + 'px';
}
}
else {
var height = getMaxHeight(clampValue);
if (height <= element.clientHeight) {
clampedText = truncate(getLastChild(element), height);
}
}
如果用户在样式中指定了line-height,IE和火狐下面 就会 height == element.clientHeight(一直等于),则就一直会走
clampedText = truncate(getLastChild(element), height); 这段代码。所以需要把 height <= element.clientHeight 的= 号去掉。(具体没去研究,看源码truncate函数即可,下次补上)
没有指定的话 IE就会根据 font-size*12 = 16*1.2 = 19.2
火狐则是一直是22px ,这就有很大差异了。导致
<script>
var header = document.getElementsByTagName('h1')[0],
$clamp(header, {clamp: 2}); //还可以配置如下 选项 。options包括:clamp——行数,useNativeClamp——是否使用-webkit-line-clamp属性,trucationChar——省略的符号(不限于省略号),truncationHTML——省略的内容(不限于符号),animate——是否实现动画折叠。
</script>
还有一个插件 也不叫好用,不过这个插件好像只能设置固定的宽高,超出宽高才会隐藏,不过也多了一些配置(比如,+号折叠,展开。控制多少个字符显示灯)
jQuery.dotdotdot
css强制换行显示省略号之显示两行后显示省略号的更多相关文章
- AngularJS 表单提交后显示验证信息与失焦后显示验证信息
虽然说AngularJS的实时表单验证非常有用,非常高效方便,但是当用户还没有完成输入时便弹出一个错误提示,这种体验是非常糟糕的. 正常的表单验证逻辑应该是在用户提交表单后或完成当前字段中的输入后,再 ...
- css文本超出部分省略号&CSS强制换行总结
word-break:break-all单词截断自动换行 word-break:break-all 例如div宽200px,它的内容就会到200px自动换行,如果该行末端有个英文单词很长(congra ...
- CSS 强制换行和禁止换行学习
强制换行 1.word-break: break-all; 只对英文起作用,以字母作为换行依据. 2.word-wrap: break-word; 只对英文起作 ...
- css强制换行和超出隐藏实现
一.强制换行1 word-break: break-all; 只对英文起作用,以字母作为换行依据. 2 word-wrap: break-word; 只对英文起作用,以单词作为换行依据. 3 ...
- CSS强制换行和禁止换行代码
一.强制换行 1.word-break: break-all; 只对英文起作用,以字母作为换行依据. 2.word-wrap: break-word; 只对英文起作 ...
- css强制换行和超出部分隐藏实现
一.强制换行 1 word-break: break-all; 只对英文起作用,以字母作为换行依据. 2 word-wrap: break-word; 只对英文起作用,以单词作为换行依据. 3 whi ...
- CSS 强制换行和禁止换行强制换行 和禁止换行样式
强制换行 1.word-break: break-all; 只对英文起作用,以字母作为换行依据. 2.word-wrap: break-word; 只对英文起作用,以单词作为换行依据. ...
- CSS - 强制换行和禁止换行强制换行 和禁止换行样
强制换行 word-break: break-all; 只对英文起作用,以字母作为换行依据. word-wrap: break-word; 只对英文起作用,以单词作为换行依据. whi ...
- 解决html表格中内容超出不强制换行和超出宽度自动隐藏并显示省略号
在表格布局中经常会遇到因为表格内容长短的变化导致布局混乱的情况,这个时候我们可能会有为了布局稳定把单元格宽度写死的情况:但是我们设置了宽度却发现超出了宽度之后会自动变大,用css定义元素的overfl ...
随机推荐
- leetcode1284 转化为全零矩阵的最少反转次数
m == mat.length n == mat[0].length 1 <= m <= 3 1 <= n <= 3 mat[i][j] 是 0 或 1 . BFS, 代码来自 ...
- LC 725. Split Linked List in Parts
Given a (singly) linked list with head node root, write a function to split the linked list into k c ...
- JavaScript中"Uncaught TypeError: Cannot set property 'innerHTML' of null"错误
写了一个函数,在调用时出错:"Uncaught TypeError: Cannot set property 'innerHTML' of null" 代码如下: <!DOC ...
- RabbitMQ 使用参考
http://www.zouyesheng.com/rabbitmq.html 安装 基本概念 基本形式 持久化 调度策略 5.1. fanout 5.2. direct 5.3. topic 5.4 ...
- 虚拟机、云主机、VPS 三者之间的区别
当我们想部署网站的时候,经常会听到vps.云主机.虚拟机等关键字,那么你知道这几者之间的区别吗?本文就讲解一下VPS.云主机.虚拟机之间的区别. 什么是VPS VPS 是Virtual Private ...
- React Native创建项目等待时间长解决
1. 初始化工程 在终端输入命令 :react-native init AwesomeProject 从命令上看,看起来是初始化一个工程,于是, 1分钟...... 10分钟...... 1小时... ...
- springboot-helloworld-idea
1.file-new-project-Spring Initializr-next:输入项目信息-next:web-next-finish 2.创建controller包 3.创建StudyContr ...
- linux下配置maven并修改maven源
参考文章 <Linux下Maven的安装与使用> <aliyun阿里云Maven仓库镜像地址> <maven国内镜像配置(Ubuntu)> 下载maven,具体目录 ...
- Micro LED 技术详谈
一.显示技术的发展概况 1. 显示技术 顾名思义,是一种将反映客观外界事物的信息(光学的.电学的.声学的.化学等),经过变换处理,以适当形式(主要有图像.图形.数码.字符)加以显示.供人观看.分析.利 ...
- TP5 isEmpty() 判空方法 所用场景
1, { }类型 { "id": 1, "name": "首页置顶", "description": "首页轮 ...