zoukankan      html  css  js  c++  java
  • css3折叠效果

           在开发过程中,经常会遇到一些交互效果,今天所联系的便是一个类似折纸的折叠效果,查看效果. 

          说到折纸,我们先看下图

    image

           这是我第一时间想到的大体思路,如果能让这6个面连续的变化角度到0不就可以了吗,运用css3 transition或animation毫无压力~~

          要实现上图的这种效果,设置不同rotateX值及父元素的perspective即可,可是在实际写出来之后却发现这样并不可行,不论我们设置transform-origin或者其他的值,都不能使几个面相互一直相互连接。

          再来看下图,我们折纸过程实际是这样子的,如果我们分解开来,可以分解成以下步骤,第一1,2,3在同一个平面,第二步:1为1个平面,2,3为1个平面,第三步:1,2,3分别成3个平面。我们可以这样认为,即2,3是以一定角度从1平面折叠,3是以一定角度从2平面折叠,所以我们修改下我们的html结构

    image

     1 <div class='outer'>
     2    <div class='red fold'>
     3       段落1
     4       <div class='yellow fold'>
     5           段落2
     6           <div class='blue fold'>
     7              段落3  
     8              <div class='green fold'>
     9                 4
    10              </div>
    11           </div>
    12       </div>
    13    </div>
    14 </div>

    css代码:

    .outer{400px;margin:0px auto;-webkit-perspective:500px;-webkit-perspective-origin:50% 100%
    }
    .outer .fold{height:100px;text-align:center;line-height:100px;font-family:'Microsoft YaHei';font-size: 24px;color:#fff;-webkit-transform-style:preserve-3d;
    -webkit-transform-origin:0 0}
    .red{background-color:red;-webkit-transform:rotateX(50deg)}
    .yellow{background-color:yellow;-webkit-transform:rotateX(-120deg)}
    .blue{background-color:blue;-webkit-transform:rotateX(136deg)}
    .green{background-color:green;-webkit-transform:rotateX(-120deg)}

          我们得到的效果如下:

    image

    下面我们加上收缩动画,效果看这里

    代码如下:

    css:

     1 .outer{400px;margin:100px auto;
     2        -webkit-perspective:800px;
     3        -webkit-perspective-origin:50% 100%
     4 }
     5 .outer .fold{height:100px;
     6              text-align:center;
     7              line-height:100px;
     8              font-family:'Microsoft YaHei';
     9              font-size: 24px;
    10              color:#fff;
    11              -webkit-transform-style:preserve-3d;
    12              -webkit-transform-origin:0 0;
    13              -webkit-transition:transform linear 800ms;
    14 }
    15 .red{background-color:red;
    16      -webkit-transform:rotateX(90deg)
    17 }
    18 .yellow{background-color:yellow;
    19         -webkit-transform:rotateX(-180deg)
    20 }
    21 .blue{background-color:blue;
    22       -webkit-transform:rotateX(180deg);
    23 }
    24 .green{background-color:green;
    25        -webkit-transform:rotateX(-180deg);
    26 }
    27 .outer.activity .fold{-webkit-transform:rotateX(0deg);
    28 }

    html:

    <div class='outer'>
       <div class='red fold'>
          段落1
          <div class='yellow fold'>
              段落2
              <div class='blue fold'>
                 段落3  
                 <div class='green fold'>
                    4
                 </div>
              </div>
          </div>
       </div>
    </div>

    js:

    var btn=document.getElementById('btn'),
        contain=document.querySelector('.outer')
        ;
    btn.onclick=function(){
        contain.classList.toggle('activity')
    }

          当然,我们可以为不同的元素添加不同的transition-delay,来使几个面有先后的展开。

  • 相关阅读:
    类和对象
    关联查询
    重点函数
    三大范式
    主外键
    软件开发的项目周期
    什么是事务
    索引
    视图
    数据库对象
  • 原文地址:https://www.cnblogs.com/mopagunda/p/5424902.html
Copyright © 2011-2022 走看看