css—轮播图实现

一、背景

        最近和朋友在一起讨论的时候,我们提出了这样的一个提问,难道轮播图的效果只能通过js来实现吗?经过我们的一系列的争论,发现了这是可以通过纯css来实现这一效果的,CSS轮播图也是一种常见的网页展示方式,可以通过CSS样式来实现图片的切换效果。它不依赖于JavaScript,运行速度较快,并且具有较好的兼容性。那么今天一如既往的来一起来探讨一下如何去实现这一效果。

二、思路解析

        这个效果并不是想想中的那么难,在这里我们需要使用到的有css中的属性也有css3中的属性,如果来阅读的小伙伴没有接触css3,也不用急,我会在接下来的一篇文章中详细介绍一下,这里使用到的css3的属性。

思路:

        大家应该知道在很早之前的胶片电影的播放形式,我们这里的一个录播效果和胶片电影的思路是大同小异的,那么究竟是什么呢。

        1、首先我们需要创建一个让用户观看轮播图的视口,也就是我们可以看到的部分;

        2、既然有可以看到的部分,那就一定有不可以让用户看到的部分,所以超出的部分怎么办呢?这里我不做解释,留些思考的空间你们来想一下呢。

        3、那么如何让这些图片动起来呢,这里就用到了css3中的属性,那就是动画属性,之后我会进行解释。

        这就是基本的实现思路了。话不多说,直接进入代码实现阶段。

三、拆解分析阶段

注意:接下来的代码结构为了更好的让小伙伴们串联起来,所以采用了代码迭代的方式来讲解,在最后会添加代码的总体结构和css样式。

第一步我们就来创建我们的视口部分,在这里我们使用了div.wrap_out作为视口展示。

