多行文本的溢出隐藏与下拉显示

3,300 阅读3分钟

说多行文本溢出隐藏之前先来说一下单行文本

   //单行文本溢出需要满足三个条件:
   overflow:hidden; 
   white-space:nowrap; 
   text-overflow:ellipsis;

但是经过试验,同样的方法在多文本中并不适用,多文本溢出需要满足下面几个条件:

  display:-webkit-box; 
  overflow:hidden;
 text-overflow:ellipsis; 
 -webkit-box-orient:vertical; //子元素应该被水平或垂直排列
 -webkit-line-clamp:3; //3行后显示省略号

demo: 多行文本超过三行隐藏,显示省略号,并在省略号后显示‘展开’二字,点击内容完整显示并可以收缩自如。 最终效果如图:

image.png

image.png

第一步:整体框架:(一个按钮,一段文字)

   <div class="text">
  <label class="btn">展开</label>
  <span>
    天下武功,唯快不破!每一次踏上赛场,我的脑海里都只有一件事:竭尽全力跑出“中国速度”,为我的祖国添彩!今天能打破亚洲纪录,打破黄种人的极限,站在东京奥运百米决赛的跑道上,我所有的梦想都在这一瞬间变成了现实! 一百米的跑道是比谁跑得更快,而人生的跑道是比谁跑得更远、更好、更宽广。请相信中国田径,相信你自己,没有什么不可能!</span>
</div>
<style>
  .text {
    width475px;
    border#efd56e solid 1px;
    color#333;
    font-size14px;
  }
  .btn {
    cursor: pointer;
  }
</style>

将‘展开’二字放到整体布局的右下角

   //注意:此处需要实现文字环绕效果,所以利用伪元素实现最佳
   .text::before{
    content'';
    float: right;
    width0;
    heightcalc(100% - 20px);
}
//但此处发生高度塌陷,height不生效,解决方法:外层套一层盒子
<div class="content">
 <div class="text">
   <label class="btn" for="exp">展开</label>
   <span>
     天下武功,唯快不破!每一次踏上赛场,我的脑海里都只有一件事:竭尽全力跑出“中国速度”,为我的祖国添彩!今天能打破亚洲纪录,打破黄种人的极限,站在东京奥运百米决赛的跑道上,我所有的梦想都在这一瞬间变成了现实! 一百米的跑道是比谁跑得更快,而人生的跑道是比谁跑得更远、更好、更宽广。请相信中国田径,相信你自己,没有什么不可能!</span>
 </div>
</div>

文本超过三行溢出隐藏效果

  //为text选择器添加css样式
  .text {
  display: -webkit-box;
  overflow: hidden;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
}

第四步:实现展开收起功能(使用input type='checkbox' 控制状态切换) 同时为label标签绑定,利用伪元素控制按钮的文字(展开/收起)

 <div class="content">
     <input type="checkbox" id="exp" />
	<div class="text">	
     <label class="btn"  for="exp"></label>
    <span> 天下武功,唯快不破!每一次踏上赛场,我的脑海里都只有一件事:竭尽全力跑出“中国速度”,为我的祖国添彩!今天能打破亚洲纪录,打破黄种人的极限,站在东京奥运百米决赛的跑道上,我所有的梦想都在这一瞬间变成了现实! 一百米的跑道是比谁跑得更快,而人生的跑道是比谁跑得更远、更好、更宽广。请相信中国田径,相信你自己,没有什么不可能!</span>
  </div>
</div>
<style>
  .btn::after{
    content:'展开'
  }
  #exp:checked+.text .btn::after{
    content:'收起'
  }
</style>