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

      

  • 相关阅读:
    eclipse中文乱码问题解决方案
    修改Tomcat的JDK目录
    Tomcat 5.5 修改服务器的侦听端口
    HTML DOM教程 27HTML DOM Button 对象
    HTML DOM教程 24HTML DOM Frameset 对象
    Navicat for MySQL v8.0.27 的注册码
    HTML DOM教程 25HTML DOM IFrame 对象
    Tomcat 5.5 的下载和安装
    android manifest相关属性
    ubuntu10.04 下 eclipse 小结
  • 原文地址:https://www.cnblogs.com/shapeY/p/7659409.html
Copyright © 2011-2022 走看看