在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
文字溢出怎么展示,你的需求是什么?单行还是多行?截断,省略,自定义样式,自适应高度?在这里你都能找到答案。接下来我会由浅入深,从原理到实现,带你一步步揭开多行省略的面纱。我们先从最简单的单行溢出省略开始, 热身,单行省略这是一个全宇宙统一的方案,没有太多的魔法 /* 原理:设置文字不换行,溢出后隐藏,截断显示省略符 */ .ellipsis { white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } 如何实现多行省略呢?先从最简单的 最简单的多行省略,line-clamp通过 CSS 属性 .ellipsis { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } 属性的 除了 PC 兼容性问题, 神奇的 float,浮动什么!浮动也能实现多行省略?是的,下面我们用三个浮动盒子来模拟多行省略。首先准备三个盒子(文字盒,占位盒,自定义样式的省略盒)向右浮动,为了方便理解原理,我们给盒子增加不同的背景色, <div class="box"> <!-- 文字盒子 --> <div class="box__text">腾讯以技术丰富互联网用户的生活。通过通信及社交软件微信和 QQ 促进用户联系,并助其连接数字内容和生活服务,尽在弹指间。</div> <!-- 占位盒子 --> <div class="box__placeholder"></div> <!-- 自定义省略盒子 --> <div class="box__more">...展开</div> </div> <style> .box__text { width: 100%; height: 60px; line-height: 20px; background-color: pink; float: right; } .box__placeholder { width: 60px; height: 60px; background-color: gray; opacity: 0.8; float: right; } .box__more { width: 60px; text-align: right; background: yellow; float: right; } </style> 接下来开始调整位置,先给文字盒一个负的左外边距,它的值刚好为占位盒的宽度, .box__text { margin-left: -60px; } 这样一来就给了占位盒子空间,它会浮动到左边,和文字盒排在一排, 上图中,文字盒的高度小于占位盒高度,此时第一排高度为占位盒子高度,第一排没有多余空间,我们自定义的省略盒子只能排在第二排。试想一下,当文字盒的高度大于占位盒高度时(比如文字显示 4 行),会发生什么? 第一排的高度会被文字盒撑开,这个时候第一排有了多余空间,省略盒子能够挤进去。 Awesome 😊,接下来只需要把省略盒子定位到右边和占位盒子同排的位置就可以了, .box__more { position: relative; left: 100%; transform: translate(-100%, -100%); } 修饰一下,去掉背景色,容器设置溢出隐藏,然后给省略盒子加个文字颜色和渐变, .box { position: relative; overflow: hidden; } .box__more { color: #1890ff; background-image: linear-gradient(to left, white 40%, rgba(255, 255, 255, 0.8) 70%, transparent 100%); } 小结一下,这里其实运用了浮动和 BFC 的原理。 外层盒子通过 浮动的方案的优势非常明显,
由于省略样式区域本质上是一个浮动盒子,所以这里我们需要通过渐变来防止穿帮,对于某些背景颜色比较复杂的区域,或者更强的一些自定义省略样式需求时(比如省略样式定义为一张箭头或图片等),这种方案开始显得力不从心了。 有没有其他方式可以实现省略样式完全的自定义呢? 有,将自定义省略盒子的位置预留出来。 那要怎么预留呢?我们可以借助 完全自定义,浮动 + line-clamp我们重新整理一下上述的思路,关键的点有三个, 借助 逐一来看,首先是预留位置, .box__text { position: relative; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; font-size: 60px; line-height: 0; letter-spacing: 0; /* 重置了行高和文字间距,保证省略号占位只受字体大小的影响 */ color: red; /* 为了方便演示,我们先给省略号一个颜色 */ } 这样就可以通过只调整文字盒子的字号,来控制预留省略盒子位置的大小了。由于 <div class="box__text"> <div class="box__inner"> 腾讯以技术丰富互联网用户的生活。通过通信及社交软件微信和 QQ 促进用户联系,并助其连接数字内容和生活服务,尽在弹指间。 </div> </div> <style> .box__inner { font-size: 16px; line-height: 20px; color: #000; vertical-align: top; display: inline; } </style> 接下来是想办法隐藏省略号,这个比较简单,可以设置透明度或者颜色透明, .box__text { opacity: 0; color: transparent; } 有了省略号的预留位置后,我们要想办法将自定义省略盒子定位到预留位置,怎么办呢?还是浮动。由于设置了 准备一个绝对定位的盒子,作为渲染撑开高度文案的容器, <div class="box__abs"> <div class="box__fake-text"> 腾讯以技术丰富互联网用户的生活。通过通信及社交软件微信和 QQ 促进用户联系,并助其连接数字内容和生活服务,尽在弹指间。 </div> <div class="box__placeholder"></div> <div class="box__more">... 展开</div> </div> <style> .box__abs { position: absolute; top: 0; left: 0; width: 100%; } </style> 接着用我们前面讲的三个浮动盒子实现多行溢出省略的方式, .box__fake-text { width: 100%; margin-left: -60px; line-height: 20px; float: right; color: transparent; /* 文案是为了撑开高度,配合浮动实现多行溢出省略 */ } .box__placeholder { width: 60px; height: 60px; float: right; } .box__more { position: relative; left: 100%; transform: translate(-100%, -100%); width: 60px; text-align: right; color: #1890ff; float: right; } 需要注意的是,这里的文字盒子是为了撑开高度,不需要展示,所以我们设置了颜色透明。好了,最后一步,去掉背景色,外层盒子设置溢出隐藏就是我们的最终效果,
到此这篇关于纯 CSS 自定义多行省略的问题(从原理到实现)的文章就介绍到这了,更多相关CSS 自定义多行省略内容请搜索极客世界以前的文章或继续浏览下面的相关文章,希望大家以后多多支持极客世界! |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论