个人练习:使用HTML+CSS3制作图片轮播功能(不使用JavaScript)

先上效果图,不要在意用来当素材的图片:

在搜索相关资料的时候,查到有两种实现方式:一是使用JavaScript,二是使用CSS3中的Animation(动画),这里使用的是CSS3中的Animation实现的图片轮播功能。

首先我们要理解这个图片轮播的结构,我一早上都因为没有理解结构在那里浪费时间,中午睡了一觉起来思路就通了,就。。。做出来了┑( ̄Д  ̄)┍

其实就和老式电影放映机差不多原理,要显示的内容就是胶片上的一张张照片,并排排列:

 

轮播起来就像播放老式电影一样,胶片移动,显示区域会显示想要显示的那张照片:

我理解的轮播的原理就到这里为止了,接下来是实战部分。

注:因为会出现一层套一层的创建区域,代码部分如果有在某个区域内创建第二个区域的话,新创建的区域的代码部分会加粗显示。

 先创建一个最外层的<div>作为轮播区域的容器,id=homepage:

HTML:
1
<body> 2 <!-- 里面有一个轮播区域 --> 3 <div id="homepage"> 4 </div> 5 <!-- #里面有一个轮播区域 end --> 6 </body>

之后我们的轮播区域都创建在这个id=homepage的<div>中了。这里稍微设置一下它的样式,这个不一定要跟我一样,我这样设置只是我自己看的舒服:

CSS:
1
/* 去除div区域与浏览器之间的边界 */ 2 body{ 3 margin:0px; 4 padding:0px; 5 } 6 7 /* 最外层的div区域,里面有一个轮播区域 */ 8 #homepage { 9 width:100%; 10 height:500px; 11 background-color:#E8E8FF; 12 }

就一片灰我就不截效果了。

在这个区域内再创建一个<div>区域,class=carousel。这个<div>相当于老式电影放映机的镜头显示区域):

HTML:
1
<!-- 里面有一个轮播区域 --> 2 <div id="homepage"> 3 <!-- 轮播区域 --> 4 <div class="carousel"> 5 </div> 6 <!-- #轮播区域 end --> 7 </div> 8 <!-- #里面有一个轮播区域 end -->

设置CSS样式让它居中在页面中显示:

CSS:
1
/* 轮播区域 */ 2 .carousel { 3 /* 设置显示区域的宽度和高度 */ 4 width:600px; 5 height:300px; 6 /* 隐藏溢出的内容 7 overflow:hidden; */ 8 9 /* 居中显示这个div区域 */ 10 position:relative; 11 top:50%; 12 left:50%; 13 transform:translate(-50%,-50%); 14 15 background-color:black; /* 完成轮播时删除 */ 16 }

镜头(显示区域)的大小和胶片上的照片(轮播的内容)的大小是一致的。这里的overflow先注释,先不用,等会看到胶片(轮播内容的集合)的效果后再启用。此时页面是这样的:

 接下来我们在镜头(显示区域)中创建胶片(显示内容的集合),class=carousel-set。

注意:这个<div>并不是直接放内容的,它跟一个空白胶片一样,轮播的内容就是照片,要拍摄后才有内容(也即是说我们还要在“胶片”中创建<div>区域)。

HTML:
1
<!-- 里面有一个轮播区域 --> 2 <div id="homepage"> 3 <!-- 轮播区域 --> 4 <div class="carousel"> 5 <!-- 轮播内容的集合 --> 6 <div class="carousel-set"> 7 </div> 8 <!-- #轮播内容的集合 end --> 9 </div> 10 <!-- #轮播区域 end --> 11 </div> 12 <!-- #里面有一个轮播区域 end -->

然后设置一下CSS的样式,假设我们要显示四张照片,那我们就给它预留五张照片的位置(宽度),第五张和第一张相同,要给人一种无缝循环的感觉:

CSS:
1
/* 轮播内容的集合 */ 2 .carousel-set { 3 width:3000px; /* 设置宽度为轮播内容宽度的总和 */ 4 height:300px; /* 轮播内容的高度 */ 5 6 background-color:blue; /* 完成轮播时删除 */ 7 }

此时的效果如下:

因为宽度太长了,甚至超出了浏览器的范围。这个不用担心,我们之前在镜头(显示区域)的样式中有设置了overflow,只是暂时注释掉了而已,后面胶片(显示内容的集合)效果出来后我们再启用overflow。

胶片(显示内容的集合)准备好了,接下来就是胶片上的内容,也就是照片(显示内容)啦。

