讲师中心 微信公众号
AI工具推荐 视频效率加速

CSS 无限滚动轮播图:纯 CSS 实现无缝循环滚动(无跳动、无 JS)

云静君_1239

云静君_1239

发布时间:2026-08-13 21:54:22

|

895人浏览过

|

来源于php中文网

原创

CSS 无限滚动轮播图:纯 CSS 实现无缝循环滚动(无跳动、无 JS)

本文详解如何使用纯 CSS 构建真正无缝的无限滚动轮播组件,通过精确计算内容宽度、改用 transform: translateX() 替代 left 动画,并复制内容实现视觉连续性,彻底消除循环时的“卡顿”或“抖动”现象。

本文详解如何使用纯 css 构建真正无缝的无限滚动轮播组件,通过精确计算内容宽度、改用 `transform: translatex()` 替代 `left` 动画,并复制内容实现视觉连续性,彻底消除循环时的“卡顿”或“抖动”现象。

要实现一个平滑、无限、无感知跳变的 CSS 轮播(marquee),关键在于两点:动画基准必须与内容尺寸严格对齐,且循环过渡必须由重复内容自然承接。原代码中使用 left: -100% 和 width: 200% 的做法依赖父容器百分比,而父容器(.marquee-block)被设为 width: calc(30% * 5),远小于实际内容宽度,导致动画位移失准——这是“抖动”的根本原因。

✅ 正确解法:精准宽度 + transform + 内容镜像

首先,明确 .marquee-item 固定宽为 580px,gap: 40px(由 .marquee-inner span 定义),共 --total-marquee-items: 5 项。单组 <span></span> 的总宽度应为:

5 × 580px(项目宽) + 4 × 40px(4个间隙) = 2900px + 160px = 3060px

但为实现无缝循环,需至少渲染两组完整内容(即两个 <span></span>),因此 .marquee-inner 的宽度应设为:

.marquee-inner {
  width: calc((580px + 40px) * var(--total-marquee-items) + 40px);
  /* = (620px × 5) + 40px = 3140px —— 精确覆盖 5 项 + 末尾 gap */
}

? 注意:此处 + 40px 是为了补足最后一项后本该存在的 gap(因 gap 仅作用于相邻项之间,5 项产生 4 个 gap,但双组拼接时第二组首项需与第一组末项保持相同间距,故总宽 = 单组宽 × 2 − 末项冗余 gap;更稳妥写法是 calc((580px + 40px) * 5),即每项含自身宽+右侧 gap,5 项共占 5 × 620px = 3100px,已足够。示例中采用 3140px 属保守冗余,实际推荐 calc(580px * 5 + 40px * 4) 或直接 3100px)。

立即学习“前端免费学习笔记(深入)”;

其次,动画必须基于元素自身尺寸。将 left 改为 transform: translateX(),因为:

  • transform 的 % 单位参照元素自身宽(而非父容器),translateX(-100%) 精确等于向左移动一个自身宽度;
  • GPU 加速,性能更优,避免重排重绘导致的卡顿。

修正后的关键动画规则如下:

@keyframes marqueeLeft {
  0%   { transform: translateX(0); }
  100% { transform: translateX(-3100px); } /* 推荐显式像素值,完全可控 */
}
/* 或更通用(依赖 CSS 变量): */
@keyframes marqueeLeft {
  0%   { transform: translateX(0); }
  100% { transform: translateX(calc(-1 * (580px * 5 + 40px * 4))); }
}

⚠️ 强烈建议避免 translateX(-100%):虽然语义清晰,但在多组 <span></span> 布局下,-100% 指的是 .marquee-inner 自身宽度(如 3140px),而实际需位移的距离是单组内容宽度(3100px)。若两者不等,终点位置偏差,就会在循环起点暴露空白或重叠——这正是“抖动”的视觉来源。

✅ HTML 结构:双组内容保障无缝衔接

原结构已正确采用双 <span></span> 复制内容(如 1-2-3-4-5 + 1-2-3-4-5),这是实现无限滚动的基石。当第一组滚动出视口时,第二组恰好完全进入,视觉上无中断。务必确保:

  • 两组 <span></span> 内容完全一致且顺序相同(对 to-left 方向);
  • .marquee-inner 高度足够容纳单行内容(当前 height: 150px 合理);
  • .marquee-block 设置 overflow: hidden 严格裁剪。

