偶然发现,在某乎热榜页有一个很有意思的布局,这里的标题会制约内容的行数,所以文本超出是"不定行"的。详细规则如下:

  1. 整个容器高度是固定的,标题和内容总共 3 行
  2. 标题最多2行,超出省略
  3. 内容由剩余空间决定,如果标题占2行,则内容超出1行省略;如果标题占1行,则内容超出2行省略

是不是很灵(离)活(谱)的交互?可以充分利用页面空间,保证标题和内容都能展示出来

看了下原站的实现,是通过 js 判断标题高度,然后动态添加一个类名实现的。不过呢,经过一番琢磨,这里也是可以纯 CSS 实现的,一起来看看吧

一、标题超出省略

假设有这样一段 HTML

<div class="section"><h3 class="title">LGD 在 TI10 放猛犸,RNG 在 S7 放加里奥最后都输了,哪个更让你愤怒失望?</h3><p class="excerpt">猛犸是对面的绝中绝,大家都知道,并且之前扳回两局已经证明了,当lgd选择ban掉猛犸,或者自己抢掉猛犸时,对面完全不是对手。</p>
</div>

标题的规则是超出2行省略,这个简单,直接用-webkit-line-clamp 实现

.title{overflow: hidden;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;
}

超出2行就会自动省略了

二、内容自适应行数

由于整个高度是固定的,如果让内容部分自适应剩余空间是不是就实现了呢?提到自适应剩余空间,可以马上想到 flex 布局,所以可以这样来实现:

.section{display: flex;overflow: hidden;height: 72px;/*定一个高度*/flex-direction: column;
}
.excerpt{flex: 1; /*自适应剩余空间*/overflow: hidden;
}

这样借助flex: 1;overflow: hidden;就几乎实现了想要的效果

三、不定行超出省略

一般情况,-webkit-line-clamp适用于行数确定的情况下,现在行数不定,有时是 1 行,有时是 2 行,如何处理呢?

1. 右下角环绕效果

首先添加一个伪元素,设置右浮动

.excerpt::before{content: '...';float: right;
}

很明显省略号目前是在右上角的,现在需要挪到右下角来,之前的操作是通过一个浮动元素把这个省略号挤下来,但是需要额外的占位元素

这里再介绍一种新的方式,借助 CSS shapes 布局实现!

首先,将省略号高度撑满,并居下对齐,可以用 flex 实现

.excerpt::before{content: '...';float: right;height: 100%;display: flex;align-items: flex-end;
}

这样省略号虽然到了右下角,但是上面的部分也被挤走了,没有达到环绕的效果。这时就可以用 shapes 布局了。

这里仅仅只需要利用到 shape-outside:inset()就可以了,表示以自身为边界,然后上、右、下、左四个方向分别向内缩进的距离。比如这里需要缩进到靠近省略号位置,所以

.excerpt::before{/*其他样式**/shape-outside: inset(calc(100% - 1.5em) 0 0);
}

2. 自动隐藏省略号

现在还有一个问题,需要文本较少时隐藏省略号,该如何实现呢?可以试试 “CSS 障眼法”

简单来说,就是用一个足够大的色块盖住省略号,设置绝对定位后,色块是跟随内容文本的,所以在文字较多时,色块也跟随文本挤下去了,实现如下

.excerpt::after{content: '';position: absolute;width: 999vh;height: 999vh;background: #fff;
} 

没关系,可以随便找个东西补上,比如 box-shadow,往左下角偏移一点就可以了

.excerpt::after{content: '';position: absolute;width: 999vh;height: 999vh;background: #fff;box-shadow: -2em 2em #fff; /*左下的阴影*/
} 

四、总结和说明

以上实现了一个不定行数的文本截断效果,融合了许多 CSS 小技巧,除了 shapes 布局以外(当然也可以采用其他方式实现),没有太多陌生的属性,下面简单总结一下:

  1. 多行省略直接使用 -webkit-line-clamp,现代浏览器都支持
  2. flex 布局可以很方便的处理剩余空间
  3. float + shapes 布局也可以实现右下角环绕效果
  4. box-shadow 在障眼法中很常见
  5. 适当积累一些 CSS 奇技淫巧,有时候会帮上大忙

如果你想开发小程序或者了解更多小程序的内容,可以通过专业开发公司,来帮助你实现开发需求:厦门在乎科技-专注厦门小程序开发、APP开发、网站开发、H5小游戏开发

