本文来源:http://www.cnblogs.com/penghuwan/p/6682303.html

引言:
写前端UI的朋友们也许都遇到过这样的问题:我们需要实现这样一个需求,在一个父级元素中隐藏一个可能过长的文本:
这个文本可能是单行的:
也可能是多行的:
 
下面我就给大家展示如何简单或优雅地实现这种需求
单行文本溢出的省略
先上代码
<div style =  'width:400px;height:40px;border:1px solid red;'><p style='overflow: hidden;text-overflow: ellipsis;white-space: nowrap;'>这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本</p>
</div>

demo:

关于overflow: hidden
这里我们需要注意到一点:这里的overflow并不是设置为父级元素div的属性,而是p标签的属性,需要和overflow的普通用法区分开来
1overflow:hidden的普通用法:用在块级元素(例如div)的外层隐藏内部溢出元素
2overflow: hidden的特殊用法:在上述例子中配合text-overflow: ellipsis;white-space: nowrap;实现p元素隐藏自身的溢出并设置(...)的效果
关于text-overflow: ellipsis;
这一属性依赖于overflow: hidden存在,只有设置了overflow:hidden它才是能够生效的,你可以把它看作overflow对于文本溢出隐藏的一种‘特殊样式’
关于white-space: nowrap
它的作用是让文本不换行,这是overflow:hidden和text-overflow:ellipsis生效的基础!没有它overflow:hidden和text-overflow:ellipsis无法生效!(在单行文本溢出省略这一案例中)
从单行文本溢出省略到多行文本溢出省略
许多同学可能会这样想:怎么实现多行文本省略呢?不是只要把white-space:nowrap去掉就可以了吗?( _(:3 」∠)_ 要是这么简单就好了...)
实践出真知,让我们来试一下,去掉CSS样式中的white-space:nowrap,demo:

这次,没能隐藏成功,那如果我们overflow:hidden是设在父级元素div中呢?得到demo:
 
隐藏成功了,可你仍然看不到你想看到的那三个点
妥妥地失败了,嗯,没错,所以对于多行文本溢出的省略我们需要另辟蹊径了
多行文本溢出的省略(...)方案一 ---简单方便的解决方案
我们可以借助webkit的CSS扩展属性实现这一点:
<div style = 'width:400px;height:70px;border:1px solid red;'><p style='display:-webkit-box;//对象作为弹性伸缩盒子模型显示 -webkit-box-orient: vertical;//设置或检索伸缩盒对象的子元素的排列方式 -webkit-line-clamp: 2;//溢出省略的界限overflow:hidden;//设置隐藏溢出元素'>这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本</p>
</div>

demo:
【注意】
1四行CSS缺一不可!
2因为这是webkit的CSS属性扩展,所以兼容浏览器范围是PC端的webkit内核的浏览器:chrome/safari/QQ浏览器/360/猎豹等以及绝大多数的移动端浏览器
多行文本溢出的省略(...)方案二 ---简单粗暴的解决方案
方案一固然最为简单,但其还存在着跨浏览器兼容的问题,于是人民群众们提出了一种简单粗暴的方式去实现通用的解决方案:给div固定高和宽,同时采用相对定位,与此同时对在div内放一个<p>...</p>对其使用绝对定位,定在右下角,同时设其背景颜色为白色就可以了:
<div style = 'position:relative;width:400px;height:45px;border:1px solid red;overflow:hidden;'>
这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本
<p style = 'position:absolute;right:0;bottom:6px;margin:0;background:white'>...</p>
</div>

demo:

但方案二也有一些问题
1在文本没有溢出父级元素时也同样显示省略号:
2末尾处文本可能有被“裁剪”的副效果:
 
多行文本溢出的省略(...)方案三 --简洁优雅的解决方案
那么有没有更加优雅的解决方案,在没有溢出的时候不显示省略号(...),在溢出的时候隐藏并显示省略号呢?答案是有的!先看看我们最终实现的demo:
在文本没有溢出父级元素时:
文本溢出父级元素时:
 
下面是HTML和JS代码:
<div id='view' style='border:1px solid red;width:200px;height:70px;overflow:auto'></div>

s = '这是一个文本这是一个文本这是一个文本这是一个文本这是一个文本这是一个文本'
el = document.getElementById('view');
n = el.offsetHeight;
for(i=0; i<s.length; i++) {el.innerHTML = s.substr(0, i);if(n < el.scrollHeight) {el.style.overflow = 'hidden';el.innerHTML = s.substr(0, i-3) + '...';break;}
}