✅ 完整可运行示例(精简优化版)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Seamless CSS Marquee</title>
  <style>
    .marquee-wrapper { background: #2F394C; text-align: center; }
    .marquee-wrapper .container { overflow: hidden; }
    .marquee-inner span { display: flex; gap: 40px; }

    .marquee-block {
      --total: 5;
      height: 150px;
      margin: 20px auto;
      background: #1B2531;
      padding: 30px 0;
      overflow: hidden;
      position: relative;
    }

    .marquee-inner {
      display: flex;
      width: calc(580px * 5 + 40px * 4); /* 3100px */
      position: absolute;
      animation: marqueeLeft 5s linear infinite;
    }

    @keyframes marqueeLeft {
      0%   { transform: translateX(0); }
      100% { transform: translateX(-3100px); }
    }

    .marquee-item {
      width: 580px;
      background: #00cc00;
      flex-shrink: 0; /* 关键:禁止缩放破坏宽度 */
    }

    .marquee-item p {
      font: 800 30px/1 cursive;
      margin: 0;
      color: white;
    }
  </style>
</head>
<body>
  <div class="marquee-wrapper">
    <div class="container">
      <div class="marquee-block">
        <div class="marquee-inner">
          <!-- 第一组 -->
          <div class="marquee-item"><p>1</p><div class="aritcle_card flexRow">
                                                        <div class="artcardd flexRow">
                                                                <a class="aritcle_card_img" href="/xiazai/skill7155" title="Browser Js"><img
                                                                                src="https://img.php.cn/upload/skill/000/000/081/179134209757570.jpg" alt="Browser Js"  onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
                                                                <div class="aritcle_card_info flexColumn">
                                                                        <a href="/xiazai/skill7155" title="Browser Js">Browser Js</a>
                                                                        <p>轻量级CDP浏览器控制,适用于AI代理。相较于内置浏览器工具,token消耗降低3‑10倍,仅在浏览时使用。</p>
                                                                </div>
                                                                <a href="/xiazai/skill7155" title="Browser Js" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
                                                        </div>
                                                </div></div>
          <div class="marquee-item"><p>2</p></div>
          <div class="marquee-item"><p>3</p></div>
          <div class="marquee-item"><p>4</p></div>
          <div class="marquee-item"><p>5</p></div>
          <!-- 第二组(完全相同) -->
          <div class="marquee-item"><p>1</p></div>
          <div class="marquee-item"><p>2</p></div>
          <div class="marquee-item"><p>3</p></div>
          <div class="marquee-item"><p>4</p></div>
          <div class="marquee-item"><p>5</p></div>
        </div>
      </div>
    </div>
  </div>
</body>
</html>

? 关键总结

  • 宽度必须精确:.marquee-inner 宽 = itemWidth × count + gap × (count−1),拒绝模糊百分比;
  • 动画用 transform:translateX() 的 % 基于自身宽,但显式像素值(如 -3100px)更可靠、易调试;
  • 内容必须双份:两组相同序列确保滚动终点与起点视觉连续;
  • 禁用 flex 缩放:添加 flex-shrink: 0 到 .marquee-item,防止浏览器自动压缩;
  • 无需 JS、响应式无关:所有尺寸固定(580px),天然适配需求,且不随屏幕变化。

按此方案实现,轮播将如丝般顺滑循环,彻底告别“一卡一跳”的体验缺陷。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

相关专题

更多
css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

4556

2023.06.15

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

997

2023.07.27

css如何插入图片
css如何插入图片

cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1858

2023.07.28

css超出显示...
css超出显示...

在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

3546

2023.08.01

css字体颜色
css字体颜色

CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

7145

2023.08.10

什么是css
什么是css

CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

6071

2023.08.10

css三角形怎么写
css三角形怎么写

CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

2057

2023.08.21

css设置文字颜色
css设置文字颜色

CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

2891

2023.08.22

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

60

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.9万人学习

CSS教程
CSS教程

共754课时 | 97万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn