CSS动画实战:5分钟搞定无缝轮播图(附完整代码)

如何利用CSS动画打造流畅的无缝图片轮播效果 本文详细解析如何仅用CSS实现流畅的无缝图片轮播效果。核心在于利用@keyframes关键帧动画与transform变换属性,通过图片克隆和视觉欺骗技巧,结合无限循环设置,打造高性能、无卡顿的轮播组件,并提供了响应式适配与交互优化的进阶方案。 阅读详情

CSS动画实战:5分钟搞定无缝轮播图(附完整代码)

轮播图作为现代网页设计的标配元素,几乎出现在每个内容展示型页面中。但很多开发者面对无缝循环这个需求时,往往会陷入JavaScript复杂逻辑的泥潭。其实用纯CSS的@keyframes动画,配合一些巧妙的布局技巧,就能实现丝滑流畅的无缝轮播效果。

今天要分享的这个方案,不仅代码量少得惊人(核心代码不到20行),而且性能远超JS方案——因为CSS动画能直接调用GPU加速。下面我们就从零开始,一步步拆解这个看似神奇的效果。

1. 基础结构搭建

首先创建最简单的HTML骨架,这里我们准备三张测试图片:

<div class="carousel-container">
  <div class="carousel-track">
    <img src="image1.jpg" alt="产品展示1">
    <img src="image2.jpg" alt="产品展示2"> 
    <img src="image3.jpg" alt="产品展示3">
  </div>
</div>

对应的基础CSS样式:

.carousel-container {
  width: 600px;
  height: 400px;
  margin: 0 auto;
  overflow: hidden;
  position: relative;
}

.carousel-track {
  display: flex;
  height: 100%;
}

关键点解析:

  • 外层容器设置overflow: hidden形成视窗效果
  • 内层轨道使用Flex布局使图片横向排列
  • 明确尺寸避免布局抖动(实际项目可用百分比)

2. 动画核心原理

实现无限滚动的秘诀在于@keyframes的时间点控制:

.carousel-track {
  animation: scroll 10s linear infinite;
}

@keyframes scroll {
  0% { transform: translateX(0); }
  100% { transform: translateX(-100%); }
}

这个基础版本存在明显问题:动画结束时会有突兀的跳转。解决方法是在DOM中复制首张图片:

<div class="carousel-track">
  <img src="image1.jpg" alt="产品展示1">
  <img src="image2.jpg" alt="产品展示2">
  <img src="image3.jpg" alt="产品展示3">
  <!-- 关键复制 -->
  <img src="image1.jpg" alt="产品展示1"> 
</div>

优化后的动画代码:

@keyframes scroll {
  0% { transform: translateX(0); }
  100% { transform: translateX(-75%); } /* 3/4宽度 */
}

3. 完整实现方案

将上述原理组合起来,得到完整解决方案:

.carousel-container {
  --item-count: 3; /* 图片数量 */
  width: 600px;
  height: 400px;
  overflow: hidden;
}

.carousel-track {
  display: flex;
  height: 100%;
  animation: scroll calc(var(--item-count)*3s) linear infinite;
}

.carousel-track img {
  width: 100%;
  height: 100%;
  flex-shrink: 0;
  object-fit: cover;
}

@keyframes scroll {
  0% { transform: translateX(0); }
  100% { transform: translateX(calc(-100% / var(--item-count)*var(--item-count))); }
}

性能优化技巧:

  • 使用CSS变量方便修改参数
  • object-fit: cover保持图片比例
  • 合理设置动画时长(建议3-5秒/张)

4. 高级功能扩展

4.1 响应式适配

通过媒体查询适配不同屏幕:

@media (max-width: 768px) {
  .carousel-container {
    width: 100%;
    height: 300px;
  }
}

4.2 悬停暂停

增加用户体验细节:

.carousel-container:hover .carousel-track {
  animation-play-state: paused;
}

4.3 指示器实现

纯CSS方案(需配合radio按钮):

<input type="radio" name="slider" id="slide1" checked>
<input type="radio" name="slider" id="slide2">
<input type="radio" name="slider" id="slide3">

<div class="indicators">
  <label for="slide1"></label>
  <label for="slide2"></label>
  <label for="slide3"></label>
</div>
.indicators {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 10px;
}

.indicators label {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: rgba(255,255,255,0.5);
  cursor: pointer;
}

#slide1:checked ~ .carousel-container .carousel-track {
  animation: none;
  transform: translateX(0);
}
/* 其他radio选择器同理 */

5. 实际应用建议

  1. 图片预处理:

    • 统一尺寸比例(建议16:9)
    • 使用WebP格式减小体积
    • 添加loading="lazy"属性
  2. 可访问性优化:

    <div role="region" aria-label="产品轮播">
      <!-- 轮播内容 -->
    </div>
    
  3. 性能监控:

    const track = document.querySelector('.carousel-track');
    track.addEventListener('animationiteration', () => {
      console.log('Animation cycle completed');
    });
    

