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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

HTML:
1 <!-- 里面有一个轮播区域 -->
<div id="homepage">
<!-- 轮播区域 -->
<div class="carousel">
</div>
<!-- #轮播区域 end -->

</div>
<!-- #里面有一个轮播区域 end -->

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

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

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

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

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

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

HTML:
1 <!-- 里面有一个轮播区域 -->
<div id="homepage">
<!-- 轮播区域 -->
<div class="carousel">
<!-- 轮播内容的集合 -->
<div class="carousel-set">
</div>
<!-- #轮播内容的集合 end -->

</div>
<!-- #轮播区域 end -->
</div>
<!-- #里面有一个轮播区域 end -->

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

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

此时的效果如下:

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

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

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

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

HTML:
1 <!-- 里面有一个轮播区域 -->
<div id="homepage">
<!-- 轮播区域 -->
<div class="carousel">
<!-- 轮播内容的集合 -->
<div class="carousel-set">
<!-- 轮播的内容 -->
<div class="carousel-content">
<img src="data:image/1.png" alt="非著名调查员:苍穹之章" />
</div>
<div class="carousel-content">
<img src="data:image/2.png" alt="非著名调查员:苍穹之章" />
</div>
<div class="carousel-content">
<img src="data:image/3.png" alt="非著名调查员:苍穹之章" />
</div>
<div class="carousel-content">
<img src="data:image/4.png" alt="非著名调查员:苍穹之章" />
</div>
<div class="carousel-content">
<img src="data:image/1.png" alt="非著名调查员:苍穹之章" />
</div>
<!-- #轮播的内容 end -->

</div>
<!-- #轮播内容的集合 end -->
</div>
<!-- #轮播区域 end -->
</div>
<!-- #里面有一个轮播区域 end -->

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

CSS:
1 /* 轮播的内容 */
.carousel-content {
width:600px;
height:300px;
float:left; /* 设置左浮动,让轮播内容排成一行 */
} /* 轮播的内容中的<img>标签 */
.carousel-content>img{
width:100%;
height:100%;
}

此时的运行效果如下:

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

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

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

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

CSS:
1 /* keyframes规则 */
@keyframes playMovie {
0% {margin-left:0px;}
10% {margin-left:0px;}
20% {margin-left:-600px;}
40% {margin-left:-600px;}
50% {margin-left:-1200px;}
70% {margin-left:-1200px;}
80% {margin-left:-1800px;}
90% {margin-left:-1800px;}
100% {margin-left:-2400px;}
}

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

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

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

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

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

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

实例下载:

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

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

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

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


参考资料:

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

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

上一篇:纯CSS3代码实现简单的图片轮播


下一篇:浅谈我的编程之路——感谢引领我的leader