在胶片(显示内容的集合)中,创建我们的照片(显示内容)的<div>。可能会有人问(不,不会有人问的的):为啥是一个<div>不直接上<img>呢?你想想,我们用<div>,那我们可不止能显示照片,我们还能显示文字,或者放个超链接等等,可以扩展嘛。我们准备显示四张照片,那我们就创建五张照片的位置(<div>区域),第五张和第一张相同,要给人一种无缝循环的感觉:

HTML:
1
<!-- 里面有一个轮播区域 --> 2 <div id="homepage"> 3 <!-- 轮播区域 --> 4 <div class="carousel"> 5 <!-- 轮播内容的集合 --> 6 <div class="carousel-set"> 7 <!-- 轮播的内容 --> 8 <div class="carousel-content"> 9 <img src="image/1.png" alt="非著名调查员:苍穹之章" /> 10 </div> 11 <div class="carousel-content"> 12 <img src="image/2.png" alt="非著名调查员:苍穹之章" /> 13 </div> 14 <div class="carousel-content"> 15 <img src="image/3.png" alt="非著名调查员:苍穹之章" /> 16 </div> 17 <div class="carousel-content"> 18 <img src="image/4.png" alt="非著名调查员:苍穹之章" /> 19 </div> 20 <div class="carousel-content"> 21 <img src="image/1.png" alt="非著名调查员:苍穹之章" /> 22 </div> 23 <!-- #轮播的内容 end --> 24 </div> 25 <!-- #轮播内容的集合 end --> 26 </div> 27 <!-- #轮播区域 end --> 28 </div> 29 <!-- #里面有一个轮播区域 end -->

这里顺便将要轮播的图片加上去了,因为纯色。。。不太好分辨内容间的间隔(虽然的素材黑边本来就不好分别,不要在意这些细节)然后设置一下CSS样式,让胶片(轮播内容的集合)成型:

CSS:
1
/* 轮播的内容 */ 2 .carousel-content { 3 width:600px; 4 height:300px; 5 float:left; /* 设置左浮动,让轮播内容排成一行 */ 6 } 7 8 /* 轮播的内容中的<img>标签 */ 9 .carousel-content>img{ 10 width:100%; 11 height:100%; 12 }

此时的运行效果如下:

是不是就有种胶片(内容的集合)的感觉啦,接下来我们尝试让这个胶片(内容的集合)移动。接下来就到这边文章的主角——CSS3中的Animation出场了!

Animation这里就不做过多介绍,毕竟这个笔记是介绍实现轮播功能,不是介绍Animation的。接下来步骤不理解的话建议去看一下Animation的一些资料。

我们先创建CSS3的@keyframes规则,这个规则和关键帧很像,比如一个动画,在播放到50%的时候是一个关键帧,播放到100%的时候是一个关键帧,关键帧之间有补帧,让动画看起来更加流畅。

CSS:
1
/* keyframes规则 */ 2 @keyframes playMovie { 3 0% {margin-left:0px;} 4 10% {margin-left:0px;} 5 20% {margin-left:-600px;} 6 40% {margin-left:-600px;} 7 50% {margin-left:-1200px;} 8 70% {margin-left:-1200px;} 9 80% {margin-left:-1800px;} 10 90% {margin-left:-1800px;} 11 100% {margin-left:-2400px;} 12 }

这里采用的是修改胶片(显示内容的集合)的左侧外边距的方式来移动胶片(显示内容的集合)。接下来我们在胶片的CSS样式表中应用这个动画规则:

CSS:
1
/* 轮播内容的集合 */ 2 .carousel-set { 3 /* 应用动画 */ 4 animation:playMovie 15s linear infinite; 5 }

此时运行效果已经很接近了:

 再把镜头(显示区域)中的overflow:hidden;启用,就能实现我们想要的效果了:

 实例下载:

链接:https://pan.baidu.com/s/1wK2HmVbxC2ru2K78-xQECg
提取码:1pz0


复制这段内容后打开百度网盘手机App,操作更方便哦

不知道为什么百度云今天创不了不用提取码的分享,只能分享个需要提取码的链接了,等啥时候能创建不需要提取码连接的时候我在换掉吧_(:з」∠)_


参考资料:

菜鸟教程 - CSS3动画:http://www.runoob.com/css3/css3-animations.html

JQuery插件库 - 纯CSS3图片轮播效果:http://www.jq22.com/jquery-info11736 

猜你喜欢

转载自www.cnblogs.com/cwsb/p/10713454.html