You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue实现Show More展开收起淡入淡出效果时原有文本被隐藏如何修复

问题原因

初始状态下.text类默认绑定了close动画,你在close关键帧的to阶段新增了opacity: 0配置,同时动画设置了forwards属性,会让动画结束后永久停在最后一帧的状态,所以页面加载完成后整个文本块就变成透明不可见了。
额外说明:line-clamp属性目前不支持CSS动画过渡,你在关键帧中定义的line-clamp变化不会生效,原本的展开收起效果实际是依赖外层.box的max-height过渡实现的。

修复方案

  1. 调整关键帧的透明度配置,不要让收起状态的文本最终变成全透明,仅保留展开时的淡入效果即可:
@keyframes open {
  from {
    opacity: 0.7;
  }
  to {
    opacity: 1;
  }
}

@keyframes close {
  from {
    opacity: 1;
  }
  to {
    opacity: 1;
  }
}

如果需要更自然的收起态底部渐变效果,可以新增底部遮罩实现:

.text {
  position: relative;
}
.box .text::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 24px;
  background: linear-gradient(to bottom, rgba(255,255,255,0), #fff);
  transition: opacity 0.3s ease;
  pointer-events: none;
  opacity: 1;
}
.box.open .text::after {
  opacity: 0;
}
  1. 移除关键帧中无效的line-clamp配置,直接在类选择器中定义不同状态的line-clamp即可:
.text {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  text-overflow: ellipsis;
  overflow: hidden;
  margin: 12px 0;
  line-clamp: 3;
  -webkit-line-clamp: 3;
}
.open .text {
  line-clamp: initial;
  -webkit-line-clamp: initial;
  animation: open 0.3s ease forwards;
}
  1. 删掉.text类默认绑定的close动画,改为只有非展开状态才触发:
/* 删掉.text里默认的 animation: close 2s linear 0.1s forwards; 配置 */
.box:not(.open) .text {
  animation: close 0.3s ease forwards;
}

内容的提问来源于stack exchange,提问作者CCCC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:36:00