zoukankan      html  css  js  c++  java
  • 纯CSS3实现轮播图

    前言

      纯css3实现的轮播图效果,和JavaScript控制的相比,简单高效了很多,但是功能也更加单一,只有轮播不能手动切换。

      用什么实现的呢?页面布局 + animation动画

    HTML部分

    <div class="container">
        <div class="title-container">
          <h1>纯CSS3轮播图</h1>
        </div>
        <div class="slide-box">
          <ul>
            <li class="slide-item slide1">
              <a href="#">
              <img src="images/img-1.jpg" alt="">
              <div class="tooltip">
                生活
              </div>
              </a>
            </li>
            <li class="slide-item slide2">
              <a href="#">
              <img src="images/img-2.jpg" alt="">
              <div class="tooltip">
                热情
              </div>
              </a>
            </li>
            <li class="slide-item slide3">
              <a href="#">
              <img src="images/img-3.jpg" alt="">
              <div class="tooltip">
                乐观
              </div>
              </a>
            </li>
            <li class="slide-item slide4">
              <a href="#">
              <img src="images/img-4.jpg" alt="">
              <div class="tooltip">
                美好
              </div>
              </a>
            </li>
            <li class="slide-item slide5">
              <a href="#">
              <img src="images/img-5.jpg" alt="">
              <div class="tooltip">
                意义
              </div>
              </a>
            </li>
          </ul>
          <div class="progress">
    
          </div>
        </div>
      </div>
    </body>
    View Code

      html部分也还是那些东西,容器+多张轮播图子项

    布局部分

    /*reset*/
    html,body,div,ul,li,img,h1,a{
      margin: 0;
      padding: 0;
    }
    
    ul{
      list-style: none;
    }
    
    
    /*slide style*/
    
    html,body{
      width: 100%;
      height: 100%;
    }
    
    body{
      background: url('./../images/bg.png') repeat;
    }
    
    .container{
      width: 1000px;
      height: 100%;
      margin: 0 auto;
    }
    
    .container .title-container{
      width: 800px;
      height: 100px;
      line-height: 100px;
      margin: 20px auto;
      text-align: center;
    }
    
    .slide-box{
      position: relative;
      width: 800px;
      height: 533px;
      margin: 0 auto;
      border:5px solid #eaeaea;
        -webkit-box-shadow:1px 1px 5px rgba(0,0,0,0.7);
                box-shadow:1px 1px 5px rgba(0,0,0,0.7);
    }
    
    .slide-box ul{
      position: relative;
      width: 100%;
      height: 100%;
      overflow: hidden;
    }
    
    .slide-box ul li{
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      cursor: pointer;
    }
    
    .slide-box ul li .tooltip{
      position: absolute;
      left: 50px;
      top: -40px;
      height: 40px;
      width: 100px;
      text-align: center;
      background-color: rgba(0,0,0,0.7);
      color: #fff;
      line-height: 40px;
      -webkit-transition: all 0.3s ease-in-out;
      transition: all 0.3s ease-in-out;
    }
    
    .slide-box ul li:hover .tooltip{
      top: 2px;
      z-index: 2;
    }
    View Code

     1、容器溢出隐藏

     2、轮播子项绝对定位

    轮播动画部分

     这部分才是本文的重点。

     用纯css3实现轮播,肯定要无限循环使用animation动画,而且需要单独控制每个子项的动画效果,而其整体效果是完美的轮播效果。

     子项使用的是绝对定位,需实现的轮播效果是从左至右,所以可以控制left的值达到展示和隐藏(定位到容器之外即隐藏)及滑动效果。先实现第一个子项

    .slide-box ul li.slide1{
      -webkit-animation: slide1 25s linear infinite; 
              animation: slide1 25s linear infinite;
    }
    
    @-webkit-keyframes slide1 {
      0%  {
        left: 0;
        opacity: 1;
      }
      16%  {
        left: 0;
        opacity: 1;
      }
      20%  {
        left: 800px;
        opacity: 0;
        z-index: 0;
      }
      21% {
        left: -800px;
        opacity: 0;
        z-index: 0;
      }
      95% {
        left: -800px;
        opacity: 0;
        z-index: 1;
      }
      96% {
        left: -800px;
        opacity: 0;
        z-index: 1;
      }
      100% {
        left: 0;
        opacity: 1;
        z-index: 1;
      }
    }

      设计轮播周期为25s,所以每个子项有5s的展示和移动时间。子项一的动画效果:0-4s展示,4-5s向右方滑动至容器外隐藏,之后迅速滑倒容器左边外隐藏(此时修改了z-index,所以不会影响到正在展示的子项),剩下的时间就是在左边等待下次滑动及展示了。第二个子项的动画效果需与第一个子项契合,特别在时间上,这样整体的效果才会好。如下:

    .slide-box ul li.slide2{
      -webkit-animation: slide2 25s linear infinite;
              animation: slide2 25s linear infinite;
    }
    
    @-webkit-keyframes slide2 {
      0%  {
        left: -800px;
        opacity: 0;
        z-index: 0;
      }
      16%  {
        left: -800px;
        opacity: 0;
        z-index: 1;
      }
      20%  {
        left: 0;
        opacity: 1;
        z-index: 1;
      }
      36% {
        left: 0;
        opacity: 1;
        z-index: 1;
      }
      40% {
        left: 800px;
        opacity: 0;
        z-index: 0;
      }
      41% {
        left: -800px;
        opacity: 0;
        z-index: 0;
      }
      100% {
        left: -800px;
        opacity: 0;
        z-index: 0;
      }
    }

      第二个子项 1-4s在容器左边外等待,4-5s向右滑出展示(此时第一个子项向左滑出隐藏),5-9s展示 9-10s向左滑出隐藏。

      同理剩下的子项,依次顺延调整好动画,整体的效果就会非常流畅。

    进度条动画

      因展示时间较长4s,所以可以加入进度条,交互体验会更加好。HTML中的div.progress即是进度条的结构。样式如下:

    .slide-box .progress{
      position: absolute;
      bottom: 0;
      left: 0;
      height: 5px;
      width: 0;
      background-color: rgba(0,0,0,0.7);
      -webkit-animation: progress 5s linear infinite;
              animation: progress 5s linear infinite;
      z-index: 2;
    }
    
    @-webkit-keyframes progress {
      0%{
        width: 0;
      }
      80%{
        width: 100%;
      }
      81%{
        width: 0;
      }
      100%{
        width: 0;
      }
    }

      通过控制宽度来标识进度。

    hover 暂停动画

      若需要鼠标悬停时暂停动画,使用 animation-play-state: paused 控制即可

    .slide-box:hover ul li,
    .slide-box:hover .progress
    {
      -webkit-animation-play-state: paused;
              animation-play-state: paused;
    }

    结语

      虽然功能简单,但是纯css3实现的效率还是很高的,效果也不错---------见 demo

      

  • 相关阅读:
    VB.Command()的参数
    XAMPP 启动mysql报错 InnoDB: Error: could not open single-table tablespace file……
    在不安装Windows服务的情况下,如何进行调试或测试
    Java基础东西(按位操作运算)
    浅谈web应用的负载均衡、集群、高可用(HA)解决方案
    关于CSDN, cnblog, iteye和51cto四个博客网站的比较与分析
    bzoj2243[SDOI2011]染色
    洛谷P2740 [USACO4.2]草地排水Drainage Ditches
    bzoj4198[noi2015]荷马史诗
    矩阵快速幂模板(pascal)
  • 原文地址:https://www.cnblogs.com/shapeY/p/7659409.html
Copyright © 2011-2022 走看看