css3 利用perspective实现翻页效果和正方体 以及翻转效果

要点:

1 实现3D效果就需要使用perspective属性

1 页面旋转使用css3的rorate

2 使用backface-visibility 实现正面元素翻转之后背面不可见,显示出反面的元素

demo1 翻页效果:

html

<div class="demo1">
  <div class="demo1-1">
    <div class='info'> 这是正面</div>
  </div>
  <div class="demo1-2">这是反面</div>
</div>

css

.demo1 {
        margin: 20px auto;
        width: 200px;
        perspective: 1200px;/*重点*/
        height: 200px;
        position: relative;
        transform-style: preserve-3d;/*重点*/
        color: #fff;
    }

    .demo1 .demo1-1,.demo1 .demo1-2 {
        position: absolute;
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        text-align: center;
        background-color: blue;
    }

    .demo1 .demo1-1{
        z-index: 2;
        background-color: red;
        transform-origin: left;
        transition: all 1s ease-in-out;
        transform-style: preserve-3d;

    }

    .demo1:hover .demo1-1 {
        transform: rotateY(-120deg);
    }

 

反面内容不显示需要加上css:(这个效果生效的关键点是它的父元素加上transform-style: preserve-3d;)

    .demo1 .demo1-1 .info {
        backface-visibility:hidden;/* 重点 */
   -webkit-backface-visibility:hidden; }

 

正方体:

html

<div class="code-box">
        <div class='code code1'>1</div>
        <div class='code code2'>2</div>
        <div class='code code3'>3</div>
        <div class='code code4'>4</div>
        <div class='code code5'>5</div>
        <div class='code code6'>6</div>
    </div>

css:

 .code-box {
        perspective: 1200px;/* 重点 */
        width: 100px;
        height: 100px;
        margin: 20px auto;
        position: relative;
        transform-style: preserve-3d;/* 重点 */
        transform: rotateY(-30deg);/* 可以看见全貌 */
        perspective-origin: -50% -50%;/* 已正方体的中心店来透视 */
        transform-origin: center center 50px;
        transition: all 2s ease-in-out;
    }
    .code-box:hover {
        transform: rotateY(360deg);
    }

    .code-box .code {
        position: absolute;
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        opacity: 0.7;
        color: #fff;
        font-size: 18px;
        line-height: 100px;
        text-align: center;

    }

    .code-box .code1 {
        background-color: red;
        transform: translateZ(100px);
    }
    .code-box .code2 {
        background-color: blue;
    }
    .code-box .code3 {
        background-color: green;
        transform: rotateY(90deg);
        transform-origin: right;
    }

    .code-box .code4 {
        background-color: yellow;
        transform: rotateY(-90deg);
        transform-origin: left;
    }

    .code-box .code5 {
        background-color: fuchsia;
        transform: rotateX(90deg);
        transform-origin: top;
    }

    .code-box .code6 {
        background-color: blueviolet;
        transform: rotateX(-90deg);
        transform-origin: bottom;
    }

翻转效果:

html

 <div class="flip-container">
        <div class="flipper">
            <div class="front">
                <div class="info">here is content : AA</div>
            </div>
            <div class="back">
                <div class="info">here is content : BB</div>
            </div>
        </div>
    </div>

css

.flip-container {
        margin: 20px auto;
        -webkit-perspective: 500;/* 重点 */
        -moz-perspective: 500;
        -ms-perspective: 500;
        perspective: 500;
        -ms-transform: perspective(500px);
        -moz-transform: perspective(500px);
        transform-style: preserve-3d;/* 重点 */
    }

    .flipper {
        position: relative;
        width: 200px;
        height: 200px;
        transition: 0.6s;
        transform-style: preserve-3d;
    }

    .flip-container .front,
    .flip-container .back {
        position: absolute;
        left: 0;
        top: 0;
        right: 0;
        bottom: 0;
        transform-style: preserve-3d;/* 翻转后背面不可见 */
    }
    .flip-container .info{
        backface-visibility: hidden;/* 翻转后背面不可见 */
    }

    .front {
        transform: rotateY(0deg);
        z-index: 2;
        background: red;
    }

    .back {
        transform: rotateY(-180deg);/* 初始翻转-180deg, */
        background: green;
    }


    .flip-container:hover .flipper {
        transform: rotateY(180deg);/*hover的时候翻转180deg,back刚好转到正面可见,front正面转到反面不可见*/

    }

 

posted on 2019-05-08 20:05  半夏微澜ぺ  阅读(2178)  评论(0编辑  收藏  举报