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

如何实现背景图片无限循环从右向左滑动动画?

实现背景图片从右向左无缝无限滑动的动画

要实现背景从右向左无缝无限滑动,关键是让动画的起始/结束位置视觉上完全衔接,避免循环时的跳帧。以下是两种优雅的实现方式:

方案一:适配非无缝背景图(通用方案)

如果你的背景图不是无缝平铺的,可通过将背景尺寸设为容器的2倍,配合水平重复来实现无缝循环:

.container {
  height: 200px;
  width: 500px;
  font-size: 200px;
  font-family: sans-serif;
  font-weight: 600;
  background-image: url('https://i.ibb.co/5F5H2S2/background.jpg');
  background-size: 200% 100%; /* 宽度设为容器的2倍,高度铺满容器 */
  background-repeat: repeat-x; /* 开启水平重复 */
  animation: background-slide 5s linear infinite;
}

@keyframes background-slide {
  0% {
    background-position: 100% 0; /* 初始状态:背景图右侧对齐容器左侧 */
  }
  100% {
    background-position: 0 0; /* 结束状态:背景图左侧对齐容器左侧 */
  }
}
<div class="container">hello</div>

原理说明:

  • background-size: 200% 100% 让背景图拉伸到容器宽度的2倍,容器内始终显示背景图的一半内容
  • 动画从100%滑到0时,背景图的后半部分会通过repeat-x自然衔接前半部分,循环时视觉完全连续,不会出现跳回初始位置的突兀感

方案二:适配无缝平铺背景图

如果你的背景图本身是可以无缝拼接的(比如纹理、图案类),可以直接利用背景重复特性,让背景图向左滑动自身宽度的距离:

.container {
  height: 200px;
  width: 500px;
  font-size: 200px;
  font-family: sans-serif;
  font-weight: 600;
  background-image: url('https://i.ibb.co/5F5H2S2/background.jpg');
  background-size: auto 100%; /* 保留背景图原始宽度,高度铺满容器 */
  background-repeat: repeat-x;
  animation: background-slide 5s linear infinite;
}

@keyframes background-slide {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: -100% 0; /* 向左滑动一个背景图的宽度 */
  }
}

原理说明:

  • 当背景图滑动自身宽度的距离后,重复的背景会刚好接上当前显示的内容,循环时完全无缝,动画逻辑更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:47:47