首先实现一个功能时,要从总体考虑,将大功能分解为多个小功能,在轮播图的实现中,首先最直观的,是展现出来的和未展现出来的足多张图片、可点击的多个按钮和底部提示圆点,这三部分;其次是在不进行任何操做的状况下,图片会自动朝一个方向循环滚动;最后是点击不一样的按钮,图片会朝不一样的方向滚动。css
注:本实例使用VSCode进行编程,Chrome浏览器演示效果。html
本篇文章主要讲解轮播图制做的第一步——静态页面的图片展现,后续会继续发布用原生JS实现功能的部分。编程
首先从直观视觉上看,有一张展现出来的图和隐藏看不见的多张图、左右两个箭头、以及底部的多个提示圆点。 例以下图:浏览器
这里咱们插入三张图,两个箭头和底部三个提示圆点。markdown
首先是基本的HTML代码,以下:less
<!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>static show</title> </head> <body> <div class="showContainer"> <div class="container"> //包含全部图片的容器 <img src="../images/cat.jpg" alt="A cat"> <img src="../images/dog1.jpg" alt="A dog"> <img src="../images/dandelion.jpg" alt="dandelion"> </div> <div class="dots"> //底部的提示圆点 <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div> <div class="left-triangle"> //向左箭头 <img src="../images/triangle.png" alt="指向左边的箭头"> </div> <div class="right-triangle"> //向右箭头 <img src="../images/triangle.png" alt="指向右边的箭头"> </div> </div> </body> </html> 复制代码
结果如图:oop
此时没有添加任何样式,图片大小不一,因此展现出来的有大有小;底部提示圆点此时还只是一个空的行内元素,不显示;左右箭头,我用了一张背景色是透明的,线条颜色为白色的图片代替,白色背景下的白色图片固然看不见了。 如今咱们给一个灰色的背景色 background: #aaa;
,再来效果:优化
看红色箭头指向的地方就是我加载的,那两张同样的图。可是,这两个箭头可不是我想要的样子,如今就让transform
属性来发挥它的力量吧!去这里developer.mozilla.org/zh-CN/docs/…看看transform
到底是怎么回事儿吧!咱们如今只使用它的基本的旋转功能。动画
transform: rotate(-90deg); //逆时针旋转90°
transform: rotate(90deg); //顺时针旋转90°
复制代码
效来看看效果:ui
哇!左右两个箭头也变出来了哦!可是,别忘了,咱们要的底部的提示圆点还在躲猫猫呢,那要怎么把它们找出来呢?那就要须要给他一套新的装备了。
咱们在给提示圆点换装备以前,要先给他们把工做区搭建好,先把整体样式显示效果固定了。为了方便观察,我将展现区在浏览器窗口中居中显示,并设置其宽高。
.showContainer{ width: 356px; height: 200px; border: 10px solid maroon; background-color: #AAA; margin: 50px auto; position: relative; overflow: hidden; } 复制代码
由于包含图片的容器container
要根据其父元素showContainer
来定位,因此须要设置其父元素position
属性为relative
,关于元素定位,请点击developer.mozilla.org/zh-CN/docs/…查看详情。由于展现区每次只须要展现区显示一张图便可,其余图片应该隐藏,利用overflow: hidden;
实现隐藏。
效果以下:
再利用定位元素将图片放在展现区中,且要设置图片大小。
.container { width: 9999px; position: absolute; left: 0px; } .container > img { display: block; float: left; height: 200px; } 复制代码
其中container
的宽度设置为9999px
是为了能够放下多张图片;container
中的img
元素只须要设置heihgt
便可,图片会根据容器大小自适应展现。
height
,图片会根据自身的宽高比获得一样的width
,并且此处图片容器showContainer
宽高设置的刚好与图片相适应,因此这里的图片自适应,是指图片大小正好与我设置的容器大小吻合,并不是图片随意试应于任何容器(这种可能会出现,图片被拉伸的状况)。如今的效果为:
对了咱们好不容易变出来的左右箭头还再也不展现区里呢,一样利用元素定位,将左右箭头分别居中放在展现区的两边:
.left-triangle { position: absolute; top: 80px; cursor: pointer; left: 0; transform: rotate(90deg); } .right-triangle { position: absolute; top: 80px; cursor: pointer; right: 0; transform: rotate(-90deg); } 复制代码
效果以下:
在这里咱们能够多加一个小小的动画效果:当鼠标移动到展现区里面时,左右箭头就显示出来;当鼠标移出展现区的时候,左右箭头就消失不见。利用:hover
伪类模拟鼠标悬停效果:
/*初始状态时,左右箭头是隐藏的*/ .left-triangle, .right-triangle { display: none; } .showContainer:hover .left-triangle, { display: block; } .showContainer:hover .right-triangle { display: block; } 复制代码
好了如今提示圆点的工做区已经搭建好了,如今要给提示圆点一套新的装备了:
dots
的位置:.dots{ width: inherit; position: absolute; bottom: 10px; text-align: center; } 复制代码
其宽度继承其父元素showContainer
的宽度,可随父元素的大小变化而变化。
.dots .dot{ display: inline-block; width: 10px; height: 10px; border-radius: 50%; background: orange; margin-right: 10px; } 复制代码
由于span
元素时行内元素,只有在设置其display
为block
或者inline-block
后才可设置其宽高,利用border-radius
实现圆角。效果以下图:
此时鼠标悬停在展现区中。
好了,到此为止,全部静态展现出来的东西都已经大功告成啦!
cursor: pointer; 复制代码
.css
文件引用到.html
文件中;<link rel="stylesheet" href="../styles/demo1.css"> 复制代码
最终代码以下:
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>static show</title> <link rel="stylesheet" href="../styles/demo1.css"> </head> <body> <div class="showContainer"> <div class="container"> <img src="../images/cat.jpg" alt="A cat"> <img src="../images/dog1.jpg" alt="A dog"> <img src="../images/dandelion.jpg" alt="dandelion"> </div> <div class="dots"> <span class="dot"></span> <span class="dot"></span> <span class="dot"></span> </div> <!--增长triangle类方便设置样式--> <div class="left-triangle triangle"> <img src="../images/triangle.png" alt="指向左边的箭头"> </div> <div class="right-triangle triangle"> <img src="../images/triangle.png" alt="指向右边的箭头"> </div> </div> </body> </html> 复制代码
CSS代码以下:
.showContainer { width: 356px; height: 200px; border: 10px solid #f5bebe; margin: 50px auto; overflow: hidden; position: relative; } .container { width: 9999px; position: absolute; left: 0px; } .container>img { display: block; float: left; height: 200px; } .triangle{ position: absolute; top: 80px; cursor: pointer; display: none; cursor: pointer; } .left-triangle { left: 0; transform: rotate(90deg); } .right-triangle { right: 0; transform: rotate(-90deg); } .showContainer:hover .triangle{ display: block; } .dots{ width: inherit; position: absolute; bottom: 10px; text-align: center; } .dots > .dot{ display: inline-block; width: 10px; height: 10px; border-radius: 50%; background: #87837e; margin-right: 10px; cursor: pointer; } 复制代码
为了显示更加明显的层级关系,改用less,使用VSCode插件——Easy Less,可在.less文件保的同时生成.css文件,本实例中,.less文件转换的.css文件与上述彻底相同。
Less代码以下:
.showContainer { width: 356px; height: 200px; border: 10px solid #f5bebe; margin: 50px auto; overflow: hidden; position: relative; .container { width: 9999px; position: absolute; left: 0px; img { display: block; float: left; height: 200px; } } .triangle { position: absolute; top: 80px; cursor: pointer; display: none; cursor: pointer; &.left-triangle { left: 0; transform: rotate(90deg); } &.right-triangle { right: 0; transform: rotate(-90deg); } } &:hover .triangle { display: block; } .dots { width: inherit; position: absolute; bottom: 10px; text-align: center; .dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; background: #87837e; margin-right: 10px; cursor: pointer; } } } 复制代码