css3实现3d导航

2022-09-08 16:20:08 浏览数 (1)

1.基本结构如下

代码语言:javascript复制
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title></title>
        <style>
            ul{
                margin:100px auto
            }
            ul li {
                width: 120px;
                height: 35px;
                list-style: none;
            }
            .box{
                width: 100%;
                height: 100%;
                position: relative;
            }
            .front,.back{
                position: absolute;
                left:0;
                top:0;
                width: 100%;
                height: 100%;
                text-align: center;
                line-height: 35px;
            }
            .front{
                background-color: red;
                z-index: 1;
            }
            .back{
                
            }
        </style>
    </head>
    <body>
        <ul>
            <li>
                <div class="box">
                    <div class="front">正面</div>
                    <div class="back">反面</div>
                </div>
            </li>
        </ul>
        
      
    </body>
</html>

2.使另一个盒子扑到

代码语言:javascript复制
...
ul li {
  ...
    perspective: 500px;
}
.box{
    ...
    transform-style: preserve-3d;
}
.back{
    background-color: green;
    /* 另一个盒子扑到 */
    transform: rotateX(-80deg);/*(-90)*/
}

效果如下,为了演示方便我们使back盒子旋转了-80度,实际上应该旋转-90度,但是-90度的时候显示一根线看不出来效果

3.使绿色盒子至于底部

代码语言:javascript复制
...
.back{
    background-color: green;
    /* 1.另一个盒子扑到 */
    /* 2.盒子至于底部(先移动后旋转)*/ 
    transform:translateY(17.5px) rotateX(-80deg);
}

我们将绿色盒子向y轴方向移动红色盒子高度的一半

4.使两个盒子底部重合

将红色盒子z轴方向正值移动绿色盒子高度一半即可实现重合

代码语言:javascript复制
...
.front{
    background-color: red;
    z-index: 1;
    transform: translateZ(17.5px);
}
...

5.父盒子经过时x轴旋转90度

代码语言:javascript复制
...
.box{
...
    transition: all 0.3s;
}
.back{
    background-color: green;
    /* 1.另一个盒子扑到 */
    /* 2.盒子至于底部()*/ 
    transform:translateY(17.5px) rotateX(-90deg);/*改回-90度*/
}
.box:hover{
    transform: rotatex(90deg);
}

效果如下

0 人点赞