这个方案在低端设备上的测试表现令人惊喜——即使在红米Note系列手机上也能保持60fps的流畅度。如果遇到边缘闪烁问题,可以尝试添加backface-visibility: hidden属性。

CSS3无缝轮播图教学 首先,我们在HTML的主体中设置一个父集<div>标签,然后在其中设置一个<ul>标签,并且在其子集<li>标签中插入我们想要播放的图片。 <div> <ul> <li><img src="常规作业/zye_img/f1.jpg"></li> <li><img src="常规作业/zye_img/f2.jpg"></ 阅读详情

相关推荐

JS CSS实现简单的无缝轮播效果

JS CSS实现简单的无缝轮播效果 因为我没有查看过其他人写的无缝轮播代码,所以我的实现方式可能和他人通常的实现方式有较大的差异。 该程序是通过JS配合CSS的过渡效果实现的。 最终效果除在跨越界面切换界面时的过渡效果如果不为匀速则会较不合适外,其他效果和一般无缝轮播效果并无差异。且可以在html中增删界面。 运行效果: 该程序思路: 界面的left值根据界面标签对象在对象数组中的顺序决定。在两张轮播图之间切换时,根据选择方向更改对象在数组中的顺序,重新设置对象left属性值,不需要被显示窗口看到的界面的

qq_46239972的博客 725

css 无缝连接 无限滚动 无限轮播

【代码】css 无缝连接 无限滚动 无限轮播。

weixin_50236740的博客 677

【Web APIs】网页轮播图 ( 清除默认边距、样式 | ul 列表样式设置 | 循环无缝滚动实现 | 动画节流阀 | 左右按钮触发动画 | 小圆点按钮触发动画 )

一、轮播图案例 - 需求、结构、页面样式解析 1、需求说明 2、HTML 结构 3、CSS 样式 - 清除边距及默认样式 ① 清除默认内外边距 ② 清除列表样式 ③ 清除链接样式 4、CSS 样式 - 轮播图图片 ① 左浮动横向排列 ② 轮播图图片父容器 ul 列表样式 ③ 轮播图父容器样式 5、CSS 样式 - 轮播图左右按钮 6、CSS 样式 - 轮播图小圆点按钮 二、轮播图案例 - JavaScript 脚本解析 1、页面加载执行脚本、获取必要的 DOM 元素 2、鼠标进出轮播图区域的事件设定

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1402

纯 CSS 实现轮播图(自动切换、无缝衔接、小圆点切换)

纯 css 实现一个简单的轮播图

qq_53569667的博客 2万+

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

无法获得下列放可solidworks standard 无法连接到服务器-15,10,10061如何解决?

无法获得下列放可solidworks standard 无法连接到服务器-15,10,10061如何解决?

qq_63539957的博客 2万+

纯CSS实现轮播图

本文通过CSS实现可悬停的轮播图效果,不需要js进行复杂的位置计算。为小伙伴们提供一种轮播图的实现思路。

Jeff的博客 2445

【ESP32】SPI SRAM memory test fail。External RAM failed memory test!

log日志报错如下:这两条报错信息表明外部 SPI SRAM(静态随机存取存储器)的内存测试失败。

weixin_56217406的博客 1024

css 实现无缝轮播

&lt;!DOCTYPE html&gt;&lt;html lang="en"&gt;&lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;css 实现无缝轮播&lt;/title&gt; &lt;style&gt; *{margin: 0;padding: 0;}

catherine的博客 4538

Autosar EcuM配置-初始化及下电执行函数-基于ETAS软件

Autosar EcuM学习笔记-上电初始化执行函数及下电前执行函数,本文介绍在EcuM中的配置及使用。

赞的博客 849

2021.02.23丨Virsorter2安装使用及答疑

最近项目比较多,又在学英语,写文章的时间少了很多。最近接到一个病毒组装的项目。用之前组装工具(ABYSS、SPAdes)都没有能够组装较为完整的scafford,今天介绍一款专门用于组装病毒的工具——Virsorter。 Virsorter最早版本发布于2015年,目前已经有了第二个版本。主要用于病毒的组装的注释。详细情况可以查看文章:https://peerj.com/articles/985/ 安装流程 安装文档: https://github.com/jiarong/VirSorter2/b

4835

纯css实现无缝轮播,粘贴既可使用

纯css实现无缝轮播,直接粘贴既可使用

m0_59213774的博客 409

TPM 2.0实例探索2 —— LUKS磁盘加密(1)

本文对LUKS行了系统介绍

phmatthaus的专栏 1700

html+css实现无缝衔接轮播图

