欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CSS3D-从构建一个立方体开始

程序员文章站 2022-03-20 11:17:38
...

css3D

3D变化是css3的新属性,可以用来实现一些酷炫的效果。本文以如何搭建一个立方体为例谈谈关于3D的个人见解。

 

页面坐标是三维的,X轴从页面左边向右,Y轴从页面上方向下,Z轴从页面里面向外,和我们以前数学立体几何中的坐标系很相似,只是Y轴的方向相反,坐标原点默认时图形中心。需要注意两点:

1.旋转角度为正时遵循我自己称之为的“左手定则”即左手拇指指向坐标轴正方向,旋转方向就是四指朝向的方向;旋转角度为负时遵守类似的“右手定则”。

2.旋转图形时,旋转的是坐标系,而不是图形。例如rotateX(90deg);按照我们的“左手定则”,坐标系此时的Z轴变为从页面下方往上,而Y轴变为从页面里面向外。

构建立体图形时只需要记住三个层次即可:

1.景深,即perspective,就是我们观察者视角距离物体的位置。

2.容器,比如构建一个立方体,立方体有6个面,那么需要一个容器,使得转动这个容器,6个面同时做动作。容器也很简单,需要添加一个transform-style: preserve-3d;属性,不然6个面就会被压扁到一个平面上显示。

3.借用很多人的舞台-容器-演员的说法,我们把立方体的每个面也称为演员,演员做的事情也很简单,只需要安排好每个角色的位置和角度即可。

 

多说无益,下面具体展示一下如何构建一个立方体。

 

<div class="stage">
    <div class="rect">
        <div class="face top">top</div>
        <div class="face bot">bot</div>
        <div class="face left">left</div>
        <div class="face right">right</div>
        <div class="face front">front</div>
        <div class="face back">back</div>
    </div>
</div>

很明显的三层结构。

第一层:

.stage{
    position: absolute;
    left:300px;
    top:400px;
    background-color: #cccccc;
    width:300px;
    height: 200px;
    perspective: 400px;
}

第二层:

.stage .rect{
    position: absolute;
    left: 0;
    top: 0;
    width: 300px;
    height:200px;
    transform-style: preserve-3d;/*这个必须要有*/
    transform: rotateX(-30deg) rotateY(30deg);
}

第三层:

.stage .rect .face{
    position: absolute;
    top: 50px;
    left: 100px;
    width: 100px;
    height:100px;
    color: #ffffff;
    line-height: 100px;
    text-align: center;
}
.stage .rect .front{
    transform: translateZ(50px);
    background-color: #0ea432;
}
.stage .rect .back{
    transform: rotateY(180deg) translateZ(50px);
    background-color: #0d71bb;
}
.stage .rect .left{
    transform: rotateY(-90deg) translateZ(50px);
    background-color: #d67c1c;
}
.stage .rect .right{
    transform: rotateY(90deg) translateZ(50px);
    background-color: #ffb70a;
}
.stage .rect .top{
    transform: rotateX(90deg) translateZ(50px);
    background-color: #c23321;
}
.stage .rect .bot{
    transform: rotateX(-90deg) translateZ(50px);
    background-color: #2bbbff;
}

效果图如下

CSS3D-从构建一个立方体开始

假如取消景深,是什么样的效果?

CSS3D-从构建一个立方体开始

 

看起来很奇怪,对吧,因为没有遵循近大远小的实际。

假如取消

transform-style:preserve-3d;

会怎样?

CSS3D-从构建一个立方体开始

可以看到,图形被压扁在一个平面上了。

记住三个层次,两点注意,掌握CSS3D就是这么简单!

相关标签: CSS 3D