zoukankan      html  css  js  c++  java
  • css3 旋转效果加上双面显示效果

    在学习Css3的过程中,我想做一个类似金字塔,菱形翻页效果,如图这种效果

    如是,我自己设计了一个,不带js的旋转效果:

    1>第一步我先设计了一个方块,内含一个旋转了45deg的小方块,代码如下:

    <div style=" 141.4px;height: 141.4px; background-color: green;">
       <div  style=" 100px; height: 100px; transform:rotate(45deg); margin-left: 20px;margin-top: 20px; background-color: red; position: absolute;"></div>
    </div>

    效果图如下:

    2>第二步,由于是要在3d旋转180deg后可以看到方块背后的内容,所以复制第一个方块的代码,并将background-color颜色改成其他颜色,便于观察。通过定位opaction,使两个方块重叠。

    <div class="out"  style=" 141.4px; height: auto;">
         <div class="rotate" style=" 141.4px; height: auto;">
                  <div style=" 141.4px;height: 141.4px; background-color: green;">
                      <div  style=" 100px; height: 100px; transform:rotate(45deg); margin-left: 20px;margin-top: 20px; background-color: red; position: absolute;"></div>
                  </div>
                  <div class="back" style=" 141.4px;height: 141.4px;  position: absolute;top: 0; background-color: yellow;">
                     <div  style=" 100px; height: 100px; transform:rotate(45deg); margin-left: 20px;margin-top: 20px; background-color: blueviolet; position: absolute;"></div>
                  </div>
         </div>
    </div>

    3>为了让方块旋转起来,加上css样式代码

    1   body{margin: 0;padding:0;}
    2 
    3       .rotate{
    4           transition: 2s ease;
    5       }
    6 .out:hover .rotate{
    7     transform:rotateY(180deg);
    8     transition: 2s ease;
    9 }

    现在问题来了,查看效果时,发现始终只有一个一个方块在翻转,第二个方块被覆盖了,被上层的方块给挡住了。ps:这里困扰了我一两个小时。

    查css3 手册,及网上资料时发现,css3的3d旋转效果,并没有分层的这种思想,直接是以你看的视角为主,没有实际透视的那么直接。效果上说明是3d的旋转实际上你是看不到下层被遮挡的部分的,这里我一开始是使用translateZ,来解决这个问题,但实际上是不成的,还是会覆盖。所以其实最好的方法就是调透明度,既然下层的部分是被覆盖了,那我让上层的部分在翻转时,透明不就可以了,实事证明这是可行的且正确的 ,代码如下:

     .back{
           opacity: 0.4;
           transition: 1s opacity;
       }
          .out:hover .back{opacity: 1;}

    现在做成那种效果只需要布局就可以了。

    完整代码如下:

     1 <!doctype html>
     2 <html lang="en">
     3  <head>
     4   <meta charset="UTF-8">
     5   <meta name="Generator" content="EditPlus®">
     6   <meta name="Author" content="">
     7   <meta name="Keywords" content="">
     8   <meta name="Description" content="">
     9   <title>Document</title>
    10   <style>
    11       body{margin: 0;padding:0;}
    12 
    13       .rotate{
    14           transition: 2s ease;
    15       }
    16 .out:hover .rotate{
    17     transform:rotateY(180deg);
    18     transition: 2s ease;
    19 }
    20    .back{
    21        opacity: 0.4;
    22        transition: 1s opacity;
    23    }
    24       .out:hover .back{opacity: 1;}
    25   </style>
    26  </head>
    27  <body>
    28 <div style=" 960px;height: 400px;">
    29 <div class="out"  style=" 141.4px; height: auto;">
    30      <div class="rotate" style=" 141.4px; height: auto;">
    31               <div style=" 141.4px;height: 141.4px; background-color: green;">
    32                   <div  style=" 100px; height: 100px; transform:rotate(45deg); margin-left: 20px;margin-top: 20px; background-color: red; position: absolute;"></div>
    33               </div>
    34               <div class="back" style=" 141.4px;height: 141.4px;  position: absolute;top: 0; background-color: yellow;">
    35                  <div  style=" 100px; height: 100px; transform:rotate(45deg); margin-left: 20px;margin-top: 20px; background-color: blueviolet; position: absolute;"></div>
    36               </div>
    37      </div>
    38 </div>
    39 
    40  </div>
    41 
    42  </body>
    43 </html>

     现在复制代码就可以运行了

    补充说明,兼容性问题:

    由于我只在IE11下测试,兼容性出现一点问题,如果在IE下运行,需要在父标签,class="out",这个div中加上transform-style:preserve-3d;告诉浏览器执行3d效果

    交流学习:1689986723

    感谢@上位者的怜悯的指正!

  • 相关阅读:
    java字符串的遍历以及字符串中各类字符的统计
    Java Jvm运行机制原理
    为什么面试要问 hashmap 的原理
    HashMap的实现原理
    redis两种持久化方式的优缺点
    2018No-java面试知识
    从架构演进的角度聊聊spring cloud都做了些什么?
    MySQL索引优化
    2018java面试知识汇总
    多线程—7种同步方法
  • 原文地址:https://www.cnblogs.com/yuqiandoudou/p/4460488.html
Copyright © 2011-2022 走看看