CSS文本超过两行用省略号代替

  • 方法一:常规写法(只兼容Chrome内核浏览器)
  • 方法二:可以兼容所有浏览器的方式( js + CSS实现 )
  • 方法三:可以兼容所有浏览器的方式( 纯CSS实现 )

方法一:常规写法(只兼容Chrome内核浏览器)

完整代码供参考:

<!DOCTYPE html>
<html lang="en" dir="ltr"><head><meta charset="utf-8"><title>Titile</title><style type="text/css">.test1{overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp:2;-webkit-box-orient: vertical;}</style></head><body><div class="test1">测试文字1234567890测试文字1234567890测试文字1234567890测试文字1234567890</div></body>
</html>

(1)只显示一行,超出部分用省略号

    white-space: nowrap;overflow: hidden;text-overflow: ellipsis;

(2)只显示两行(或多行),超出部分用省略号

    overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;  // 控制多行的行数-webkit-box-orient: vertical;

这个处理方式的目前只兼容webkit内核的浏览器:


方法二:可以兼容所有浏览器的方式( js + CSS实现 )

思想:首先新建一个隐藏的DOM节点,把要显示的内容插入到该DOM节点中,然后计算该DOM的宽度,如果超过了原来文本宽度的两倍,则显示省略号。
以下为Vue.js的实现代码(仅供参考):

