最早的文本溢出隐藏只是简单的hidden,把看不见的都给“去掉”,就像这样:

哈哈哈哈哈哈哈哈哈哈哈

.hid{

width: 100px;

height: 20px;

overflow: hidden;

border: 1px solid red;

}

到后来发现这样不太好:比如在一些信息录入框,如果单纯的用 overflow:hidden; 可能别人会误以为信息不全由此产生一些“大问题”,所以增加了 文字溢出则用省略号代替溢出部分:

其实本质还是overflow的应用,不过结合text-overflow属性在末尾给出提示:

.hid{

width: 100px;

height: 20px;

text-overflow: ellipsis;

white-space: nowrap;

overflow: hidden;

}

这里的white-space属性一定要有:它的作用是“强制文本不换行”。因为文本默认是“一行走不通就另起一行”,但是这样的话就会被认为“没有超出规定部分”,就不会打到“省略号”效果。

从这里可知:达到省略号效果需要两个条件 —— 文本不换行且超出规定部分!

但是现在很多时候我们既需要多行显示信息,又需要控制显示行数。由此催生了“多行文本溢出省略效果”:它的本质还是flex弹性模型作用!

Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Fusce dapibus, tellus ac cursus commodo,

tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Donec ullamcorper nulla non metus auctor fringilla.

Sed posuere consectetur est at lobortis. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Aenean lacinia bibendum nulla sed consectetur.

Nulla vitae elit libero, a pharetra augue.

.indent{

display: -webkit-box; /** 将容器作为弹性伸缩盒模型 */

-webkit-box-orient: vertical; /** 弹性伸缩盒模型子节点排列方式 */

-webkit-line-clamp: 2; /** 限制容器最多显示多少行文本,超出则算“溢出” */

overflow: hidden;

}

效果如下:

到这里似乎一切都很美好。but你是不是忽略了上面代码中几乎每一个属性值前面都有的“-webkit”前缀?

这说明这种方式只能用在webkit内核的浏览器中!局限性太大。所以得通过一些兼容性稳定的属性模拟该策略。常见的非常稳定的属性也就 width/height/overflow/margin/padding等以及各种伪元素。

那能不能结合 max-height 和 line-height 去计算最大行数,通过定位布局将“省略号”固定到整个的末尾(通常是右下角),还有就是webkit省略号有些太“突兀”了,可以用linear-gradient调整省略号所在位置的渐变背景色以使其看上去更自然一些?

——after伪元素当仁不让地扛起了大旗:

.my-indent{

position: relative;

line-height: 20px; /** 这个可以不要,自己决定 */

max-height: 40px; /** 这个用来规定“行数” */

word-break: break-all;

overflow: hidden;

}

