css实现多行省略

本文探讨了如何使用CSS伪类实现多行文本省略,并针对内容未超出设定行数时出现多余高度的问题进行了优化。通过调整伪元素的定位和高度,确保在内容不超出时隐藏“查看全文”按钮,而在内容超出时正确显示省略。优化后的解决方案有效地解决了多余的元素高度问题。
摘要由CSDN通过智能技术生成

使用伪类实现

<div class="wrap">
  <p class="text" title="人生是围城,婚姻是围城。克莱登大学哲学博士方鸿渐留学回国了。他是个没有用的人,在欧洲四年,转了三个学校,改了几回专业,生活散漫,学无所成。未婚妻和方鸿渐从未见过面,就撒手人寰。他蒙岳父大人资助得以负笈欧洲,所以回国后,先看望了岳父岳母,这才回到家乡见爹娘。方鸿渐不喜欢这些土里土气又打扮时髦的女孩们,爱情在他心中仍一是一片空白的领域。春暖花开的时候,方鸿渐拜访了和自己一起留学归来的女博士苏文纨。在苏文纨家,他结识了苏的表妹唐晓芙。她是个天真、直爽的大学生。方鸿渐对唐晓芙一见倾心,堕入了情网,可是苏文纨喜欢方鸿渐。方鸿渐不喜欢苏文纨的做作,但是他总不能狠下心来拒绝,怕伤害了苏小姐。。。。。。">
    人生是围城,婚姻是围城。克莱登大学哲学博士方鸿渐留学回国了。他是个没有用的人,在欧洲四年,转了三个学校,改了几回专业,生活散漫,学无所成。未婚妻和方鸿渐从未见过面,就撒手人寰。他蒙岳父大人资助得以负笈欧洲,所以回国后,先看望了岳父岳母,这才回到家乡见爹娘。方鸿渐不喜欢这些土里土气又打扮时髦的女孩们,爱情在他心中仍一是一片空白的领域。春暖花开的时候,方鸿渐拜访了和自己一起留学归来的女博士苏文纨。在苏文纨家,他结识了苏的表妹唐晓芙。她是个天真、直爽的大学生。方鸿渐对唐晓芙一见倾心,堕入了情网,可是苏文纨喜欢方鸿渐。方鸿渐不喜欢苏文纨的做作,但是他总不能狠下心来拒绝,怕伤害了苏小姐。。。。。。
  </p>
  <div>查看全文</div>
</div>
.wrap{
  margin: 50px auto;
  width: 500px;
  overflow: hidden;
  resize: horizontal;
  background: #fff;
  border-radius: 8px;
  padding: 12px;
  border: 1px solid #ebebeb;
  position: relative;
  p.text{
    margin: 0;
    padding: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 7; // 多行超出省略
    -webkit-box-orient: vertical; // 指定box子元素是否按水平或垂直排列
    text-align: justify; // 文本两端对齐
    &::after{
      content: '';
      position: absolute;
      display: block;
      width: 100px;
      height: 20px;
      background-color: red;
    }
  }
}

实现效果
请添加图片描述

  • 红色区域是为了更明显的看出到底是什么元素隐藏了“查看全文”
  • 当缩小显示框时,红色区域看不见了,是因为显示框很小时,假如此时文本变成了10行显示,因为红色区域是根据容器绝对定位的,如果不写top 等方向距离就会定在它本该的位置,而我们是7行就会显示省略,下面的三行虽然被省略,但是高度还在,因为红色区域就被挤到第11行也就看不见了
  • 当显示8行时候我们就会看见第8行被隐藏,红色区域就会显示在第9行,也就是“查看全文”下面
  • 当显示7行时,此时红色区域就会在第8行,也就把“查看全文”遮住了

问题

看动图可以看出,当超出指定行时没什么太大问题,但是,当不满足省略条件时,下面会多出一个高度,这是因为“查看全文”其实一直都在,只是视觉上被我们遮挡住了而已。这显然是有问题的。

优化

其实我们要解决的就是多余的那个“查看全文”块

.wrap{
  margin: 50px auto;
  width: 500px;
  overflow: hidden;
  resize: horizontal;
  background: #fff;
  border-radius: 8px;
  padding: 12px;
  border: 1px solid #ebebeb;
  position: relative;
  p.text{
    margin: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 7; // 多行超出省略
    -webkit-box-orient: vertical; // 指定box子元素是否按水平或垂直排列
    text-align: justify; // 文本两端对齐
    background-color: inherit;
    line-height: 1.5;
    &::before{
      content: attr(title);
      position: absolute;
      left: 12px;
      right: 12px;
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp: 7; // 多行超出省略
      -webkit-box-orient: vertical; // 指定box子元素是否按水平或垂直排列
      text-align: justify; // 文本两端对齐
      background-color: red;
      line-height: 1.5;
    }
    &::after{
      transition: 1s;
      content: '';
      display: block;
      height: 0;
      margin-top: -20px;
    }
  }
}

效果图
请添加图片描述

  • 红色区域是 before 创建的伪元素内容,用来覆盖原来的元素
  • 内容不超出时,after元素的margin-top负数,会使得后面的内容“查看全文”向上走一行,从而整体都被上面的before内容遮住也就看不到“查看全文”了
  • 内容超出时,因为元素的伪元素会被置于这个元素的内容的前后,而不是这个元素的前后,所以after会被当作超出内容直接被省略,不会影响“查看全文”的位置

内容不超出:
在这里插入图片描述
内容超出时:
在这里插入图片描述

margin负数

这里有个疑问,为什么未超出时 margin-top 负数,会将“查看全文”带上去顶替 p 元素的最后一行,为什么“查看全文”不是紧接着 p 文本的最后一行而是将其挤掉了
因为 margin-top 负数就是希望将其紧跟着元素推上来
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值