CSS 实现文本“不定行数“截断相关推荐

  1. CSS 奇技淫巧 | 巧妙实现文本不定行数截断

    Hello,大家好,我是 Coco,今天又是一篇 CSS 的奇技淫巧.由阅文前端 XboxYan 投稿,授权原创转发.原文地址:https://juejin.cn/post/7022876094608 ...

  2. CSS 限制文本显示行数

    文章目录 CSS限制文本显示行数 假设需求 解决方案 CSS样式 示例Demo 浏览器页面效果 CSS限制文本显示行数 假设需求 有若干段文本内容,要显示在一个盒子内,宽高限制: 要求只能显示5行, ...

  3. css3实现超出文本指定行数(指定文本长度)用省略号代替

    测试代码: 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta name="viewport" c ...

  4. 判断文本的行数c语言,软件工程统计文件中字符串个数,单词个数,词频,行数

    一.前言 在之前写过一个词频统计的C语言课设,别人说你一个大三的怎么写C语言课程,我只想说我是先学习VB,VB是我编程语言的开始,然后接触到C语言及C++:再后来我是学习C++,然后反过来学习C语言, ...

  5. Text-detector 一个用来检测文本内容行数和字数的Mini工具

    分享一个昨天抽闲自己瞎搞的一个Text-detector: 一个用来检测文本内容行数和字数的Mini工具 代码挺简单的,先看一下运行结果吧: 用户输入指定路径的.txt文件,开始进行检索.检索的过程我 ...

  6. android 根据文本计算行数,ios 获取Text行数和每行显示的内容

    该方法主要使用了CoreText中的内容,了解更多CoreText的内容请看CoreText系列 下面是具体代码 - (NSArray *)getLinesArrayOfStringInLabel:( ...

  7. css控制文本的行高

    line-height可以控制文本的行高 示例 <p> 这是一个标准行高的段落. 在大多数浏览器默认行高约20 px. 这是一个标准行高的段落. 这是一个标准行高的段落. </p&g ...

  8. css实现文本首行缩进

    首行缩进可以通过text-indent实现 示例 <p>In my younger and more vulnerable years my father gave me some adv ...

  9. 文字超过省略_纯CSS实现“文本溢出截断省略”的几种方法

    在我们的日常开发工作中,文本溢出截断省略是很常见的一种需考虑的业务场景细节.看上去 "稀松平常" ,但在实现上却有不同的区分,是单行截断还是多行截断?多行的截断判断是基于行数还是基 ...

最新文章

  1. raymarching算法
  2. WSAGetLastError:10004 一个封锁操作被对 WSACancelBlockingCall的调用中断 的解决
  3. 如何打通高薪的黄金通道 成为职场金领
  4. Python引用模块和查找模块路径
  5. PHP类: SEO必备的伪原创工具 (文章重写)
  6. (转载)使用 Anthem.NET 的常见回调(Callback)处理方式小结
  7. [日常工作]非Windows Server 系统远程经常断以及提高性能的方法
  8. 新益华基层医疗系统使用方法_家中更换新路由器了,但不知道如何替换?可以尝试使用这种方法...
  9. UE4 粒子特效基础学习 (01-将粒子效果挂载到角色身上)
  10. 2022年全网首发|大数据专家级技能模型与学习指南(胜天半子篇)
  11. LM2903器件使用说明
  12. springboot拦截器无法获取token值的问题
  13. [凯立德]2013年12月凯立德2013秋季版2F21J0E发布_我是亲民_新浪博客
  14. 求1-1/2+1/3-1/4+……+1/99-1/100 的值
  15. bzoj1123 [POI2008]BLO 圆方树
  16. 信奥中的数学:集合与子集
  17. c语言字母存储,字符串在内存中的储存——C语言进阶
  18. 三层代码讲解--第二课 DATE :2004-05-25
  19. CSS雪碧图demo(含雪碧代码)
  20. 关于redis做秒杀库存扣减的生产实践及思考

热门文章

  1. 15. 三数之和(算法思维系列)
  2. java calendar compareto_Java Calendar compareTo()用法及代码示例
  3. psp开发------环境搭建
  4. CSS3 属性 transform 详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
  5. 【群晖NAS】搭建Plex保姆级教程
  6. 打印机驱动下载后如何安装-驱动人生图文教程
  7. Oracle下划线转义问题
  8. 计算机养护显卡有哪些步骤,为何显卡在夏天频频出事很花钱 保养好电脑显卡不被烧坏有哪些措施...
  9. docker启动mysql实例之后,docker ps命令查询不到
  10. 中望3D2022草图