zoukankan      html  css  js  c++  java
  • 纯CSS实现立方体旋转

    代码1:

    <!DOCTYPE html>
    <html>
    <head>
    <title></title>
    <style>
        .rect-wrap {
            position: relative;
            perspective: 2000px;
        }
    
        .container {
            width: 400px;
            height: 400px;
            transform-style: preserve-3d;
            transform-origin: 50% 50% 100px;
            /* //设置3d空间的原点在平面中心再向Z轴移动200px的位置 */
            /* left: 50%;
            margin-left: -200px; */
            top: 100px;
        }
    
        .slide {
            width: 200px;
            height: 200px;
            position: absolute;
            background: #000;
            line-height: 200px;
            text-align: center;
            color: #fff;
            font-size: 30px;
            font-weight: bold;
        }
    
        .top {
            left: 100px;
            top: -100px;
            transform: rotateX(-90deg);
            transform-origin: bottom;
            /*background: red;*/
            background: url(./a.jfif);
            background-size: cover;
        }
    
        .bottom {
            left: 100px;
            bottom: -100px;
            transform: rotateX(90deg);
            transform-origin: top;
            /*background: grey;*/
            background: url(./b.jfif);
            background-size: cover;
        }
    
        .left {
            left: -100px;
            bottom: 100px;
            transform: rotateY(90deg);
            transform-origin: right;
            /*background: green;*/
            background: url(./c.jfif);
            background-size: cover;
        }
    
        .right {
            left: 300px;
            bottom: 100px;
            transform: rotateY(-90deg);
            transform-origin: left;
            /*background: yellow;*/
            background: url(./d.jfif);
            background-size: cover;
        }
    
        .front {
            left: 100px;
            top: 100px;
            transform: translateZ(200px);
            /*background: black;*/
            background: url(./e.jfif);
            background-size: cover;
        }
    
        .back {
            left: 100px;
            top: 100px;
            transform: translateZ(0);
            ;
            /*background: blue;*/
            background: url(./f.jfif);
            background-size: cover;
        }
    
        @keyframes rotate-frame {
            0% {
                transform: rotateX(0deg) rotateY(0deg);
            }
    
            10% {
                transform: rotateX(0deg) rotateY(180deg);
            }
    
            20% {
                transform: rotateX(-180deg) rotateY(180deg);
            }
    
            30% {
                transform: rotateX(-360deg) rotateY(180deg);
            }
    
            40% {
                transform: rotateX(-360deg) rotateY(360deg);
            }
    
            50% {
                transform: rotateX(-180deg) rotateY(360deg);
            }
    
            60% {
                transform: rotateX(90deg) rotateY(180deg);
            }
    
            70% {
                transform: rotateX(0) rotateY(180deg);
            }
    
            80% {
                transform: rotateX(90deg) rotateY(90deg);
            }
    
            90% {
                transform: rotateX(90deg) rotateY(0);
            }
    
            100% {
                transform: rotateX(0) rotateY(0);
            }
        }
    
        .container {
            animation: rotate-frame 30s linear infinite;
        }
    </style>
    </head>
    
    <body class="body">
        <div class="rect-wrap">
            <!-- //舞台元素,设置perspective,让其子元素获得透视效果。 -->
            <div class="container">
                <!-- //容器,设置transform-style: preserve-3d,让其子元素在3D空间呈现 -->
                <div class="top slide"></div> <!-- //立方体的六个面 -->
                <div class="bottom slide"></div>
                <div class="left slide"></div>
                <div class="right slide"></div>
                <div class="front slide"></div>
                <div class="back slide"></div>
            </div>
        </div>
    </body>
    </html>

    效果:

    ---

    代码2:

    <style>
        /*最外层容器样式*/
        .wrap {
            width: 100px;
            height: 100px;
            margin: 150px;
            position: relative;
        }
    
        /*包裹所有容器样式*/
        .cube {
            width: 50px;
            height: 50px;
            margin: 0 auto;
            transform-style: preserve-3d;
            transform: rotateX(-30deg) rotateY(-80deg);
            animation: rotate linear 20s infinite;
        }
    
        @-webkit-keyframes rotate {
            from {
                transform: rotateX(0deg) rotateY(0deg);
            }
    
            to {
                transform: rotateX(360deg) rotateY(360deg);
            }
        }
    
        .cube div {
            position: absolute;
            width: 200px;
            height: 200px;
            opacity: 0.8;
            transition: all .4s;
        }
    
        /*定义所有图片样式*/
        .pic {
            width: 200px;
            height: 200px;
        }
    
        .cube .out_front {
            transform: rotateY(0deg) translateZ(100px);
        }
    
        .cube .out_back {
            transform: translateZ(-100px) rotateY(180deg);
        }
    
        .cube .out_left {
            transform: rotateY(-90deg) translateZ(100px);
        }
    
        .cube .out_right {
            transform: rotateY(90deg) translateZ(100px);
        }
    
        .cube .out_top {
            transform: rotateX(90deg) translateZ(100px);
        }
    
        .cube .out_bottom {
            transform: rotateX(-90deg) translateZ(100px);
        }
    
        /*定义小正方体样式*/
        .cube span {
            display: block;
            width: 100px;
            height: 100px;
            position: absolute;
            top: 50px;
            left: 50px;
        }
    
        .cube .in_pic {
            width: 100px;
            height: 100px;
        }
    
        .cube .in_front {
            transform: rotateY(0deg) translateZ(50px);
        }
    
        .cube .in_back {
            transform: translateZ(-50px) rotateY(180deg);
        }
    
        .cube .in_left {
            transform: rotateY(-90deg) translateZ(50px);
        }
    
        .cube .in_right {
            transform: rotateY(90deg) translateZ(50px);
        }
    
        .cube .in_top {
            transform: rotateX(90deg) translateZ(50px);
        }
    
        .cube .in_bottom {
            transform: rotateX(-90deg) translateZ(50px);
        }
    
        /*鼠标移入后样式*/
        .cube:hover .out_front {
            transform: rotateY(0deg) translateZ(200px);
        }
    
        .cube:hover .out_back {
            transform: translateZ(-200px) rotateY(180deg);
        }
    
        .cube:hover .out_left {
            transform: rotateY(-90deg) translateZ(200px);
        }
    
        .cube:hover .out_right {
            transform: rotateY(90deg) translateZ(200px);
        }
    
        .cube:hover .out_top {
            transform: rotateX(90deg) translateZ(200px);
        }
    
        .cube:hover .out_bottom {
            transform: rotateX(-90deg) translateZ(200px);
        }
    </style>
    
    
    <!-- 外层最大容器 -->
    <div class="wrap">
        <!--包裹所有元素的容器-->
        <div class="cube">
            <!--前面图片 -->
            <div class="out_front">
                <img src="https://i.loli.net/2018/05/03/5aeb0eef73838.jpg" class="pic">
            </div>
            <!--后面图片 -->
            <div class="out_back">
                <img src="https://i.loli.net/2018/05/03/5aeb0f2fb9a83.jpg" class="pic">
            </div>
            <!--左面图片 -->
            <div class="out_left">
                <img src="https://i.loli.net/2018/05/03/5aeb0f55411f0.jpg" class="pic">
            </div>
            <!--右面图片 -->
            <div class="out_right">
                <img src="https://i.loli.net/2018/05/03/5aeb0f79a1124.jpg" class="pic">
            </div>
            <!--上面图片 -->
            <div class="out_top">
                <img src="https://i.loli.net/2018/05/03/5aeb0f98a8b66.jpg" class="pic">
            </div>
            <!--下面图片 -->
            <div class="out_bottom">
                <img src="https://i.loli.net/2018/05/03/5aeb0fdd51b7e.jpg" class="pic">
            </div>
    
            <!--小正方体 -->
            <span class="in_front">
                <img src="https://i.loli.net/2018/05/03/5aeb100223dd0.jpg" class="in_pic">
            </span>
            <span class="in_back">
                <img src="https://i.loli.net/2018/05/03/5aeb101c2c24b.jpg" class="in_pic">
            </span>
            <span class="in_left">
                <img src="https://i.loli.net/2018/05/03/5aeb1038127b5.jpg" class="in_pic">
            </span>
            <span class="in_right">
                <img src="https://i.loli.net/2018/05/03/5aeb0dce1ca55.jpg" class="in_pic">
            </span>
            <span class="in_top">
                <img src="https://i.loli.net/2018/05/03/5aeb1057bb167.jpg" class="in_pic">
            </span>
            <span class="in_bottom">
                <img src="https://i.loli.net/2018/05/03/5aeb107514579.jpg" class="in_pic">
            </span>
        </div>
    
    </div>

    ---

  • 相关阅读:
    tomcat使用不同的jdk版本 liunx 装两个jdk
    接下来自己的研究对象
    钉钉小程序开发的所有坑
    java 在web应用中获取本地目录和服务器上的目录不一致的问题
    Python2.7更新pip:UnicodeDecodeError: 'ascii' codec can't decode byte 0xb7 in position 7: ordinal not in range(128)
    vue项目中禁止移动端双击放大,双手拉大放大的方法
    JZ56 删除链表中重复的结点
    JZ55 链表中环的入口结点
    JZ54 字符流中第一个不重复的字符
    JZ53 表示数值的字符串
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/12367045.html
Copyright © 2011-2022 走看看