当前位置: 首页 > Web前端 > CSS

教你用纯css3实现轮播效果

时间:2023-03-30 23:31:00 CSS

1.前言css3动画效果的强大之处不言而喻。自出现以来,人气一直不减。它和js动画的优劣一直是前端圈争论不休的话题,毫无疑问,css3动画的出现在一定程度上降低了动画效果的实现难度,有利于前端学习,其精简的代码量将我们从烦人的JS调试中解放出来。当然,CSS动画效果有其局限性,我们不能只用css3来模拟所有动画,另外就是浏览器兼容性问题。本次我们使用css3实现轮播图片效果,体验css3的强大。首先我们只能实现自动旋转,效果就是最常见的淡入淡出,点击旋转效果还没有实现。至少在我现在的水平上,纯css3只能选择自动旋转和点击旋转其中之一,如果有办法同时达到两种效果,请告诉我。2.布局>html代码没什么好说的。在款式上,首先滑块的大盒子一定要相对定位。另外,我们在li标签中加入了background-image,因为这样就可以用纯css来实现响应式了。此外,背景图片必须使用background-size:100%才能在响应中看到全图。另一个是身高问题。显然,slider-container必须和li的高度保持一致,因为在响应式风格中,高度是无法固定的,所以使用height属性显然是不行的。padding属性可以解决这个问题。一个是background-image可以显示在padding中,另一个是padding的单位是根据父元素的宽度来的。的。*{保证金:0;padding:0;}ul,li{list-style:none;}.floatfix{*zoom:1;}.floatfix:after{content:"";显示:表格;清除:两者;}.slider-contaner{宽度:100%;位置:相对;}.slider,.slider-item{padding-bottom:40%;}.slider-item{width:100%;位置:绝对;%;}.slider-item1{background-image:url(imgs/1.jpg);}.slider-item2{background-image:url(imgs/2.jpg);}.slider-item3{background-image:url(imgs/3.jpg);}.slider-item4{background-image:url(imgs/4.jpg);}.slider-item5{background-image:url(imgs/5.jpg);}三、要设计动画淡入淡出效果,必须使用不透明度。首先,所有图片的淡入淡出都是同一个动画,只是时间不同。这必须由动画延迟来控制。动画的无限旋转必须使用animation-iteration-count:infinite,我们这次有5张图片,整个动画分为图片停留和淡入淡出两种效果,如下图所示,箭头表示淡入淡出的过程。因为css3中没有规定两个动画的时间间隔的属性,所以我们必须写其他图片淡入淡出进入动画时的图片效果。显然这个时候是opacity:0;为了方便写动画,animation使用了一个线性函数,即animation-timing-function:linear;整个过程20s,停留3秒,淡入淡出1s,换算成15%和5%的百分比;@keyframesfade{0%{不透明度:0;z-index:2;}5%{不透明度:1;z-index:1;}20%{不透明度:1;z-index:1;}25%{不透明度:0;z-index:0;}100%{不透明度:0;z-index:0;}}接下来就是为每张图片添加animation-delay,因为第一张图片必须显示在最上面,所以其他通过相邻兄弟选择器使用opacity:0,第一张图片没有开头需要淡入淡出,直接跳到stop,也就是5%,所以animation-delay是-1s,第二章图和第一张图相隔20%,也就是4s,animation-delay为3s,依此类推。slider-item+.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;}这时候我们的轮播图就可以动了4.添加轮播焦点添加carousel当然重点不是为了点击,而是告诉访问者这里有多少张图片,以及图片当前的位置。至少对我个人而言,轮播的焦点是非常重要的,因为如果我不知道轮播中有多少张图片,我就会没有办法去点击,我会变得很焦躁,感觉自己没有看到整个网页的全貌。所以让我们添加一个旋转木马焦点。首先很明确,上面的动画还是可以用的。此外,布局必须使用position:absolute。另外,很明显我们要把焦点写两次,一次是当前图片的样式,一次是非当前图片的样式

  • 。焦点容器{位置:绝对;底部:2%;z-索引:7;保证金:0自动;左:0;right:0;}.focus-containerul{margin-left:46%;}.focus-containerli{width:10px;高度:10px;边界半径:50%;向左飘浮;右边距:10px;背景:#fff;}.focus-item{宽度:100%;高度:100%;背景:#51B1D9;边界半径:继承;一个动画持续时间:20s;动画计时函数:线性;动画名称:淡入淡出;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;}五、整理一下代码如果你维护过别人的你就会知道代码,代码梳理对于后期维护的重要性,不用梳理css代码,随便写哪里,对后期维护来说是个灾难,css代码梳理个人认为首先要加上必要的注释,对css代码进行分区,后期修改时尽量减少需要修改的地方,这个主要是代码重构的问题,我在写代码的时候就已经考虑到了这个问题,所以主要的工作就是添加注释,告诉maintainer代码修改最频繁的地方,我们按照修改最频繁的代码放的原则在最后。下面分析一下我们的代码如果被别人使用可能需要修改的地方。首先肯定是图片路径,所以我们把这个样式放在最后,然后是图片的高度,轮播焦点的颜色,动画时间的设置(这里也涉及到图片的数量),轮播焦点的位置,当然还有轮播焦点的大小可能也被修改。重组后代码如下:
  • /li>
  • /*cssresetstart*/*{margin:0;padding:0;}ul,li{list-style:none;}/*cssresetend*//*csspublicstart*/.floatfix{*zoom:1;}.floatfix:after{content:"";display:table;clear:both;}/*csspublicend*//*sliderstart*/.slider-contaner{width:100%;position:relative;}.slider-item+.slider-item{opacity:0;}.slider-item{width:100%;position:absolute;animation-timing-function:linear;animation-name:fade;animation-iteration-count:infinite;background-size:100%;}.focus-container{position:absolute;z-index:7;margin:0auto;left:0;right:0;}.focus-containerli{width:10px;height:10px;border-radius:50%;float:left;margin-right:10px;background:#fff;}.focus-item{width:100%;height:100%;border-radius:inherit;animation-timing-function:linear;动画名称:淡入淡出;animation-iteration-count:infinite;}.focus-item2,.focus-item3,.focus-item4,.focus-item5{opacity:0;}.focus-containerul{margin-left:46%;}/*设置轮播焦点位置*/.focus-container{bottom:2%;}/*设置当前图片焦点颜色*/.focus-item{background:#51B1D9;}/*设置动画,请自行修改秒数根据实际需要*/.slider-item,.focus-item{animation-duration:20s;}.slider-item1,.focus-item1{animation-delay:-1s;}.slider-item2,.focus-item2{animation-delay:3s;}.slider-item3,.focus-item3{animation-delay:7s;}.slider-item4,.focus-item4{animation-delay:11s;}.slider-item5,.focus-item5{animation-delay:15s;}@keyframesfade{0%{opacity:0;z-index:2;}5%{opacity:1;z-index:1;}20%{opacity:1;z-index:1;}25%{opacity:0;z-index:0;}100%{opacity:0;z-index:0;}}/*设置背景,响应请使用媒体查询根据断点修改路径*/.slider-item1{background-image:url(imgs/1.jpg);}.slider-item2{background-image:url(imgs/2.jpg);}.slider-item3{background-image:url(imgs/3.jpg);}.slider-item4{background-image:url(imgs/4.jpg);}.slider-item5{background-image:url(imgs/5.jpg);}/*设置图片的高度,请根据具体需要修改百分比,及时修改这个值*/.slider,.slider-item{padding-bottom:40%;}六、最后两个css3实现的这种轮播图的缺点不言而喻。只能选择点击旋转和自动旋转其中之一,但自动旋转可以在手机上使用。这是一个不错的选择。另外,现在的网站大多都是banner设计,网页上很少有文字,尤其是网站首页。有时候比较的不是网站设计的好坏,而是选出一张好看的图片谁可能会受到青睐。这种情况下,我们其实可以考虑把轮播图片变成背景旋转。这个时候轮播的焦点是不会用到的。相信在你的博客首页或者产品首页使用背景旋转会有很好的效果