纯CSS实现轮播图效果

作者: ac68882199a1 | 来源:发表于2017-01-27 15:23 被阅读4494次

今天是大年三十,猴年最后一天。为了完成自己在年初定的每周一篇前端周记的目标,又因为之后就要开启疯狂百年模式,所以决定在今天的年夜饭前抽出点时间来完成猴年的最后一篇周记

之前的几篇周记都是和js相关,但是我们大前端不只有js啊,还有神奇的css

相信很多小伙伴做过的项目里面都有轮播图这么一个需求,有的小伙伴可能会自己造轮子,有的小伙伴可能会直接Google轮播图插件

但是如果不使用javascript,能不能实现轮播图的效果呢?可能小伙伴们并没有考虑过这个问题,那么下面我们就一起来用css实现一个简易的轮播图

auto-loop.png

基本需求分析

由于css无法做到js一样的精准操控,所有某些效果是无法实现的,比如在轮播的同时支持用户左右滑动,所以使用css智能实现基本的效果。下面列出来的内容就是我们实现的:

  1. 在固定区域中,内部内容自行滑动切换形成播放的效果
  2. 当切换到最后一张内容时,会反向播放或者回到起点重播
  3. 每张内容会停留一段时间,让用户能够看清楚
  4. 内容可以点击/进行操作

dom结构搭建

首先要有一个容器作为轮播图的容器,同时由于要实现滑动切换,所以内部需要有一个装载所有待切换内容的子容器

如果子容器中的内容是左右切换的,则需要将内容左右排列开

下面以轮播图片为例,上代码

<div class="loop-wrap">
    <div class="loop-images-container">
        < img src="darksky.jpg" alt="" class="loop-image">
        < img src="starsky.jpg" alt="" class="loop-image">
        < img src="whiteland.jpg" alt="" class="loop-image">
        < img src="darksky.jpg" alt="" class="loop-image">
        < img src="starsky.jpg" alt="" class="loop-image">
    </div>
</div>

.loop-wrap 是主容器
.loop-images-container 是承载内部图片的子容器
.loop-image 是图片内容,如果需要显示其他内容,可以自定义

css实现静态效果

轮播图内每一页内容的宽高应该相同,且等于主容器.loop-wrap宽高

.loop-images-container的宽高必然有一个大于外部主容器,overflow属性应该设置为hidden。那为什么不设置为auto呢?我不告诉你,你可以自己试试看🙃🙃🙃

.loop-wrap {
    position: relative;
    width: 500px;
    height: 300px;
    margin: 100px auto;
    overflow: hidden;
}

.loop-images-container{
    position: absolute;
    left: 0; top: 0;
    width: 500%; /* 横向排列 5张图片 宽度应为主容器5倍 */
    height: 100%;
    font-size: 0;
}

.loop-image{
    width: 500px;
    height: 300px;
}

下面在浏览器中打开页面,就可以看到不带轮播效果的静态页面了,除了第一张图片,其他图片都不可见

css实现轮播效果

轮播效果说到底就是一个动画效果,而通过css3的新属性 animation 我们就可以自定义一个动画来达到轮播图效果。下面先来了解一下 animation 这个属性

/*
animation: name duration timing-function delay iteration-count direction

name: 动画名
duration: 动画持续时间 设置为0则不执行
timing-function:动画速度曲线
delay:动画延迟开始时间 设置为0则不延迟
iteration-count:动画循环次数 设置为infinite则无限次循环
direction:是否应该轮流反向播放动画 normal 否 alternate 是
*/

animation 的 name 值是动画名,动画名可以通过 @keyframes 创建自定义动画规则

分析动画

要实现轮播,本质上是使内部承载内容的子容器 .loop-images-container 进行位移,从而使不同位置的内容一次展示在用户眼前

共有五张图片需要展示,如果轮播总耗时10s,那么每张图片应该有2s的时间(20%),而每张图片耗时的构成是切换耗时+展示耗时,如果切换耗时500ms(5%),展示耗时就应该是1500ms(15%)

于是这样改造css

