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

CSS ::after伪元素动画中途消失原因及全程可见实现问询

问题原因及解决方法

为什么会中途消失?

有两个核心原因:

  1. animation-fill-mode: forwards的干扰:这个属性是让动画结束后停在最后一帧,但你设置了infinite无限循环,当动画跑完一轮到100%(left:105%)后,它会卡在这个状态,下一轮直接跳回0%(left:-5%),中间的跳变过程会让元素看起来“消失”一下再重新出现。
  2. 父元素可能裁剪了超出范围的内容:你的.btn用了all: inherit,如果它继承的父元素带有overflow: hidden,伪元素移动到按钮范围外时就会被裁剪,自然看不到了。

修复后的代码

.btn {
  all: inherit;
  position: relative;
  font-size: 6rem;
  overflow: visible; /* 强制允许内容超出父元素范围 */
}

.btn::after {
  content: "";
  position: absolute;
  top: 0;
  left: -5%;
  height: 100%;
  width: 2%;
  background-color: greenyellow;
  animation-name: LeftToRight;
  animation-duration: 1s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  /* 移除animation-fill-mode: forwards,无限循环不需要保持最后一帧状态 */
}

@keyframes LeftToRight {
  0% {
    left: -5%;
  }
  100% {
    left: 105%;
  }
}
<button class="btn">UNIVERSE</button>

说明

  • 去掉animation-fill-mode: forwards后,动画跑完一轮会平滑衔接下一轮,不会出现跳变消失的情况。
  • 给.btn添加overflow: visible,确保伪元素在按钮左右两侧超出时也能正常显示,全程不会被裁剪。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:25:27