无论是电商网站还是内容平台,轮播图都是最常见的前端组件之一。本文将用最通俗易懂的方式,带你从零实现一个支持自动播放、左右切换、无缝衔接的轮播图,即使你是刚入门的前端开发者也能轻松掌握!想象一组排队通过隧道的火车:这就是无缝轮播的核心思想!我们通过克隆第一个元素实现这种"视觉循环"。

L4的博客 883

Java中使用工厂模式和策略模式优雅消除if-else语句(UML类图+案例分析)

在最近的后端开发中,多多少少会发现有很多if-else语句,如果条件过多则会造成整体代码看起来非常臃肿。本篇博客汇总了我对工厂模式和策略模式的理解,以及我是如何把它们巧妙运用在实际项目当中的一些技巧进行了分享,如有问题,欢迎评论区讨论!

黄团团的个人博客 2612

Mybatis面试题(基础篇)

(1)mybatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。(2)mybatis避免了几乎所有的JDBC代码(说明了mybatis底层用的就是JDBC,只不过是封装了)和手动设置参数以及获取结果集。(3)mybatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的pojo映射成数据库中的记录。

qq_38196449的博客 1687

纯Css设置无缝轮播图

代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>CSS轮播图</title> <style type="text/css"> *{ margin: 0; padding: 0; } ul{ list-style: none; } .wrap{ width: 100%;

qq_41039734的博客 1103

第4.4节:保护轴承与安全系统

飞轮储能系统的保护轴承是磁悬浮失效时的最后安全屏障,其设计需满足非干涉性、高可靠性和有限寿命承载原则。转子跌落过程包括自由下落、碰撞、进动和滑行减速等复杂非线性阶段,产生远超常规工况的冲击载荷。保护轴承需具备极限冲击容量、高温耐受性和抗卡死能力。系统采用多层级安全架构,结合故障诊断与健康管理,通过监测振动、电流等参数实现预测性维护。安全停机序列有序结合主动制动与被动摩擦制动,确保系统在极端工况下的安全。保护轴承类型多样,需根据系统规模与可靠性要求合理选择。

技术工作者 227

CSS3无缝轮播效果

CSS3无缝轮播效果

xyphf的博客 4930

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

无缝滚动轮播图(CSS实现)

纯CSS3实现无缝滚动轮播图 CSS *{margin: 0;padding: 0;} li{ list-style: none; } .box{ width: 1050px; border:10px solid #ccc; overflow:hidden; margin:150px auto; } .box ul{ width:200%; overflow:hidden; ...

Schrodinge的博客 1695

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

HTML,js,css无缝轮播

无缝连接轮播 轮播图是很多项目中经常会需要的,轮播图这个东西说简单也简单,说难也难,今天我就为大家整理了轮播图当中的一种**“无缝轮播滚动”** HTML代码: <!-- 轮播图区域 --> <div class="banner"> <!-- 装轮播里内容的盒子 --> <div class="bannerbox" id="bannerbox"> <!-- 装图片的盒子宽为下面图片的七倍 --> <d

weixin_56382471的博客 520

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

css3实现无缝轮播图效果

最近用纯css3实现了一下无缝轮播图效果 html: <div class="banner w"> <ul class="banner_con"> <li><img src="./img/banner1.webp" /></li> <li><img src="./img/banner2.webp" /></li> <li><img src="./img/banner3.we

红尘残雪 755

css轮播图_浅谈无缝轮播图插件封装

页面中轮播图,对于一个前端开发者来说,是最基本的技能,不论是的商城网站,还是企业站,轮播图已经成为不可缺少的一个模块,而常见的轮播图不外乎两种,一种是渐隐渐现轮播图,一种是无缝轮播图。网上关于轮播图的插件也有很多,但是用人家的代码总会出现各种各样的bug,我们修改bug往往要耗费很多时间,而且有些插件的效果还不符合我们的需求,那么我们该如何封装一个自己的轮播插件呢?这就是今天要分享的内容——封装轮...

weixin_39932479的博客 276

css无缝轮播

&lt;script&gt; var indexlog=true; $('.banner li').each(function(){            $('li[data_index=0]').css('left','0');        });    function animation(num){    var index= parseInt($('.current').att...

qq_37372123的博客 197

利用 CSS3 实现的无缝轮播

利用 CSS3 实现的无缝轮播 1 . html的架构 :<div class="layout"> <div class="jd_banner"> <ul class="clearfix"> <li><a href="#"><img src="images/l1.jpg"></a></li> <li><a href="#"><

Revan_g的博客 1301

纯css3实现无缝轮播图效果

主要就是利用css3中的动画了,看完整实现代码如下: &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;纯css实现轮播图效果&lt;/title&gt; &lt;style&gt;

冰雪为融的博客 7548
上一篇: Windows服务器必备:用安全事件ID 4625和4768揪出暴力破解攻击
下一篇: IMYAI智能助手2024年8月更新全解析:从FLUX.1到Vidu,这些新功能你试过了吗?
python9snake
博客等级 码龄1天 0粉丝 1724原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值