纯CSS实现轮播图
效果
解析
DOM结构
<div class="slider">
<ul class="slider-container">
<li class="image-container"><img src="./images/1.webp" /></li>
<li class="image-container"><img src="./images/2.webp" /></li>
<li class="image-container"><img src="./images/3.webp" /></li>
<li class="image-container"><img src="./images/4.webp" /></li>
</ul>
</div>
CSS
tip
每轮动画时间是10s
。
每张图片的动画位置不动时,占总动画时长的20%,所以停留的时长是:10s x 20% = 2s
。
切换图片时,占总动画时长的5%,所以切换的时长是:10s x 5% = 0.5s
。
/* 每张轮播图定宽高 */
img{ width: 600px; height:230px;}
/* 定可视窗口大小 */
.slider{
width: 600px;
height: 230px;
overflow: hidden;
position: relative;
}
/* 图片容器定宽,刚好一行过,可以装下所有图片 */
.slider-container{
width: 400%; /* 4张图,所以是400% */
height: 100%;
position: absolute;
top: 0;
left:0;
transform: translateX(0);
animation: slider-image 10s linear infinite; /* 定动画切换效果 */
}
.image-container{
float: left;
}
@keyframes slider-image{
0%{
transform: translateX(0);
}
20%{
transform: translateX(0);
}
25%{
transform: translateX(-25%);
}
45%{
transform: translateX(-25%);
}
50%{
transform: translateX(-50%);
}
70%{
transform: translateX(-50%);
}
75%{
transform: translateX(-75%);
}
95%{
transform: translateX(-75%);
}
100%{
transform: translateX(0);
}
}
附源码
<!DOCTYPE html>
<head>
<title>css轮播动画</title>
<style>
ul, li{ margin:0; padding:0; }
li::marker{display:none;}
img{ width: 600px; height:230px;}
.slider{
width: 600px;
height: 230px;
overflow: hidden;
position: relative;
}
.slider-container{
width: 400%;
height: 100%;
position: absolute;
top: 0;
left:0;
transform: translateX(0);
animation: slider-image 10s linear infinite;
}
.image-container{
float: left; /* 图片统一左浮动,才能一张接到下一张 */
}
@keyframes slider-image{
0%{
transform: translateX(0);
}
20%{
transform: translateX(0);
}
25%{
transform: translateX(-25%);
}
45%{
transform: translateX(-25%);
}
50%{
transform: translateX(-50%);
}
70%{
transform: translateX(-50%);
}
75%{
transform: translateX(-75%);
}
95%{
transform: translateX(-75%);
}
100%{
transform: translateX(0);
}
}
</style>
</head>
<body>
<div class="slider">
<ul class="slider-container">
<li class="image-container"><img src="./images/1.webp" /></li>
<li class="image-container"><img src="./images/2.webp" /></li>
<li class="image-container"><img src="./images/3.webp" /></li>
<li class="image-container"><img src="./images/4.webp" /></li>
</ul>
</div>
</body>
</html>