Vue实现Show More展开收起淡入淡出效果时原有文本被隐藏如何修复
问题原因
初始状态下.text类默认绑定了close动画,你在close关键帧的to阶段新增了opacity: 0配置,同时动画设置了forwards属性,会让动画结束后永久停在最后一帧的状态,所以页面加载完成后整个文本块就变成透明不可见了。
额外说明:line-clamp属性目前不支持CSS动画过渡,你在关键帧中定义的line-clamp变化不会生效,原本的展开收起效果实际是依赖外层.box的max-height过渡实现的。
修复方案
- 调整关键帧的透明度配置,不要让收起状态的文本最终变成全透明,仅保留展开时的淡入效果即可:
@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; }
- 移除关键帧中无效的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; }
- 删掉
.text类默认绑定的close动画,改为只有非展开状态才触发:
/* 删掉.text里默认的 animation: close 2s linear 0.1s forwards; 配置 */ .box:not(.open) .text { animation: close 0.3s ease forwards; }
内容的提问来源于stack exchange,提问作者CCCC
相关产品推荐
相关产品推荐

