css3动画案例——会动的立方体盒子

时间:2024-03-08 22:17:12

css3动画——立方体盒子

给大家分享一个简单好玩的css3动画案例。一个立方体盒子在页面动起来。

html 其中6个li代表正方体的六个面,并在每一个面上插入一张图片。完成的效果会更好看。

<ul>
        <li>
            <img src="./media/2.jpg" alt="">
        </li>
        <li>
            <img src="./media/4.jpg" alt="">
        </li>
        <li>
            <img src="./media/6.jpg" alt="">
        </li>
        <li>
            <img src="./media/11.jpg" alt="">
        </li>
        <li>
            <img src="./media/12.jpg" alt="">
        </li>
        <li>
            <img src="./media/13.jpg" alt="">
        </li>
    </ul>

css 设置每个面宽度和高度都一样。

我理解的正方体的原理:先让其六个面用定位叠在一起,子绝父相;前面沿着z轴正方向移动你设置的宽度的一半;后面反过来;左面沿着x轴负方向移动你设置的宽度的一半,沿着y轴旋转90度(正或者负我认为没差别,只要你不在面上写字);右面反过来;上面沿着y轴正方向移动你设置的宽度的一半,沿着x轴旋转90度;下面反过来。

     * {
            margin: 0;
            padding: 0;
        }
        body {
            /* margin: 50px auto; */
            padding: 200px 300px;
        }
        ul {
            position: relative;
            list-style: none;
            width: 300px;
            height: 300px;
            transform-style: preserve-3d;
            transform: rotate3d(1,1,0,-45deg);
            animation: rotate 6s linear infinite alternate;
        }
        ul > li {
            position: absolute;
            top: 0;
            left: 0;
            width: 300px;
            height: 300px;
            line-height: 300px;
            text-align: center;
            font-size: 40px;
            font-family: \'华文琥珀\';
        }
        ul li img {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
        }
        li:first-child {
            background-color: skyblue;
            transform: translateZ(150px);
        }
        li:nth-child(2) {
            background-color: #222222;
            transform: translateZ(-150px) ;
        }
        li:nth-child(3) {
            background-color: yellow;
            transform: translateX(-150px) rotateY(90deg);
        }
        li:nth-child(4) {
            background-color: pink;
            transform: translateX(150px) rotateY(90deg);
        }
        li:nth-child(5) {
            background-color: green;
            transform: translateY(-150px) rotateX(90deg);
        }
        li:nth-child(6) {
            background-color: blue;
            transform: translateY(150px) rotateX(-90deg);
        }

动画规则,写好调用就行

@keyframes rotate {
            0% {
                transform: rotateY(0deg) rotateX(0deg) rotateZ(0deg);
            }

            20% {
                transform: translate(300px,300px) rotateY(30deg) rotateX(40deg) rotateZ(20deg);
            }

            40% {
                transform: translate(200px,-150px) rotateY(-60deg) rotateX(-40deg) rotateZ(-20deg);
            }

            60% {
                transform: translate(500px,200px) rotateY(145deg) rotateX(80deg) rotateZ(10deg);
            }

            80% {
                transform: translate(-250px,-300px) rotateY(90deg) rotateX(60deg) rotateZ(-20deg);
            }

            100% {
                transform: rotateY(135deg) rotateX(-45deg) rotateZ(30deg);
            }
        }