css—轮播图实现

embedded/2024/11/27 9:29:03/

一、背景

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

二、思路解析

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

思路:

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

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

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

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

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

三、拆解分析阶段

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

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

<div class="wrap_out"></div>
css">.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>
css">  .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>
css">.wrap > li {width: 500px;height: 300px;background-color: #f90;}

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

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

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

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

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

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

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

css">@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);}}

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

css">.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部分

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.ppmy.cn/embedded/140860.html

相关文章

JS原型、原型链以及原型链污染学习

文章目录 前置知识对象**三个重要属性&#xff1a;__proto__、prototype、constructor**JS原型与原型链继承 原型链污染Merge类操作原型链污染Lodash模块原型链污染lodash.defaultsDeep方法造成原型链污染lodash.merge 方法造成的原型链污染lodash.mergeWith 方法造成的原型链污…

ARM(安谋) China处理器

0 Preface/Foreword 0.1 参考博客 Cortex-M23/M33与STAR-MC1星辰处理器 ARM China&#xff0c;2018年4月established&#xff0c;独立运行。 1 处理器类型 1.1 周易AIPU 1.2 STAR-MC1&#xff08;星辰处理器&#xff09; STAT-MC1&#xff0c;主要为满足AIOT应用性能、功…

【含开题报告+文档+PPT+源码】基于SpringBoot的个性化推荐在线小说阅读网管理系统设计与实现

开题报告 随着互联网技术的快速发展和智能设备的普及&#xff0c;人们的阅读习惯正逐渐从传统的纸质书籍转向电子书籍。在线阅读以其便捷性、实时性和丰富性受到了广大读者的青睐。然而&#xff0c;现有的在线阅读平台在用户体验、资源管理和个性化推荐等方面仍存在一定的不足…

VITE+VUE3+TS环境搭建

前言&#xff08;与搭建项目无关&#xff09;&#xff1a; 可以安装一个node管理工具&#xff0c;比如nvm&#xff0c;这样可以顺畅的切换vue2和vue3项目&#xff0c;以免出现项目跑不起来的窘境。我使用的nvm&#xff0c;当前node 22.11.0 目录 搭建项目 添加状态管理库&…

CentOS 上安装各种应用的命令行总结

在 CentOS 上安装各种应用的命令行方法可以通过不同的软件包管理工具完成&#xff0c;最常用的是 yum&#xff08;CentOS 7及以前版本&#xff09;和 dnf&#xff08;CentOS 8及以上版本&#xff09;。以下是一些常见应用的安装命令总结。 目录 1. 基本的包管理命令 2. 安装…

Python毕业设计选题:基于django+vue的期货交易模拟系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页 期货信息 个人中心 管理员登录界面 管理员功能界面 用户管理 期货公司管理…

【消息序列】详解(7):剖析回环模式--设备测试的核心利器

目录 一、概述 1.1. 本地回环模式 1.2. 远程环回模式 二、本地回环模式&#xff08;Local Loopback mode&#xff09; 2.1. 步骤 1&#xff1a;主机进入本地环回模式 2.2. 本地回环测试 2.2.1. 步骤 2a&#xff1a;主机发送HCI数据包并接收环回数据 2.2.2. 步骤 2b&…

AIGC--AIGC与人机协作:新的创作模式

AIGC与人机协作&#xff1a;新的创作模式 引言 人工智能生成内容&#xff08;AIGC&#xff09;正在以惊人的速度渗透到创作的各个领域。从生成文本、音乐、到图像和视频&#xff0c;AIGC使得创作过程变得更加快捷和高效。然而&#xff0c;AIGC并非完全取代了人类的创作角色&am…