纯css3实现的轮播图
前言
纯css3实现的轮播图效果,和JavaScript控制的相比,简单高效了很多,但是功能也更加单一,只有轮播不能手动切换。
用什么实现的呢?页面布局 + animation动画
HTML部分
<div class="container">
<div class="title-container">
<h1>纯CSS3轮播图</h1>
</div>
<div class="slide-box">
<ul>
<li class="slide-item slide1">
<a href="#">
<img src="images/img-1.jpg" alt="">
<div class="tooltip">
生活
</div>
</a>
</li>
<li class="slide-item slide2">
<a href="#">
<img src="images/img-2.jpg" alt="">
<div class="tooltip">
热情
</div>
</a>
</li>
<li class="slide-item slide3">
<a href="#">
<img src="images/img-3.jpg" alt="">
<div class="tooltip">
乐观
</div>
</a>
</li>
<li class="slide-item slide4">
<a href="#">
<img src="images/img-4.jpg" alt="">
<div class="tooltip">
美好
</div>
</a>
</li>
<li class="slide-item slide5">
<a href="#">
<img src="images/img-5.jpg" alt="">
<div class="tooltip">
意义
</div>
</a>
</li>
</ul>
<div class="progress">
</div>
</div>
</div>
</body>
View Code
html部分也还是那些东西,容器+多张轮播图子项
布局部分
/*reset*/
html,body,div,ul,li,img,h1,a{
margin: 0;
padding: 0;
}
ul{
list-style: none;
}
/*slide style*/
html,body{
width: 100%;
height: 100%;
}
body{
background: url('./../images/bg.png') repeat;
}
.container{
width: 1000px;
height: 100%;
margin: 0 auto;
}
.container .title-container{
width: 800px;
height: 100px;
line-height: 100px;
margin: 20px auto;
text-align: center;
}
.slide-box{
position: relative;
width: 800px;
height: 533px;
margin: 0 auto;
border:5px solid #eaeaea;
-webkit-box-shadow:1px 1px 5px rgba(0,0,0,0.7);
box-shadow:1px 1px 5px rgba(0,0,0,0.7);
}
.slide-box ul{
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
}
.slide-box ul li{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
cursor: pointer;
}
.slide-box ul li .tooltip{
position: absolute;
left: 50px;
top: -40px;
height: 40px;
width: 100px;
text-align: center;
background-color: rgba(0,0,0,0.7);
color: #fff;
line-height: 40px;
-webkit-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
.slide-box ul li:hover .tooltip{
top: 2px;
z-index: 2;
}
View Code
1、容器溢出隐藏
2、轮播子项绝对定位
轮播动画部分
这部分才是本文的重点。
用纯css3实现轮播,肯定要无限循环使用animation动画,而且需要单独控制每个子项的动画效果,而其整体效果是完美的轮播效果。
子项使用的是绝对定位,需实现的轮播效果是从左至右,所以可以控制left的值达到展示和隐藏(定位到容器之外即隐藏)及滑动效果。先实现第一个子项
.slide-box ul li.slide1{
-webkit-animation: slide1 25s linear infinite;
animation: slide1 25s linear infinite;
}
@-webkit-keyframes slide1 {
0% {
left: 0;
opacity: 1;
}
16% {
left: 0;
opacity: 1;
}
20% {
left: 800px;
opacity: 0;
z-index: 0;
}
21% {
left: -800px;
opacity: 0;
z-index: 0;
}
95% {
left: -800px;
opacity: 0;
z-index: 1;
}
96% {
left: -800px;
opacity: 0;
z-index: 1;
}
100% {
left: 0;
opacity: 1;
z-index: 1;
}
}
设计轮播周期为25s,所以每个子项有5s的展示和移动时间。子项一的动画效果:0-4s展示,4-5s向右方滑动至容器外隐藏,之后迅速滑倒容器左边外隐藏(此时修改了z-index,所以不会影响到正在展示的子项),剩下的时间就是在左边等待下次滑动及展示了。第二个子项的动画效果需与第一个子项契合,特别在时间上,这样整体的效果才会好。如下:
.slide-box ul li.slide2{
-webkit-animation: slide2 25s linear infinite;
animation: slide2 25s linear infinite;
}
@-webkit-keyframes slide2 {
0% {
left: -800px;
opacity: 0;
z-index: 0;
}
16% {
left: -800px;
opacity: 0;
z-index: 1;
}
20% {
left: 0;
opacity: 1;
z-index: 1;
}
36% {
left: 0;
opacity: 1;
z-index: 1;
}
40% {
left: 800px;
opacity: 0;
z-index: 0;
}
41% {
left: -800px;
opacity: 0;
z-index: 0;
}
100% {
left: -800px;
opacity: 0;
z-index: 0;
}
}
第二个子项 1-4s在容器左边外等待,4-5s向右滑出展示(此时第一个子项向左滑出隐藏),5-9s展示 9-10s向左滑出隐藏。
同理剩下的子项,依次顺延调整好动画,整体的效果就会非常流畅。
进度条动画
因展示时间较长4s,所以可以加入进度条,交互体验会更加好。HTML中的div.progress即是进度条的结构。样式如下:
.slide-box .progress{
position: absolute;
bottom: 0;
left: 0;
height: 5px;
width: 0;
background-color: rgba(0,0,0,0.7);
-webkit-animation: progress 5s linear infinite;
animation: progress 5s linear infinite;
z-index: 2;
}
@-webkit-keyframes progress {
0%{
width: 0;
}
80%{
width: 100%;
}
81%{
width: 0;
}
100%{
width: 0;
}
}
通过控制宽度来标识进度。
hover 暂停动画
若需要鼠标悬停时暂停动画,使用 animation-play-state: paused 控制即可
.slide-box:hover ul li,
.slide-box:hover .progress
{
-webkit-animation-play-state: paused;
animation-play-state: paused;
}
结语
虽然功能简单,但是纯css3实现的效率还是很高的,效果也不错