首先我们需要弄清楚offsetHeight和scrollHeight所表示的高度:
1溢出显示滚动条时:
2没有溢出时:
el = document.getElementById('view'); n = el.offsetHeight;表示的是取到当前包裹文本的父级元素的高度, el.innerHTML = s.substr(0, i);表示在for循环中取出长度递增的文段, '这'--> '这是' --> '这是一',当n < el.scrollHeight也就是 当前文本高度<滚动条内的内容的高度,代表着刚好达到溢出的界限,此时执行if内的语句el.style.overflow = 'hidden';el.innerHTML = s.substr(0, i-3) + '...'; break;将父级元素view的overflow设置为hidden,并且将末尾的三个文字用...取代,同时跳出for循环
perfect!这样我们就实现了优雅的解决方案

转载于:https://www.cnblogs.com/bilibiliganbei/p/6689110.html

转:【CSS/JS学习】如何实现单行/多行文本溢出的省略(...)--老司机绕过坑道的正确姿势...相关推荐

  1. css如何实现单行/多行文本溢出的省略样式?

    在日常开发展示页面,如果一段文本的数量过长,受制于元素宽度的因素,有可能不能完全显示,为了提高用户的使用体验,这个时候就需要我们把溢出的文本显示成省略号 对于文本的溢出,我们可以分成两种形式: 单行文 ...

  2. react如何省略号_react 单行多行文本溢出显示省略号...

    #### 文本溢出处理 #### ##### 单行文本溢出 ##### 单行文本溢出,可直接用css处理,很简单 .ellipsis { overflow: hidden; text-overflow ...

  3. 单行溢出隐藏没生效_小Tip:关于单行/多行文本溢出隐藏的一些看法

    最早的文本溢出隐藏只是简单的hidden,把看不见的都给"去掉",就像这样: 哈哈哈哈哈哈哈哈哈哈哈 .hid{ width: 100px; height: 20px; overf ...

  4. 常用html/css/js学习(会持续更新)

    html5 前端三要素: js 动化(能说会道 会交流) css 美化(妆容) html 结构(身材) html5 超文本标记语言解释型标签语言 运行机制?1) 开发pc - 部署pc - pc-浏览 ...

  5. html,css,js学习笔记(第七天)

    01表格.html <!DOCTYPE html> <html> <head><meta charset="UTF-8"><! ...

  6. 国庆假 的CSS +JS 学习笔记

    1.左右两列定宽,中间自适应, 6. 一个div 中,放三个div ,其中左边和右边是150px,中间div 自适应宽度. left center right .content{ background ...

  7. HTML+CSS+JS 学习笔记(一)———HTML(上)

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

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

  9. css:实现文本两行或多行文本溢出显示省略号

    div{display: -webkit-box;-webkit-box-orient: vertical;word-break: break-all;word-wrap: break-word; w ...

最新文章

  1. π型滤波频率计算_滤波电路的总结
  2. CoLoRMap: Correcting Long Reads by Mapping short reads CoLoRMap:通过映射短读来纠正长读
  3. 在一个3*4数组中查找最大最小值
  4. 解决git提交敏感信息(回退git版本库到某一个commit)
  5. SQL语句学习之路3
  6. 计算机网络技术与计算机应用技术,计算机网络技术和计算机应用技术.pdf
  7. 一个孩子能长大成人到底有多不容易? | 今日最佳
  8. HashMap底层实现(源码分析)
  9. pku 1325 Machine Schedule(匈牙利算法)
  10. 虚短虚断是怎么来的?长篇好文介绍深度负反馈
  11. flash firefox linux,Linux下安装firefox的flash插件
  12. linux扩充home目录,扩大/home目录的空间(转)
  13. 会java 学c_先学Java再学c会简单点吗?
  14. 电脑如何批量下载哔哔视屏_我是电脑哔哔哔哔哔
  15. Java奇怪的位移_Java中位移的疑惑
  16. 2023首届大学生算法大赛——补题
  17. python实现视频音频同步
  18. 网站防御cdn和高防服务器,高防IP和高防CDN哪个防护更好?
  19. xe10 自带DEMO集合
  20. 使用ABBYY FineReader 12心得体会总结

热门文章

  1. 【Qt】通过QtCreator源码学习Qt(十一):Utils::Icon,根据不同主题、不同状态变换图标
  2. python中约瑟夫环程序_Python实现约瑟夫环问题的方法
  3. python如何控制程序的运行顺序_Python流程控制-1 顺序执行
  4. html中设置表格单实线,css实现表格实线的方法
  5. Java学习总结:13
  6. 判断小数是否相等_四年级上册数学填空+计算+判断易错题整理练习,收藏练一练!...
  7. python逐个读取文件并处理_逐个读取多个文件并用python进行处理
  8. nginx+lua实现上传文件到OSS
  9. 微信小程序如何进行登录授权和获取用户信息
  10. python 流写入文件_python文件流操作