HTML5实现立方体及透视效果

通过对于HTML5的学习,实现一个具有透视效果的立方体盒子:

具体实现方法如下

  • 我们需要先生成6个面,并添加样式
  • 由于transform变换后会回到原始状态,因此必须添加3d变换效果
/*让子元素保留3d变换效果*/
transform-style: preserve-3d;
  • 为了方便观看,再添加一个旋转效果
  • 之后只需要将前后面分别平移,左右上下面移动再旋转就可以实现,比较重要的就是的注意旋转方向,根据左手定则而定。

3D坐标系

旋转的方向:(左手法则)

左手握住旋转轴,竖起拇指指向旋转轴的正方向,正向就是其余手指卷曲的方向

所有的3d旋转,对着正方向去看,都是顺时针旋转。

透视效果

 /*添加透视景深效果*/
perspective: 1px;

 通过改变其值,我们可以看到一个从盒子内部视角到外部视角的效果。

/*设置透视的观察角度*/
perspective-origin: 0px 0px;

 通过设置x点的值,可以实现左右视角观测立方体,设置y点的值,可以实现上下视角观测立方体,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>立体盒子</title>
    <style>
        .box{
            height:200px;
            width: 200px;
            margin: 100px auto;
            position: relative;
            transform: rotate3d(1,1,0,-30deg);
            /*让子元素保留3d变换效果*/
            transform-style: preserve-3d;
            /*添加透视景深效果*/
            perspective: 1px;
            /*设置透视的观察角度*/
            perspective-origin: 0px 0px;
        }
        .box > div{
            width: 200px;
            height: 200px;
            position: absolute;
            opacity: 0.6;
        }
        .front{
            background-color: red;
            /*变化完毕后会回到原始状态*/
            transform: translateZ(100px);
        }
        .back{
            background-color: yellowgreen;
            transform: translateZ(-100px) rotateY(180deg);
        }
        .left{
            background-color: grey;
            /*移动加旋转*/
            transform: translateX(-100px) rotateY(-90deg);
        }
        .right{
            background-color: magenta;
            transform: translateX(100px) rotateY(90deg);
        }
        .top{
            background-color: deepskyblue;
            transform: translateY(-100px) rotateX(90deg);
        }
        .bottom{
            background-color: peachpuff;
            transform: translateY(100px) rotateX(-90deg);
        }
    </style>
</head>
<body>
<div class="box">
    <div class="front">front</div>
    <div class="back">back</div>
    <div class="left">left</div>
    <div class="right">right</div>
    <div class="top">top</div>
    <div class="bottom">bottom</div>
</div>

</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_40892188/article/details/82716477