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

前言

使用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>

三、效果图

posted @ 2022-03-21 20:30  moutory  阅读(39)  评论(0编辑  收藏  举报  来源