<div class="wrap_out"></div>
.wrap_out {width: 500px;height: 300px;margin: 300px auto;border: 2px solid #f00;}

第二步我们需要来创建存放我们所有需要展示的内容的容器,这里我们使用ul来充当这一个容器,在这里我们展示5张图片,所以这里我们需要给ul这个容器设置宽为25oopx,高度和视口高度一致。

<div class="wrap_out"><ul class="wrap"></ul></div>
  .wrap {width: 2500px;height: 300px;}

第三步,我们来创建存放每个内容的盒子,这里由于我们使用的是ul来融合这一部分,所以我们只要使用li来定义存放内容的盒子就可以。在这里我不使用图片讲解,我就直接使用不同的文字进行区分。

<div class="wrap_out"><ul class="wrap"><li>FIRST</li><li>SECOND</li><li>THIRD</li><li>FOURTH</li><li>FIFTH</li></ul></div>
.wrap > li {width: 500px;height: 300px;background-color: #f90;}

如果只这样写,那是肯定无法实现最终需要的效果的,所以现在我们需要让所有的盒子横向排列成一行,以方便之后的移动 。只需要在之前的ul中更新为以下代码

   .wrap {width: 2500px;height: 300px;display: flex;}

 增加完之后就会发现已经成为了我们初步想要实现的结果。

接下来就是把超出红色边框视口的部分隐藏。如下图:

      .wrap_out {width: 500px;height: 300px;margin: 300px auto;border: 2px solid #f00;overflow: hidden;}

现在我们视口中只能看到第一张图,其他的图片都在第一张的后边,那么接下来就不难想到了,只要让ul这个大盒子自己无限次的移动就可以了。 

所以接下来我们需要来定制动画的规则,让他们动起来。

@keyframes wrap_animation {0% {transform: translate(0);}10% {transform: translate(0);}25% {transform: translate(-500px);}35% {transform: translate(-500px);}50% {transform: translate(-1000px);}60% {transform: translate(-1000px);}75% {transform: translate(-1500px);}85% {transform: translate(-1500px);}90% {transform: translate(-2000px);}100% {transform: translate(-2000px);}}

 然后我们需要在需要设置动画的元素中引用我们已经定制好的规则。

.wrap {width: 2500px;height: 300px;display: flex;animation: wrap_animation 10s infinite linear;}

 注意:这里需要注意不要将动画添加错元素

 添加好之后就会发现静态的页面动起来了

但是会发现一个问题,就是在最后一张图之后会有一个白色的置空区域,那么如何解决呢,又是因为什么呢?

有空白的原因是应为我们的 transform: translate()属性是以左边边框为基准点进行平移的,所以当我们移动到-2500px的时候就刚好会漏出那张白色的空白区域,所以我们只需要在最后添加一张和第一张图一样的区域,就可以实现轮播效果。 

<ul class="wrap"><li style="background-color: #f00">FIRST</li><li style="background-color: #0f0">SECOND</li><li style="background-color: #00f">THIRD</li><li style="background-color: pink">FOURTH</li><li style="background-color: purple">FIFTH</li><li style="background-color: #f00">FIRST</li></ul>

这样我们的轮播图效果就完成了。

四、代码总览

1、html部分

<body><div class="box"><div class="wrap_out"><ul class="wrap"><li style="background-color: #f00">FIRST</li><li style="background-color: #0f0">SECOND</li><li style="background-color: #00f">THIRD</li><li style="background-color: pink">FOURTH</li><li style="background-color: purple">FIFTH</li><li style="background-color: #f00">FIRST</li></ul></div></div></body>

 2、CSS部分

<style>* {margin: 0;padding: 0;}html {/* overflow-x: hidden; */}ul {list-style: none;}.box {width: 100vw;height: 100vh;display: flex;}.wrap_out {width: 500px;height: 300px;margin: 300px auto;border: 2px solid #f00;overflow: hidden;}.wrap {width: 3000px;height: 300px;display: flex;animation: wrap_animation 10s infinite linear;}.wrap > li {width: 500px;height: 300px;}@keyframes wrap_animation {0% {transform: translate(0);}10% {transform: translate(0);}25% {transform: translate(-500px);}35% {transform: translate(-500px);}50% {transform: translate(-1000px);}60% {transform: translate(-1000px);}75% {transform: translate(-1500px);}85% {transform: translate(-1500px);}90% {transform: translate(-2000px);}100% {transform: translate(-2000px);}}</style>

五、结语

        感谢大家的耐心阅读,希望这篇文章能给您带来一些启发和帮助。如果您有任何疑问或建议,请随时在评论区留言,我会尽快回复。今天的分享就到这里了,如果您觉得这篇文章还不错,请点赞、分享给更多的朋友吧!同时,也欢迎关注我的博客,获取更多精彩内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/479129.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

<项目代码>YOLOv8 航拍行人识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

2025蓝桥杯(单片机)备赛--扩展外设之UART1的原理与应用(十二)

一、串口1的实现原理 a.查看STC15F2K60S2数据手册: 串口一在590页&#xff0c;此款单片机有两个串口。 串口1相关寄存器&#xff1a; SCON:串行控制寄存器&#xff08;可位寻址&#xff09; SCON寄存器说明&#xff1a; 需要PCON寄存器的SMOD0/PCON.6为0&#xff0c;使SM0和SM…

redmi 12c 刷机

刷机历程 一个多月前网购了redmi 12c这款手机, 价格只有550,用来搞机再适合不过了, 拆快递后就开始倒腾,网上有人说需要等7天才能解锁,我绑定了账号过了几天又忍不住倒腾,最后发现这块手机不用等7天解锁成功了,开始我为了获取root权限, 刷入了很火的magisk,但是某一天仍然发现/…

五种创建k8s的configMap的方式及configmap使用

configmap介绍 Kubernetes 提供了 ConfigMap 来管理应用配置数据&#xff0c;将配置信息从容器镜像中解耦&#xff0c;使应用更灵活、可移植。 1、基于一个目录来创建ConfigMap ​ 你可以使用 kubectl create configmap 基于同一目录中的多个文件创建 ConfigMap。 当你基于目…

【机器学习chp7】SVM

参考1&#xff0c;笔记 SVM笔记.pdf 参考2&#xff1a;王木头视频 什么是SVM&#xff0c;如何理解软间隔&#xff1f;什么是合叶损失函数、铰链损失函数&#xff1f;SVM与感知机横向对比&#xff0c;挖掘机器学习本质_哔哩哔哩_bilibili 目录 一、SVM模型 二、构建决策函…

TailwindCss 总结

目录 一、简介 二、盒子模型相关 三、将样式类写到一个类里面apply 四、一款TailWind CSS的UI库 一、简介 官方文档&#xff1a;Width - TailwindCSS中文文档 | TailwindCSS中文网 Tailwind CSS 的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何 模板中的 CSS 类…

数据结构 (6)栈的应用举例

1. 递归调用 递归函数在执行时&#xff0c;会将每一层的函数调用信息&#xff08;包括局部变量、参数和返回地址&#xff09;存储在栈中。当递归函数返回时&#xff0c;这些信息会从栈中弹出&#xff0c;以便恢复之前的执行状态。栈的后进先出&#xff08;LIFO&#xff09;特性…

Qt界面篇:QMessageBox高级用法

1、演示效果 2、用法注意 2.1 设置图标 用于显示实际图标的pixmap取决于当前的GUI样式。也可以通过设置icon pixmap属性为图标设置自定义pixmap。 QMessageBox::Icon icon(

警钟长鸣,防微杜渐,遨游防爆手机如何护航安全生产?

近年来&#xff0c;携非防爆手机进入危险作业区引发爆炸的新闻屡见报端。2019年山西某化工公司火灾&#xff0c;2018年延安某煤业瓦斯爆炸&#xff0c;均因工人未用防爆手机产生静电打火引发。涉爆行业领域企业量大面广&#xff0c;相当一部分企业作业场所人员密集&#xff0c;…

【VRChat 全身动捕】VIVE 手柄改 tracker 定位器教程,低成本光学动捕解决方案(持续更新中2024.11.26)

更新 0.0.1&#xff08;2024/11/26&#xff09;&#xff1a; 1.解决了内建蓝牙无法识别、“steamVR 蓝牙不可用” 的解决方案 2.解决了 tracker 虽然建立了连接但是在 steamVR 界面上看不到的问题 3.解决了 VIVE 基站1.0 无法被蓝牙识别 && 无法被 steamVR 搜索到 &…

大数据面试SQL题-笔记02【查询、连接、聚合函数】

大数据面试SQL题复习思路一网打尽&#xff01;(文档见评论区)_哔哩哔哩_bilibiliHive SQL 大厂必考常用窗口函数及相关面试题 大数据面试SQL题-笔记01【运算符、条件查询、语法顺序、表连接】大数据面试SQL题-笔记02【查询、连接、聚合函数】​​​​​​​ 目录 01、查询 01…

Kubeadm 安装 Kubernetes 高可用集群 v1.30.0

1、修改主机名&#xff08;各个节点&#xff09; hostnamectl set-hostname xxx2、hosts 文件加入主机名&#xff08;全部节点&#xff09; cat /etc/hosts 192.168.88.5 master1 192.168.88.6 master2 192.168.88.7 master3 192.168.88.8 node13、关闭防火墙&#xff08;全部…

网上蛋糕售卖店管理系(Java+SpringBoot+MySQL)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装网上蛋糕售卖店管理系统软件来发挥其高效地信息处理的作用…

Ubuntu安装不同版本的opencv,并任意切换使用

参考&#xff1a; opencv笔记&#xff1a;ubuntu安装opencv以及多版本共存 | 高深远的博客 https://zhuanlan.zhihu.com/p/604658181 安装不同版本opencv及共存、切换并验证。_pkg-config opencv --modversion-CSDN博客 Ubuntu下多版本OpenCV共存和切换_ubuntu20如同时安装o…

自由学习记录(25)

只要有修改&#xff0c;子表就不用元表的参数了&#xff0c;用自己的参数&#xff08;只不过和元表里的那个同名&#xff09; 子表用__index“继承”了父表的值&#xff0c;此时子表仍然是空表 一定是创建这样一个同名的变量在原本空空的子表里&#xff0c; 传参要传具体的变…

1- 9 C 语言面向对象

面向对象的基本特性&#xff1a;封装&#xff0c;继承&#xff0c;多态 1.0 面向过程概念 当我们在编写程序时&#xff0c;通常采用以下步骤&#xff1a; 1. 将问题的解法分解成若干步骤 2. 使用函数分别实现这些步骤 3. 依次调用这些函数 这种编程风格的被称作 面向过程…

路面泥泞,坑洼,裂缝,路面损坏,马路牙检测 YOLO标记资源整理

数据集介绍 可识别常见的路面泥泞&#xff0c;坑洼&#xff0c;裂缝&#xff0c;路面损坏&#xff0c;马路牙等多种路面状况。 数据集分割 训练集89&#xff05; 2052图片 validation集8% 186图片 test集3% 78图片 预处理 自动定向&#xff1a; 已应用 自动调…

Jmeter中的测试片段和非测试原件

1&#xff09;测试片段 1--测试片段 功能特点 重用性&#xff1a;将常用的测试元素组合成一个测试片段&#xff0c;便于在多个线程组中重用。模块化&#xff1a;提高测试计划的模块化程度&#xff0c;使测试计划更易于管理和维护。灵活性&#xff1a;可以通过模块控制器灵活地…

Cocos编辑器

1、下载 下载地址&#xff1a;https://www.cocos.com/creator-download 2、编辑器界面介绍 官方链接&#xff1a;https://docs.cocos.com/creator/3.8/manual/zh/editor/ 3、项目结构 官方链接&#xff1a;https://docs.cocos.com/creator/3.8/manual/zh/getting-started/…

JAVA题目笔记(二十)Stream流综合练习+方法引用

一、数据过滤 import java.util.*; import java.util.stream.Collectors;public class Co {public static void main(String[] args) {List<Integer> listnew ArrayList<>();Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);List<Integer> newlist list.str…