.my-indent::after{

content: "...";

min-width: 1.8%; /** 背景区域不能太小,否则盖不住 */

position: absolute;

bottom: 0;

right: 0;

padding-left: 30px;

background: linear-gradient(to right, transparent, #fff 56%);

}

其中的 word-break: break-all; 可自行决定去留,这里笔者加上只是为了显得更好看一些:

让我们把它放到一个盒子中:

Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Fusce dapibus, tellus ac cursus commodo,

tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Donec ullamcorper nulla non metus auctor fringilla.

Sed posuere consectetur est at lobortis. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Aenean lacinia bibendum nulla sed consectetur.

Nulla vitae elit libero, a pharetra augue.

似乎也很正常,于是你又放松了警惕!

然后我们把文字减少到短短的两句:

怎么回事?明明没有溢出却还有省略号!

这就要说到上面我们做了兼容性处理的代码虽然兼容性好了,但是毕竟只有CSS,我们是没法知道“它是否会溢出规定区域”的,也就只能“无论何时都会显示”。所以我们还需结合JS做额外处理:

我们大概都知道:一个页面在超出“一屏”的大小时会有三个“基本属性”:scrollHeight —— 网页文档的真实高度、clientHeight —— 网页在浏览器窗口可视高度、以及scrollTop —— 网页向上滚动了多少距离。

从上面推论我们也知道了:文本在横向被阻拦时会自动折行。

由此类比,不管文字被隐藏了没有它的整体高度是不会变的:

所以我们可以将文字本身的高度和规定了范围的外部div的高度拿来比较,如果超出了,就显示省略号,否则隐藏 —— 通过类名来控制:

/** 将上面的my-indent换成hidden,具体代码不变 */

.hidden{

position: relative;

line-height: 20px;

max-height: 40px;

word-break: break-all;

overflow: hidden;

}

.hidden::after{

content: "...";

min-width: 1.8%;

position: absolute;

bottom: 0;

right: 0;

padding-left: 30px;

background: linear-gradient(to right, transparent, #fff 56%);

}

let box=document.querySelector(".txt");

let p=document.querySelector(".my-indent");

if(p.scrollHeight > box.offsetHeight){

p.classList.add('hidden')

}else{

p.classList.remove('hidden')

}

本文同步分享在 博客“行舟客”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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

  1. 单行溢出隐藏没生效_溢出隐藏:最全的利用css解决内容溢出问题的几种方案

    在p布局中,有的文字内容多了会超过溢出我们限制的高度,有的图片会撑破DIV,让网页错位变乱.内容溢出了容器,超出了容器所限定的宽度和高度应该怎么办呢?可以将文本溢出部分进行隐藏或者用省略号代替,那具体 ...

  2. 单行溢出隐藏没生效_至今没搞懂,为什么这个缸这么火?

    [首先] 用主石-火山岩来做个隐藏的过滤 看看这块火山岩的各个角度 火山石隐藏过滤制作开始 第一步50mm钻头开孔 (好像听到了耳膜挣扎的呐喊) 40mm钻头再次掘进 30mm钻头再次掘进 用12mm ...

  3. spring.profiles.active配置了没生效_一文带你彻底学会 Git Hooks 配置

    你好,我是小桔,是一个没有感情的代码崽. 今天给大家介绍一下 Git Hooks,相信 Git 大家都在用吧,Git 除了用作版本控制,还有许多高级功能,Git Hooks 就是其中之一. 本文环境: ...

  4. apollo @value没生效_不问不要紧,一文要人命,绝对的面试加分项配置中心Apollo深度解读...

    往期推荐 阿里面试官问我:到底知不知道什么是Eureka,这次,我没沉默 万字详解Ribbon架构,针对面试高频题多角度细说Ribbon 什么是Hystrix,阿里技术最终面,遗憾的倒在Hystrix ...

  5. lay-verify=required 没生效_眼睛一闭一睁,20万没了!|侧翻|交通事故|半挂车|追尾...

    (原标题:眼睛一闭一睁,20万没了!) 第五届"创赢台州"(电商直播)创业大赛当前正在火热报名中,市政府举办,规模高.奖励多,总奖金16万,一等奖5万,还可获得本人(团队)销售并已 ...

  6. qt qmediaplayer有声音没画面_小科普 | 一招,让麦克风声音更出色!

    平常玩游戏开黑,我们必然会用到麦克风交流,但是很多人的麦克风比较普通,收声效果较差.还伴随着明显的底噪"沙沙声".玩游戏的时候风扇呼啦啦的.冬天夏天空调风扇也不停,那开黑连麦效果真 ...

  7. .net core 装了没生效_王者荣耀:辅助装出现惊天bug?辅助光环对自己无效?

    大家好,我是老刘备.今天说的这个bug我已经发现许久,从新版本以来就一直在出现,起初我以为是辅助装的光环改动了,但是最近和我的小伙伴开黑之后也遇到这个bug,才发现不是如此. 本期我就来带大家一起看看 ...

  8. fedora如何隐藏顶部状态栏_藏在 iOS 13 里的 9 个隐藏小技巧

    正文共:1797字 10图 1.从控制中心直接选择无线网络和蓝牙配件苹果首次在 iOS 7 中加入了控制中心,允许用户进行一些快速操作,例如打开/关闭飞行模式.打开/关闭蜂窝网络.打开/关闭 Wi-F ...

  9. spring.profiles.active配置了没生效_微服务架构之「 配置中心 」

    在微服务架构的系列文章中,前面已经通过文章<微服务架构之「服务网关 」>介绍过了在微服务中服务网关的原理和应用,今天这篇文章我们继续来聊一聊微服务中另外一个重要模块:「 配置中心 」.后面 ...

最新文章

  1. python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同
  2. 大脑模拟NLP,高德纳奖得主:神经元集合演算用于句子解析
  3. 记忆的天空:“崩塌型”记忆活动原理
  4. IBM copy service--flashcopy 实验
  5. 在VMware虚拟机中进行Ghost网刻不成功的几点提示
  6. java是什么偏旁部首_Python实现获取汉字偏旁部首的方法示例【测试可用】
  7. 让你的文字被很多很多人看到,喜欢我们不如加入我们 | 作者招募
  8. 【转】一个优秀的Javascript框架--Prototype解说
  9. Gh0st 3.6 存在的BUG及修改方法(收集整理)
  10. 拨盘Demo大赛,获奖公布-20170710
  11. php中$stu_by,PHP基础案例二:计算学生年龄
  12. Java 32 进制_32位数字的十六进制表示
  13. Android之使用枚举利弊及替代方案
  14. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.2——增加自定义task
  15. 搭建mock-server
  16. Odin插件与基于元数据的编辑器实现
  17. Maven实战_许晓斌
  18. Inference与predicting的区别
  19. 4 esp_transport 用 racoon协商 用setkey设置 spd
  20. 关于uni-app中SegmentedControl 分段器不显示的问题

热门文章

  1. 从996.icu来谈一谈如何高效支配时间
  2. Elasticsearch(ES)常用命令整理
  3. 反思:乔布斯和丹尼斯·里奇的去世
  4. C++基础——C++ make_pair用法
  5. 蓝桥试题 算法提高 找出出卖耶稣的人 JAVA
  6. python网络编程arp_python网络编程学习笔记(四):域名系统
  7. 【PAT甲级】1001 A+B Format
  8. vue props type设置多个类型,默认值
  9. scanf返回值被忽略的原因及其解决方法
  10. 用SPSS作洛伦兹曲线