vue移动端h5,文本溢出显示省略号,且展示‘更多’按钮

问题:

元素宽度100%,宽度会随着浏览器缩放而变化。元素内文本超过4行时显示省略号,同时展示‘更多’按钮,点击更多按钮展示全部文本。如下图所示
在这里插入图片描述

超出四行显示省略号(…)的代码

.content{
  overflow:hidden;
  text-overflow: ellipsis;
  -webkit-line-clamp: 4;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  margin-bottom: 100px;
}

分析:

文本超出4行显示省略号可以通过display box实现,但是超出后展示‘更多’按钮不好处理,因为无法得知文本是否展示省略号。在行高固定20px的情况下,通过js获取元素高度也可以计算出文本的行数,又因为宽度会跟随浏览器宽度变化,所以需要监听resize事件,实时获取元素高度,计算行数。这样处理也可以满足需求,只是太过复杂,而且在resize事件中实时获取元素高度再计算,可能会卡顿。对于样式问题,尽可能的通过样式来处理,下面介绍另一种实现方案。

解决方法:

html代码
在这里插入图片描述
类名对应的css代码

.content{
  width: 100%;
  font-size: 26px;
  line-height: 40px;
  max-height: 160px;
  overflow: hidden;
  position: relative;
}
.virtual{
  position: absolute;
  top: -40px;
  left: 0px;
  right: 0;
  max-height: 200px;
  overflow: hidden;
  color: transparent;
}
.more{
  position: absolute;
  top: 160px;
  right: 0;
  font-size: 26px;
  cursor: pointer;
  background-color: white;
  color: #666;
}
.light{
  color: blue;
}
  • content是用来展示的元素,最大高度80px(四行高度),超出隐藏。
  • virtual是content的子元素,相对于content绝对定位,top为-20px(负一行高度),virtual内的文本和content相同,宽度也和content相同,virtual字体透明不显示,最大高度100px(五行高度),超出隐藏。
  • more是更多按钮,相对virtual绝对定位,top为80px(定位在more的第五行),背景白色(为了遮挡底部文本)。

所以:

  1. content的内容小于四行时,virtual的内容小于四行,超出隐藏,more不展示
  2. content的内容到了第四行但未超出第四行时,virtual内容小于五行,more不展示
  3. content的内容超出四行时,virtual内容大于等于五行,more展示
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 可以通过 CSS 和内置指令 v-text-overflow 来实现文字溢出后点击省略号展示多的效果。 首先,可以定义一个包含溢出文本的容器,并限制其宽度和高度,使得文本溢出时可以产生省略号。例如: ```html <div class="text-container"> {{ longText }} </div> ``` 然后,通过 CSS 样式来设置溢出文本省略号和点击展示多的特效: ```css .text-container { overflow: hidden; /* 溢出内容隐藏 */ text-overflow: ellipsis; /* 显示省略号 */ white-space: nowrap; /* 不换行 */ width: 200px; /* 容器宽度 */ height: 20px; /* 容器高度 */ } .text-container:hover { overflow: visible; /* 鼠标悬停时展示全部内容 */ height: auto; /* 自动调整高度以完整显示文本 */ } ``` 最后,在 Vue 中使用 v-text-overflow 指令将文本绑定到容器中,并通过鼠标事件来切换展示状态: ```html <div class="text-container" v-text-overflow="longText"></div> ``` ```javascript Vue.directive('text-overflow', { inserted: function (el, binding) { el.textContent = binding.value; el.addEventListener('mouseover', function () { el.style.overflow = 'visible'; el.style.height = 'auto'; }); el.addEventListener('mouseleave', function () { el.style.overflow = 'hidden'; el.style.height = '20px'; }); }, }); ``` 通过以上代码,在文本溢出时,鼠标悬停在容器上时将展示全部文本,移开鼠标时将再次显示省略号。这样,就实现了通过点击省略号展示文本的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值