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

如何让纯CSS自动滑块动画反向(从左到右)播放?

解决纯CSS自动滑块从左向右滚动的空白间隙问题

我有一套纯HTML+CSS实现的自动滑块,默认从右向左滚动,现在需要调整为从左向右滚动。已将原SCSS转成纯CSS,单位替换为vw提升响应性,但修改flex-direction: row-reverse、justify-content: flex-end及动画方向后,动画虽能运行,却出现原方向滚动时没有的空白间隙,无法实现无缝循环效果。

原代码

HTML

<div class="slider">
    <div class="slide-track">
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/2.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/3.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/4.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/5.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/6.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/7.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/1.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/2.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/3.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/4.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/5.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/6.png" height="100" width="250" alt="" />
        </div>
        <div class="slide">
            <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/557257/7.png" height="100" width="250" alt="" />
        </div>
    </div>
</div>

原SCSS

body {
    align-items: center;
    justify-content: center;
}

$animationSpeed: 40s;

@keyframes scroll {
    0% { transform: translateX(0); }
    100% { transform: translateX(calc(-250px * 7))}
}

.slider {
    height: 100px;
    margin: auto;
    overflow:hidden;
    position: relative;
    width: auto;
    
    .slide-track {
        animation: scroll $animationSpeed linear infinite;
        display: flex;
        width: calc(250px * 14);
    }
    .slide {
        height: 100px;
        width: 250px;
    }
}

解决方案

核心思路

原滑块通过轨道向左移动一组滑块的宽度实现无缝循环,反向滚动时无需修改滑块排列顺序,只需调整动画的起始/结束偏移方向与数值,让轨道从「向左偏移一组滑块宽度」的位置,向右移动至初始位置,即可实现无间隙的从左到右滚动。

修改后的纯CSS代码(兼容px/vw单位)

body {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
  margin: 0;
}

/* 用CSS变量统一管理,方便替换为vw单位 */
:root {
  --slide-width: 250px; /* 替换为vw示例:13.02vw(250/1920*100) */
  --animation-speed: 40s;
}

@keyframes scroll-right {
  /* 初始位置:向左偏移一组滑块的宽度,让第二组滑块衔接在可视区域左侧 */
  0% {
    transform: translateX(calc(-1 * var(--slide-width) * 7));
  }
  /* 结束位置:回到初始偏移前的位置,此时第一组滑块刚好衔接可视区域右侧 */
  100% {
    transform: translateX(0);
  }
}

.slider {
  height: 100px;
  margin: auto;
  overflow: hidden;
  position: relative;
  width: auto;
}

.slide-track {
  animation: scroll-right var(--animation-speed) linear infinite;
  display: flex;
  width: calc(var(--slide-width) * 14); /* 保持两组滑块的总宽度 */
}

.slide {
  height: 100px;
  width: var(--slide-width);
}

问题原因说明

之前修改flex-direction: row-reverse会反转滑块排列顺序,同时动画方向调整后未匹配正确的起始偏移量,导致两组滑块衔接时出现空白间隙。保持原有滑块排列顺序,仅调整动画的偏移方向与初始位置,就能完美实现无缝循环的从左到右滚动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:27:32