在Web开发中,首页中经常会使用轮播图展示内容,但是实现方法各不相同,根据所学内容进行整理。
一、纯CSS实现
用纯CSS实现有一个需要注意的地方就是如何通过@keyframes来设置达到轮播的效果。
(一)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>轮播</title>
<link rel="stylesheet" type="text/css" href="css/lunbo.css"/>
</head>
<body>
<div id="container">
<div id="photo">
<img src="./image/lb1.jpg" />
<img src="./image/lb2.jpg" />
<img src="./image/lb3.jpg" />
</div>
</div>
</body>
</html>
#container {
width: 601px;
height: 338px;
overflow: hidden;
}
#photo {
width: 1803px;
animation: switch 10s ease-in-out infinite;
}
#photo > img {
float: left;
width: 601px;
height: 338px;
}
@keyframes switch {
0%, 28% {
margin-left: 0;
}
33%, 61% {
margin-left: -601px;
}
66%, 100% {
margin-left: -1202px;
}
}
(二)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>轮播1</title>
<link rel="stylesheet" type="text/css" href="css/lunbo1.css"/>
</head>
<body>
<div id="container">
<div id="box"><img src="image/lb1.jpg" ></div>
<div id="box"><img src="image/lb2.jpg" ></div>
<div id="box"><img src="image/lb3.jpg" ></div>
</div>
</body>
</html>
body{
display: flex;
justify-content: center;
/* 主轴居中 */
align-items: center;
/* 交叉轴局中 */
padding-top: 100px;
}
#container{
position: relative;
width: 601px;
height: 338px;
/* background-color: #C7CFC6; */
overflow: hidden;
}
#box{
position: absolute;
width: 100%;
height: 100%;
justify-content: center;
align-items: center;
animation: box 5s ease-out infinite;
}
#box>img{
width: 601px;
height: 338px;
}
@keyframes box{
0%{transform:translateX(0%) ;}
30%{transform:translateX(-100%) ;}
60%{transform:translateX(-200%) ;}
100%{transform:translateX(-300%) ;}
}
#box:nth-child(1){
left: 100%;
}
#box:nth-child(2){
left: 200%;
}
#box:nth-child(3){
left: 300%;
}
(三)
------------------------------------------------推荐使用-------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="./css/lunbo2.css">
</head>
<body>
<div id="carousel-box">
<!-- 表示图片顺序的索引 -->
<a id="a1" class="num">1</a>
<a id="a2" class="num">2</a>
<a id="a3" class="num">3</a>
<a id="a4" class="num">4</a>
<a id="a5" class="num">5</a>
<!-- 设定为五张图片 -->
<div id="carousel-item">
<img src="./image/lb1.jpg" alt="">
<img src="./image/lb2.jpg" alt="">
<img src="./image/lb3.jpg" alt="">
<img src="./image/lb1.jpg" alt="">
<img src="./image/lb2.jpg" alt="">
<!-- 五张图片的标题 -->
<ul id="showTag">
<li>图片一</li>
<li>图片二</li>
<li>图片三</li>
<li>图片四</li>
<li>图片五</li>
</ul>
</div>
</div>
</body>
</html>
* {
margin: 0;
padding: 0;
}
#carousel-box {
position: relative;
width: 601px;
height: 338px;
border-radius: 5px;
margin: 0 auto;
overflow: hidden;
}
#carousel-item {
position: absolute;
width: calc(601px * 5);
}
/* 将轮播器中的每张图片平铺开来形成一张图片 */
#carousel-item img {
float: left;
width: 601px;
height: 338px;
}
#showTag {
position: absolute;
/* 调整标题项的垂直位置 */
top: 10px;
opacity: 0.5;
}
#showTag li {
/* 根据图片宽度来设定标题宽度,并让标题平铺以放置在对应的轮播图片中 */
width: 200px;
height: 30px;
line-height: 30px;
margin: 0 200px;
float: left;
text-align: center;
color: #fff;
border-radius: 15px;
background: #000;
}
/* 设定图片索引位置 */
.num {
width: 20px;
height: 20px;
color: #666;
text-align: center;
line-height: 20px;
cursor: pointer;
background: #fff;
border-radius: 50%;
position: absolute;
z-index: 10;
bottom: 10px;
right: 10px;
display: block;
opacity: 0.6;
font-size: 12px;
}
/* 调整索引位置 */
.num:nth-child(4) {
margin-right: 30px;
}
.num:nth-child(3) {
margin-right: 60px;
}
.num:nth-child(2) {
margin-right: 90px;
}
.num:nth-child(1) {
margin-right: 120px;
}
/* 初试轮播动画 */
@keyframes initAnimation {
/* 0-4s */
0%, 20% {
margin-left: 0px;
}
/* 4-8s */
25%, 40% {
margin-left: -601px;
}
/* 8-12s */
45%, 60% {
margin-left: -1202px;
}
/* 12-16s */
65%, 80% {
margin-left: -1803px;
}
/* 16-20s */
85%, 100% {
margin-left: -2404px;
}
}
/* 动画部署 */
#carousel-item {
animation: initAnimation 20s ease-out infinite;
}
/* 索引悬浮高亮效果 */
.num:hover {
color: #fff;
cursor: pointer;
background:rgba(61,61,61,0.5)
}
/* 轮播悬浮暂停效果 */
#carousel-item:hover, .num:hover {
animation-play-state: paused;
}
/* 索引悬浮触发动画 */
@keyframes Anim1 {
100% {
margin-left: 0;
}
}
@keyframes Anim2 {
100% {
margin-left: -601px;
}
}
@keyframes Anim3 {
100% {
margin-left: -1202px;
}
}
@keyframes Anim4 {
100% {
margin-left: -1803px;
}
}
@keyframes Anim5 {
100% {
margin-left: -2404px;
}
}
/* 索引触发轮播效果 */
#a1:hover ~ #carousel-item {
animation: Anim1 1s ease-out forwards;
}
#a2:hover ~ #carousel-item {
animation: Anim2 1s ease-out forwards;
}
#a3:hover ~ #carousel-item {
animation: Anim3 1s ease-out forwards;
}
#a4:hover ~ #carousel-item {
animation: Anim4 1s ease-out forwards;
}
#a5:hover ~ #carousel-item {
animation: Anim5 1s ease-out forwards;
}
(四)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Carousel</title>
</head>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
padding-top: 100px
}
.carousel-wrap {
position: relative;
width: 400px;
height: 200px;
background-color: antiquewhite;
overflow: hidden;
}
.box {
position: absolute;
width: 100%;
height: 100%;
background-color: blueviolet;
animation: box 20s infinite ease-out;
display: flex;
justify-content: center;
align-items: center
}
@keyframes box {
0% {
transform: translateX(0%);
}
10%,
20% {
transform: translateX(-100%);
}
30%,
40% {
transform: translateX(-200%);
}
50%,
60% {
transform: translateX(-300%);
}
70%,
80% {
transform: translateX(-400%);
}
90%,
100% {
transform: translateX(-500%);
}
}
.box:nth-child(1) {
background-color: violet;
left: 100%
}
.box:nth-child(2) {
background-color: aqua;
left: 200%
}
.box:nth-child(3) {
background-color: turquoise;
left: 300%
}
.box:nth-child(4) {
background-color: tomato;
left: 400%;
}
.box:nth-child(5) {
background-color: chartreuse;
left: 500%
}
</style>
<body>
<div class="carousel-wrap">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="box">5</div>
</div>
</body>
</html>
(五)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
background: silver;
}
/*初始化页面*/
.CarouselBox {
width: 601px;
height: 338px;
margin: 100px auto;
overflow: hidden;
}
/*设置放置轮播图的盒子*/
li {
width: 601px;
height: 338px;
float: left;
list-style: none;
}
/*对放置图片的li进行设置*/
/*设置动画的主要属性*/
ul {
width: 3606px;
height: 338px;
animation: myani 10s ease-in-out infinite;
}
/* 对动画的关键帧进行设置*/
@keyframes myani {
0% {
margin-left: 0px;
}
20% {
margin-left: -601px;
}
40% {
margin-left: -1202px;
}
60% {
margin-left: -1803px;
}
80% {
margin-left: -2404px;
}
100% {
margin-left: -3005px;
}
}
</style>
</head>
<body>
<div class="CarouselBox">
<ul>
<li>
<a href="##"><img src="./image/lb1.jpg" width="601" height="338"></a>
</li>
<li>
<a href="##"><img src="./image/lb2.jpg" width="601" height="338"></a>
</li>
<li>
<a href="##"><img src="./image/lb3.jpg" width="601" height="338"></a>
</li>
<li>
<a href="##"><img src="./image/lb1.jpg" width="601" height="338"></a>
</li>
<li>
<a href="##"><img src="./image/lb2.jpg" width="601" height="338"></a>
</li>
<li>
<a href="##"><img src="./image/lb3.jpg" width="601" height="338"></a>
</li>
</ul>
</div>
</body>
</html>
(六)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>纯css3实现轮播</title>
<link rel="stylesheet" href="./css/lunbo6.css">
</head>
<body>
<section class="slider-container">
<!-- 轮播器 -->
<ul class="slider">
<li class="slider-item slider-item1"></li>
<li class="slider-item slider-item2"></li>
<li class="slider-item slider-item3"></li>
<li class="slider-item slider-item4"></li>
<li class="slider-item slider-item5"></li>
</ul>
<!-- 轮播焦点 -->
<div class="focus-container">
<ul class="floatfix">
<li>
<div class="focus-item focus-item1"></div>
</li>
<li>
<div class="focus-item focus-item2"></div>
</li>
<li>
<div class="focus-item focus-item3"></div>
</li>
<li>
<div class="focus-item focus-item4"></div>
</li>
<li>
<div class="focus-item focus-item5"></div>
</li>
</ul>
</div>
</section>
</body>
</html>
* {
margin: 0;
padding: 0;
}
ul,
li {
list-style: none;
}
.slider-container {
width: 50%;
position: relative;
margin: 0 auto;
}
.slider,
.slider-item {
padding-bottom: 40%;
}
.slider-item {
position: absolute;
/* 父辈.slider默认继承了.slide-container的宽度 */
width: 100%;
/* 相当于background-size: 100% auto */
background-size: 100%;
animation: fade 20s linear;
animation-iteration-count: infinite;
}
/* 设置背景图片 */
.slider-item1 {
background-image: url(../image/lb1.jpg);
}
.slider-item2 {
background-image: url(../image/lb2.jpg);
}
.slider-item3 {
background-image: url(../image/lb3.jpg);
}
.slider-item4 {
background-image: url(../image/lb2.jpg);
}
.slider-item5 {
background-image: url(../image/lb3.jpg);
}
/* 设置动画 */
@keyframes fade {
0% {
opacity: 0;
}
5% {
opacity: 1;
}
/* 15% {
opacity: 1;
}
35% {
opacity: 0;
} */
100% {
opacity: 0;
}
}
.slider-item {
opacity: 0;
}
.slider-item1 {
animation-delay: -1s;
}
.slider-item2 {
animation-delay: 3s;
}
.slider-item3 {
animation-delay: 7s;
}
.slider-item4 {
animation-delay: 11s;
}
.slider-item5 {
animation-delay: 15s;
}
.focus-container {
position: absolute;
bottom: 2%;
z-index: 7;
left: 50%;
margin-left: -45px;
}
.focus-container li {
width: 10px;
height: 10px;
border-radius: 50%;
float: left;
margin-right: 10px;
background: #fff;
}
.focus-item {
width: 100%;
height: 100%;
position: relative;
opacity: 0;
background: #51B1D9;
border-radius: inherit;
animation-duration: 20s;
animation-timing-function: linear;
animation-name: fade;
animation-iteration-count: infinite;
}
.focus-item1 {
animation-delay: -1s;
}
.focus-item2 {
animation-delay: 3s;
}
.focus-item3 {
animation-delay: 7s;
}
.focus-item4 {
animation-delay: 11s;
}
.focus-item5 {
animation-delay: 15s;
}
二、JS(JQuery)实现
js(jquery)实现轮播图主要是通过定时器来实现,通过添加指定类让图片展示。
(一)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>轮播图</title>
</head>
<body>
<!--
分析:
1.展示图片
2.定义一个方法,修改图片对象的src方法
3.定义一个定时器,每隔几秒调用一次方法
-->
<!--第一步-->
<img id = "img1" src="img/banner_1.jpg" alt="" width = "100%">
<!--第二步-->
<script>
var num = 1;
function fun() {
num++;
if(num>2){
num = 1;
}
var img = document.getElementById("img1");
img.src = "img/banner_"+num+".jpg";
}
// 设置循环
setInterval(fun,3000);
</script>
</body>
</html>
(二)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img id = "img1" src="img/banner_1.jpg" alt="" width = "100%">
<script>
var num = 0;
function fun() {
var namelist = ["img/banner_1.jpg","img/banner_2.jpg"];
num++;
if(num>1){
num = 0;
}
var img = document.getElementById("img1");
img.src = namelist[num];
}
// 设置循环
setInterval(fun,1000);
</script>
</body>
</html>
(三)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="css/lunbotest1.css"/>
</head>
<body>
<div class="CarouselBox">
<ul>
<li class="one">
<img src="./image/lb1.jpg" >
</li>
<li>
<img src="./image/lb2.jpg" >
</li>
<li>
<img src="./image/lb3.jpg" >
</li>
</ul>
<span id="left">
<
</span>
<span id="right">
>
</span>
<ol class="dots">
<li class="active"></li>
<li></li>
<li></li>
</ol>
</div>
<script src="js/jquery-3.4.1.min.js"></script>
<script>
var banner = $('.CarouselBox');
var ul_li = $('.CarouselBox>ul>li');
var left = $('.CarouselBox>#left');
var right = $('.CarouselBox>#right');
var dot = $('.CarouselBox>.dots>li');
var timer = null;
var num = 0;
function autoplay(){
timer = setInterval(function(){
num++;
num = num % ul_li.length;
ul_li.eq(num).stop().fadeIn(500).siblings().fadeOut(1000);
dot.eq(num).addClass('active').siblings().removeClass('active');
},3000)
}
autoplay();
banner.hover(function(){
clearInterval(timer);
},function(){
autoplay()
});
left.click(function(){
num--;
num = num % ul_li.length;
ul_li.eq(num).stop().fadeIn(200).siblings().fadeOut(500);
dot.eq(num).addClass('active').siblings().removeClass('active');
});
right.click(function(){
num++;
num = num % ul_li.length;
ul_li.eq(num).stop().fadeIn(200).siblings().fadeOut(500);
dot.eq(num).addClass('active').siblings().removeClass('active');
});
</script>
</body>
</html>
*{
margin: 0;
padding:0;
}
body{
background: url(../image/bk1.jpg);
background-size: cover;
}
.CarouselBox{
width: calc(1202px*0.7);
height: calc(676px*0.7);
margin: 80px auto;
/* border: 10px solid red; */
box-shadow: 0 5px -10px rgba(0,0,0,0.5);
position: relative;
}
.CarouselBox>ul{
width: 100%;
height: 100%;
}
.CarouselBox>ul>li>img:hover{
cursor: pointer;
}
.CarouselBox>span{
font-size: 40px;
/* font-family: "_宋体_"; */
width: 50px;
height: 80px;
background-color: rgba(0,0,0,0.5);
text-align: center;
line-height: 80px;
color: #FFFFFF;
position: absolute;
left: 0; top: 50%;
cursor: pointer;
transform: translateY(-50%);
}
.CarouselBox #right{
left: auto;
right: 0;
}
.CarouselBox>ul>li{
list-style-type: none;
position: absolute;
top: 0;
left: 0;
display: none;
}
.CarouselBox>ul>li.one{
display: block;
}
.CarouselBox>ul>li>img{
width: calc(1202px*0.7);
}
.dots{
position: absolute;
left: 50%;
bottom: 20px;
transform: translateX(-50%);
list-style-type: none;
}
.dots li{
width: 15px;
height: 15px;
background: rgba(255,255,255,0.6);
float: left;
border-radius: 50%;
margin: 0 5px;
box-shadow: 0 0 5px rgba(0,0,0,0.2);
}
.dots li.active{
background: rgba(0,0,0,0.6);
}
(四)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="css/own.css" />
</head>
<body>
<div class="banner">
<div class="wrap">
<ul class="image">
<li><img src="image/lb1.jpg"></li>
<li><img src="image/lb2.jpg"></li>
<li><img src="image/lb3.jpg"></li>
</ul>
<ul class="dot">
<li class="active" data-index = "0"></li>
<li data-index = "1"></li>
<li data-index = "2"></li>
</ul>
<ul class="btn">
<button type="button" class="leftbtn">
< </button> <button type="button" class="rightbtn"> >
</button>
</ul>
</div>
</div>
<script src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
// 实现自动轮播
// 设置变量,获取操作对象
var num = 0;
var timer = null;
var images = $(".image");
var img_li = $(".banner .wrap .image li");
var dots_li = $(".dot li");
var left = $(".leftbtn");
var right = $(".rightbtn");
function autoplay(){
num++;
num = num%img_li.length;
img_li.eq(num).stop().fadeIn(500).siblings().fadeOut(500);
dots_li.eq(num).addClass("active").siblings().removeClass("active");
}
timer = setInterval(autoplay,3000);
// 图片切换时小点同步
for (var i = 0; i < dots_li.length; i++) {
dots_li[i].addEventListener('click',function(){
var pointindex = this.getAttribute('data-index');
clearInterval(timer);
img_li.eq(pointindex).stop().fadeIn(500).siblings().fadeOut(1000);
dots_li.eq(pointindex).addClass("active").siblings().removeClass("active");
})
}
// 鼠标悬浮在图片上时停止自动轮播,离开继续
images.hover(
function(){
clearInterval(timer);
},
function(){
timer = setInterval(autoplay,3000);
});
left.click(function() {
num--;
num = num % img_li.length;
img_li.eq(num).stop().fadeIn(200).siblings().fadeOut(500);
dots_li.eq(num).addClass("active").siblings().removeClass("active");
});
right.click(function() {
num++;
num = num % img_li.length;
img_li.eq(num).stop().fadeIn(200).siblings().fadeOut(500);
dots_li.eq(num).addClass("active").siblings().removeClass("active");
});
</script>
</body>
</html>
*{
margin: 0;
padding: 0;
}
body{
background: url(../image/bk1.jpg);
background-size: cover;
}
li{
list-style-type: none;
}
.banner{
width: 100%;
/* background-color: #0077AA; */
margin-top: 100px;
}
.wrap{
width: 601px;
height: 338px;
margin: 0 auto;
position: relative;
/* background-color: #57aa3d; */
}
.image li{
position: absolute;
display: none;
}
.image li:nth-child(1){
display: block;
}
.banner img{
width: 601px;
height: 338px;
/* z-index: -100000; */
cursor: pointer;
}
.dot{
/* background-color: orangered; */
position: absolute;
bottom: 20px;
right: 20px;
}
.dot li{
margin-right: 20px;
float: left;
width: 10px;
height: 10px;
border: 2px solid rgba(204, 204, 204, 0.6) ;
border-radius: 100%;
background-color: rgba(109, 109, 109, 0.9);
cursor: pointer;
}
.dot li.active{
background-color: #f1976e;
}
/*
如果点中间有个空格,意思是选择 li 的子元素类名为 active 的元素对其生效
如果点中间没有空格,是选择类名为 active 的 li 对其生效
*/
.btn{
/* height: 50px; */
position: absolute;
/* background-color: greenyellow; */
top: 50%;
transform: translateY(-50%);
}
.btn button{
color: #fff7fb;
cursor: pointer;
width: 30px;
height: 50px;
border: 0.5px solid rgba(80, 80, 80, 0.9);
border-radius: 5px;
font-size: 30px;
background-color: rgba(53, 53, 53, 0.9);
}
.btn button:nth-child(2){
position: absolute;
left: 571px;
}
(五)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="css/lunbotest1.css" />
</head>
<body>
<div class="CarouselBox">
<ul>
<li class="one">
<img src="./image/lb1.jpg">
</li>
<li>
<img src="./image/lb2.jpg">
</li>
<li>
<img src="./image/lb3.jpg">
</li>
</ul>
<span id="left">
< </span> <span id="right">
>
</span>
<ol class="dots">
<li class="active"></li>
<li></li>
<li></li>
</ol>
</div>
<script src="js/jquery-3.4.1.min.js"></script>
<script>
var banner = $('.CarouselBox');
var ul_li = $('.CarouselBox>ul>li');
var left = $('.CarouselBox>#left');
var right = $('.CarouselBox>#right');
var dot = $('.CarouselBox>.dots>li');
var timer = null;
var num = 0;
function autoplay() {
timer = setInterval(function() {
num++;
num = num % ul_li.length;
ul_li.eq(num).stop().fadeIn(500).siblings().fadeOut(1000);
dot.eq(num).addClass('active').siblings().removeClass('active');
}, 3000)
}
autoplay();
banner.hover(
function() {
clearInterval(timer);
},
function() {
autoplay()
});
left.click(function() {
num--;
num = num % ul_li.length;
ul_li.eq(num).stop().fadeIn(200).siblings().fadeOut(500);
dot.eq(num).addClass('active').siblings().removeClass('active');
});
right.click(function() {
num++;
num = num % ul_li.length;
ul_li.eq(num).stop().fadeIn(200).siblings().fadeOut(500);
dot.eq(num).addClass('active').siblings().removeClass('active');
});
</script>
</body>
</html>
*{
margin: 0;
padding:0;
}
body{
background: url(../image/bk1.jpg);
background-size: cover;
}
.CarouselBox{
width: calc(1202px*0.7);
height: calc(676px*0.7);
margin: 80px auto;
/* border: 10px solid red; */
box-shadow: 0 5px -10px rgba(0,0,0,0.5);
position: relative;
}
.CarouselBox>ul{
width: 100%;
height: 100%;
}
.CarouselBox>ul>li>img:hover{
cursor: pointer;
}
.CarouselBox>span{
font-size: 40px;
/* font-family: "_宋体_"; */
width: 50px;
height: 80px;
background-color: rgba(0,0,0,0.5);
text-align: center;
line-height: 80px;
color: #FFFFFF;
position: absolute;
left: 0; top: 50%;
cursor: pointer;
transform: translateY(-50%);
}
.CarouselBox #right{
left: auto;
right: 0;
}
.CarouselBox>ul>li{
list-style-type: none;
position: absolute;
top: 0;
left: 0;
display: none;
}
.CarouselBox>ul>li.one{
display: block;
}
.CarouselBox>ul>li>img{
width: calc(1202px*0.7);
}
.dots{
position: absolute;
left: 50%;
bottom: 20px;
transform: translateX(-50%);
list-style-type: none;
}
.dots li{
width: 15px;
height: 15px;
background: rgba(255,255,255,0.6);
float: left;
border-radius: 50%;
margin: 0 5px;
box-shadow: 0 0 5px rgba(0,0,0,0.2);
}
.dots li.active{
background: rgba(0,0,0,0.6);
}
/*
如果点中间有个空格,意思是选择 li 的子元素类名为 active 的元素对其生效
如果点中间没有空格,是选择类名为 active 的 li 对其生效
*/