<template><div :class="{content: true, ellipsis: ellipsis}">{{content}}</div>
</template><script>
export default {data () {return {content: '这里是测试的文字,abc,123,这里是测试的文字,abc,123,这里是测试的文字,abc,123',ellipsis: false // 判断是否要加上...的样式}},create () {if (this.content && this.content.trim()) {const contentWidth = 800 // 假设原来文本的宽度的800,这里根据具体的情况而定this.ellipsis = this.isEllipsis(this.content.trim(), contentWidth)}},method: {isEllipsis (content, contentWidth) {let el = document.createElement('div')  // 创建一个临时divel.innerHTML = contentel.style.whiteSpace = 'nowrap' // 不换行el.style.position = 'absolute'el.style.opacity = 0 // 完全透明document.body.appendChild(el)const elWidth = el.clientWidth  // 获取这个含有content内容的临时div的宽度document.body.removeChild(el)return elWidth >= contentWidth * 2   // 判断这个临时div的宽度是否大于原节点宽度的两倍}}
}
</script><style lang="scss">.content {max-height: 45px;  // 两行文字的最大高度line-height: 22px;overflow: hidden;position: relative;&.ellipsis {&:after {       // 如果超过2行的宽度,则用...放在第二行的结尾content: '...';font-weight: bold;position: absolute; // 调整...的位置top: 22px;right: 0;padding: 0 20px 1px 45px;background: url('../images/ellipsis_bg.png') repeat-y;   // 预先准备好的覆盖的尾部图片}}}
</style>

方法三:可以兼容所有浏览器的方式( 纯CSS实现 )

通过float特性实现多行文字截断效果,基本原理:

有个三个盒子 div,粉色盒子左浮动,浅蓝色盒子和黄色盒子右浮动:
1、当浅蓝色盒子的高度低于粉色盒子,黄色盒子仍会处于浅蓝色盒子右下方。
2、如果浅蓝色盒子文本过多,高度超过了粉色盒子,则黄色盒子不会停留在右下方,而是掉到了粉色盒子下。

好了,这样两种状态的两种展示形式已经区分开了,那么我们可以将黄色盒子进行相对定位,将内容溢出的黄色盒子移动到文本内容右下角,而未溢出的则会被移到外太空去了,只要我们使用 overflow:hidden就可以隐藏掉。

基本原理就是这样,我们可以将浅蓝色区域想象成标题,黄色区域想象为省略号效果。那么你可能会觉得粉色盒子占了空间,那岂不是标题会整体延后了吗,这里可以通过 margin 的负值来出来,设置浅蓝色盒子的 margin-left 的负值与粉色盒子的宽度相同,标题也能正常显示。

具体代码如下:

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Page Title</title><meta name="viewport" content="width=device-width, initial-scale=1"><style>.wrap {height: 40px;line-height: 20px;overflow: hidden;}.wrap .text {float: left;margin-left: -5px;width: 100%;word-break: break-all;}.wrap::before {float: left;width: 5px;content: '';height: 40px;}.wrap::after {float: right;content: "...";height: 20px;line-height: 20px;/* 为三个省略号的宽度 */width: 3em;/* 使盒子不占位置 */margin-left: -3em;/* 移动省略号位置 */position: relative;left: 100%;top: -20px;padding-right: 5px;background-color: #FFF;}</style>
</head>
<body><div class="wrap"><div class="text">That's the basic idea. You can imagine the light blue region as the title, and the yellow region as the ellipsis. Then you may think that the pink box takes up space, but will the title be delayed as a whole? Here you can come out by the negative value of margin. Set the negative value of the pale blue box to be the same width as the pink box, and the title can also be displayed normally.</div></div>
</body>
</html>

这里我目前看到最巧妙的方式了。只需要支持 CSS 2.1 的特性就可以了,它的优点有:

兼容性好,对各大主流浏览器有好的支持。

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

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

至于缺点,因为我们是模拟省略号,所以显示位置有时候没办法刚刚好,所以可以考虑:

加一个渐变效果,贴合文字,就像上述 demo 效果一样。

添加 word-break:break-all; 使一个单词能够在换行时进行拆分,这样文字和省略号贴合效果更佳。

这个方法应该是我看到最好的用纯 CSS 处理的方式了,如果你有更好的方法,欢迎留言交流!

(https://segmentfault.com/a/1190000016879657)

CSS文本超过两行用省略号代替(兼容所有浏览器)相关推荐

  1. CSS 文本超出两行显示省略号

    // 文本超出两行显示省略号 注:如果设置了 弹性布局 display:flex; 那么下面的的css设置将不起作用div {width: 300px; overflow:hidden;text-ov ...

  2. div中同时存在文本和数字超过两行出省略号

    div中同时存在文本和数字超过两行出省略号 设置文本超过两行出省略号出现下面问题,未到指定宽度就换行 width: 255px;overflow: hidden;text-overflow: elli ...

  3. Vue 文本超过三行展示省略号,并加上展开和收起的功能

    场景:在vue项目中文本超过三行展示省略号,并加上展开和收起的功能 在处理多行文本时,经常会遇到各种各样的需求,比如至多展示三行,多余的部分不展示并以省略号结尾:又比如在这个基础上加上一个展开和收起的 ...

  4. css文本换行以及出现省略号简单处理

    1. 使用word-wrap:break-word 不生效的情况: 1. 对行元素不生效;2. 代码里有默认设置的不换行;3. 由于粘贴复制的英文段落,导致文字换行不生效,有时候是文字被切割,于是 删 ...

  5. css文本超过多行显示省略号兼容所有浏览器

    在网上找到的都是用js判断的(https://www.cnblogs.com/zoumiaomiao/p/4952625.html https://www.cnblogs.com/ChanWunsam ...

  6. 《vue+vant 文本超出两行部分省略号显示》

    今天做移动端项目,遇到了这个问题 面向百度后总结得到了这个结果. 首先,我们要知道css的三条属性. overflow:hidden; //超出的文本隐藏 text-overflow:ellipsis ...

  7. CSS 文本超出溢出显示省略号...

    源码: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8& ...

  8. css 文本超出隐藏显示省略号

    1.大部分浏览器这个就可以解决 overflow:hidden; //超出的文本隐藏 text-overflow:ellipsis; //溢出用省略号显示 white-space:nowrap; // ...

  9. 纯CSS实现多行文本溢出显示省略号(兼容不同浏览器)

    1.单行文本溢出显示省略号 单行文本溢出显示省略号比较简单,设置white-space: nowrap避免换行,再设置text-overflow: ellipse即可. <style>.s ...

最新文章

  1. 【哈渡谱】带你玩转Hadoop之《主机映射、镜像挂载与SSH免密篇》
  2. mvc在页面上显示PDF
  3. Shell - 通过hook文件后门实现应用的自动启停
  4. php 怎么查看原生方法源码_怎么看电脑内存频率?这里有3种方法可以查看,新手分享...
  5. python技巧:拆分多层嵌套列表
  6. mysql桥梁表_以JDBC为桥梁入门MySQL数据库基础
  7. php this db get,php – Codeigniter $this- db- get(),如何返回特定行的值?
  8. python 有限域函数库_深入比特币之有限域运算
  9. 问题:Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?【原创】...
  10. python循环语句输出_python循环语句
  11. 运算放大器典型电路及原理
  12. matlab三角函数默认角度还是弧度,matlab 解三角函数方程弧度与角度问题
  13. 重启服务器iis网站400,重启IIS服务的几种方法小结
  14. QtCharts:给QChartView换肤,换背景色添加背景图片
  15. vue3.0+ts+element-plus多页签应用模板:侧边导航菜单(下)
  16. html页面太大了怎么调小,html – 如何在调整浏览器窗口大小时保持绝对定位的元素...
  17. spark中RSS工具简介
  18. c语言计时纳秒_如何利用rdtsc计算纳秒级的时间
  19. Vue实现图形化积木式编程(十二)
  20. Latex学习笔记(五)——Latex模板学习总结

热门文章

  1. 手工冰粉社区forum.bingfen.com.cn上线...xiuno模版V2完善记录
  2. 重启泼水节。泰国市场借势回春,卧兔网络带你看东南亚卖家的机会
  3. HTML学生个人网站作业设计:电影网站设计——漫威电影(2页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  4. google真的很简单的
  5. matplotlib修改背景颜色和插入背景图片
  6. POI DataValidation 删除数据有效性验证
  7. 正则表达式:特殊字符之“-”(减号)
  8. python小操作——读取文件夹内的任意格式文件到txt并排序
  9. 关于insight数据库价格与价值的双重选择
  10. 无光驱安装原版 windows server2008,win7 的方法,64位的