.loop-images-container{
    position: absolute;
    left: 0; top: 0;
    width: 500%;
    height: 100%;
    font-size: 0;
    transform: translate(0,0); /* 初始位置位移 */
    animation: loop 10s linear infinite;
}

/* 创建loop动画规则 */
/* 
   轮播5张,总耗时10s,单张应为2s(20%)
   单张切换动画耗时500ms,停留1500ms
*/
@keyframes loop {
    0% {transform: translate(0,0);}
    15% {transform: translate(0,0);} /* 停留1500ms */

    20% {transform: translate(-20%,0);} /* 切换500ms 位移-20% */
    35% {transform: translate(-20%,0);}

    40% {transform: translate(-40%,0);}
    55% {transform: translate(-40%,0);}

    60% {transform: translate(-60%,0);}
    75% {transform: translate(-60%,0);}

    80% {transform: translate(-80%,0);}
    95% {transform: translate(-80%,0);}

    100% {transform: translate(0,0);} /* 复位到第一张图片 */
}

当当当当~~~纯css实现轮播图效果完成

想要直接看效果的小伙伴可以猛戳下面的链接

纯css实现轮播图效果

这是一个方向的轮播效果,想要实现往返方向的轮播效果,小伙伴们可以试试direction的alternate,但是自定义动画规则的时间间隔也要重新计算了哦!

总结

虽然css也能实现轮播效果,但是相对于js实现来说,功能性就弱了很多,无法控制暂停与播放,无法与用户产生交互,无法监听到状态的而变化等等,但是好处也很明显嘛!那就是。。。够简单🙃🙃🙃

我知道这篇有点水了,但是实在是按捺不住马上就要过年的激动心情啊!!!那么在这猴年的最后一天,希望大家新年快乐,技术越来越精湛,口袋越来越饱满,爱情越来越缠绵,事业越来越红火,家庭越来越美满!也祝我自己新年目标都能顺利完成,自己的道路能够一帆风顺!

鸡年大吉吧!!!🙃🙃🙃

相关文章

  • 纯CSS实现轮播图效果

    今天是大年三十,猴年最后一天。为了完成自己在年初定的每周一篇前端周记的目标,又因为之后就要开启疯狂百年模式,所以决...

  • 纯CSS实现banner连续轮播效果

    纯CSS实现banner连续轮播效果 .slide {position: r...

  • 两种纯CSS轮播图

    忙碌的618过后,抽点时间回顾最近这段时间CSS选择器和CSS动画的应用学习试了试用纯CSS来实现轮播图效果。 自...

  • css实现无限轮播-css(5)

    主要知识点: animation 纯css实现无间隙轮播图效果,鼠标悬停后可暂停 demo 请在chrome下预览...

  • jquery+swiper实现三图轮播效果

    需求为了实现如图所示的轮播图效果: css代码: js代码: 实现demo下载

  • jquery代码实现爱奇艺轮播图效果

    爱奇艺轮播图效果的jquery代码实现。 html部分: css部分: jquery部分:

  • 原生js轮播图

    今天和大家分享的案例是轮播图 简书 由js实现的轮播图效果 代码展示: css部分: HTML部分: script...

  • 纯css实现轮播图

    主体思想 准备相同大小的多个图片 将要展示图片横排放在一个图片容器里面 在图片容器外再加一个展示容器,展示容器大小...

  • 纯CSS实现轮播图

    天天写前端的你,会自己写一个轮播图吗,而且不能用js哦,知道轮播图的原理吗? 今天我们要讲的是如何只用css实现轮...

  • 2018-07-30

    css和js实现最简单的轮播图效果 html代码 1 2 3 4 css代码 /* 先取消默认样...

网友评论

  • 小小肉松:功能是比JS弱很多,但是用css还是能做出来的,必须支持一个。学习学习
    ac68882199a1:@小小肉松 感谢支持!
  • Lucky_miao:看不懂…支持!!
    ac68882199a1:@我是喵queen :joy::joy::joy:我谢谢你
  • ac68882199a1:不知道为什么第一段代码里的五个 img 标签被替换成了 markdown 文本,那其实是五个class=“loop-image”的标签

本文标题:纯CSS实现轮播图效果

本文链接:https://www.haomeiwen.com/subject/umifittx.html