css动画-旋转魔方

如何用css动画实现以下效果呢?

基础布局:

  •  原理:由上、下、左、右、前、后这几个面组成分别旋转到相应的位置
  • 父元素要开启3d空间

基础代码:

 <div class="container">
        <div class="cube">
            <!-- 红色 -->
            <div class="cube_side side_front">
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
            </div>
            <!-- 白色 -->
            <div class="cube_side side_back">
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
            </div>
            <!-- 蓝色 -->
            <div class="cube_side side_right">
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
            </div>
            <!-- 黄色 -->
            <div class="cube_side side_left">
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
            </div>
            <!-- 红色 -->
            <div class="cube_side side_top">
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
            </div>
            <!-- 绿色 -->
            <div class="cube_side side_bottom">
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
                <div class="cube_side_square"></div>
            </div>
        </div>
    </div>

思路: 

  • 这里我们可以看到最外层有个container盒子 我们设置他的宽高为200px 并且让他的景深为700
  • 之后cube盒子中设置背景色为黑色, 宽高继承父级,开启3d空间,并添加animation动画效果
  • cube盒子中设置六个盒子每个盒子
  • 在六个盒子里设置九个小盒子(给相应的九个小盒子设置颜色)
   .container {
            margin: 200px 200px;
            width: 200px;
            height: 200px;
            perspective: 700px;
        }

        .cube {
            width: 100%;
            height: 100%;
            transform-style: preserve-3d;
            transition: transform 1s ease;
            background: black;
            /* 添加动画效果*/
            animation: Cube 10s linear infinite both alternate; 
        }

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

            15% {
                transform: rotateZ(45deg) rotateX(45deg) rotateY(45deg);
            }

            30% {
                transform: rotateZ(45deg) rotateX(90deg) rotateY(90deg);
            }

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

            60% {
                transform: rotateZ(45deg) rotateX(90deg) rotateY(180deg);
            }

            75% {
                transform: rotateZ(45deg) rotateX(45deg) rotateY(225deg);
            }

            100% {
                transform: rotateZ(45deg) rotateX(0deg) rotateY(270deg);
            }
        } 

        .cube_side {
            width: 100%;
            height: 100%;
            font-size: 0;
            position: absolute;
            backface-visibility: hidden;
            background: black;
            border-radius: 7px;
            box-sizing: border-box;
        }

        .side_front {
            transform: translateZ(100px);
        }

          .cube_side:nth-of-type(1) .cube_side_square {
            background: #b71234;
        }

        .cube_side .cube_side_square {
            display: inline-block;
            border: 6px solid;
            width: 27%;
            height: 27%;
            border-radius: 12px;
        }

        .side_back {
            transform: rotateX(-180deg) translateZ(100px);
        }

        .cube_side:nth-of-type(2) .cube_side_square {
            background: #cecece;
        }

        .side_right {
            transform: rotateY(90deg) translateZ(100px);
        }

        .cube_side:nth-of-type(3) .cube_side_square {
            background: #0046ad;
        }

        .side_left {
            transform: rotateY(-90deg) translateZ(100px);
        }

        .cube_side:nth-of-type(4) .cube_side_square {
            background: #ffd500;
        }

        .side_top {
            transform: rotateX(90deg) translateZ(100px);
        }

        .cube_side:nth-of-type(5) .cube_side_square {
            background: #ff5800;
        }

        .side_bottom {
            transform: rotateX(-90deg) translateZ(100px);
        }

        .cube_side:nth-of-type(6) .cube_side_square {
            background: #009b48;
        }

思路已经告诉大家啦!快来尝试一下吧! 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值