美文网首页
css动画小练习——3D盒子

css动画小练习——3D盒子

作者: moutory | 来源:发表于2022-03-21 20:30 被阅读0次

    前言

    使用CSS动画实现将6个图片拼成正方体,并且旋转的练习。

    一、html部分

    HTML部分基本没啥好说的,就是一个Div元素里面放6个子元素,每个子元素存放1张图片。

    <body>
        <div class="container">
            <div class="cube">
                <div class="box1"></div>
                <div class="box2"></div>
                <div class="box3"></div>
                <div class="box4"></div>
                <div class="box5"></div>
                <div class="box6"></div>
            </div>
        </div>
    </body>
    

    二、css部分

    css部分主要分为2个部分:

    • 正常状态的样式:由于使用了绝对定位,所以每张都叠放在一起,我们根据需要分别将6张图片进行旋转和移动,形成立方体的效果。然后加上一个动画效果,动画会让立方体沿着X,Z轴进行旋转(其实就是侧着旋转360度),一直持续。
    • 鼠标悬浮时,暂停动画,每张图片都完各自移动的方法额外再移动20px的距离,从而实现立方体展开的效果。
    <style>
            /* 设置视距 */
            html {
                perspective: 800px
            }
            .container{
                background-color: #fff;
                width: 600px;
                height: 600px;
                display: flex;
                justify-content: center;
            }
            .cube{
                margin-top: 100px;
                position: relative;
                width: 200px;
                height: 200px;
                /* 设置3d变形效果 */
                transform-style: preserve-3d;
                animation: box-rotate 10s infinite forwards linear;
            }
            .cube>div{
                width: 200px;
                height: 200px;
                position: absolute;
                opacity: .7;
            }
            .cube:hover{
                animation-play-state: paused;
            }
            .cube:hover > .box1{
                transform: rotateY(90deg) translateZ(120px);
            }
            .cube:hover > .box2{
                transform: rotateY(90deg) translateZ(-120px);
            }
            .cube:hover > .box3{
                transform: rotateX(90deg) translateZ(120px);
            }
            .cube:hover > .box4{
                transform: rotateX(90deg) translateZ(-120px);
            }
            .cube:hover > .box5{
                transform: translateZ(120px);
            }
            .cube:hover > .box6{
                transform: rotateZ(180deg) translateZ(-120px);
            }
            .box1{
                background-image: url(./image/fuchouzhe/1.jpg);
                transform: rotateY(90deg) translateZ(100px);
            }
            .box2{
                background-image: url(./image/fuchouzhe/2.jpg);
                transform: rotateY(90deg) translateZ(-100px);
            }
            .box3{
                background-image: url(./image/fuchouzhe/3.jpg);
                transform: rotateX(90deg) translateZ(100px);
            }
            .box4{
                background-image: url(./image/fuchouzhe/4.jpg);
                transform: rotateX(90deg) translateZ(-100px);
            }
            .box5{
                background-image: url(./image/fuchouzhe/5.jpg);
                transform: translateZ(100px);
            }
            .box6{
                background-image: url(./image/fuchouzhe/6.jpg);
                transform: rotateZ(180deg) translateZ(-100px);
            }
            @keyframes box-rotate {
                from{
                    transform: rotateX(0) rotateZ(0);
                }
                to{
                    transform: rotateX(1turn) rotateZ(1turn);
                }
            }
        </style>
    

    三、效果图

    cmbgj-mthf0.gif

    相关文章

      网友评论

          本文标题:css动画小练习——3D盒子

          本文链接:https://www.haomeiwen.com/subject/siwtjrtx.html