在展示代码之前。先解释一下运用到的属性:

(1) perspective属性
perspective属性设置镜头(视点)到元素平面的距离,以像素计。所有元素都是放置在z=0的平面上。比如perspective:300px 表示镜头距离元素表面的位置是300像素。

当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身。也就是某元素想获得透视效果,需要在一个拥有perspective属性的父元素才能显现3D的效果。

以下代码显示的是有无perspective时正方形旋转效果的区别。

HTML:

<!-- 第一个正方形 -->
<div class="one_father">
    <div class="one_son"></div>
</div>

<!-- 第二个正方形 -->
<div class="two_father">
    <div class="two_son"></div>
</div>

CSS:

/* 第一个正方形 */
.one_father{
    width: 200px;
    height: 200px;
    background: #eee;
    margin: 100px auto;
}
.one_son{
    width: 100%;
    height: 100%;
    background: pink;
    transform: rotateY(50deg);
    transition: all 0.5s;
}
.one_father:hover .one_son{
    transform: rotateY(-130deg);
}

/* 第二个正方形 */
.two_father{
    width: 200px;
    height: 200px;
    margin: 20px auto;
    background: #eee;
    perspective: 900px;
}
.two_son{
    width: 100%;
    height: 100%;
    background: pink;
    transform: rotateY(50deg);
    transition: all 0.5s;
}
.two_father:hover .two_son{
    transform: rotateY(-130deg);
}

左边是第一个正方形,右边为第二个正方形。

html5 wrapper 语法 html perspective_CSS

html5 wrapper 语法 html perspective_CSS_02

透视原理:远小近大

当元素沿着Z轴向前移动的时候,与视点的距离越小,放大倍数越大。
当元素沿着Z轴移动的距离大于或等于视距后,元素移动到视点后方,固无法投影在屏幕上,所以屏幕上没有呈现。
translateZ>perspective 屏幕上无法呈现图像。

在以上代码中,基本已经完成了让门旋转的效果,还差最后一步让门按照一个参照点旋转,基本就完成了。

“参照点”属性:

(2) transform-origin
transform-origin属性指定元素的中心点在哪,用来设置元素的运动的基点(参照点)。

主要作用就是让我们在进行transform动作之前可以改变元素的基点位置,因为我们元素默认基点就是其中心位置。

换句话说我们没有使用transform-origin改变元素基点位置的情况下,transform进行的rotate,translate,scale,skew,matrix等操作都是以元素自己中心位置进行变化的

transform-origin(X,Y):X是水平方向取值,Y是垂直方向的取值,其中X和Y的值可以是百分值,em,px,其中X也可以是字符参数值left,center,right;Y和X一样除了百分值外还可以设置字符值top,center,bottom

left,center right对应的百分值为left=0%;center=50%;right=100%;top center bottom对应的百分值为top=0%;center=50%;bottom=100%;如果只取一个值,表示垂直方向值不变。

在以上的代码中,修改第二个正方形的CSS为:

.two_son{
    width: 100%;
    height: 100%;
    background: pink;
    transition: all 0.5s;
    transform-origin: left center;
}

这样,单门开门效果就完成了。

想要双门开门效果代码也是一样的道理。如下:

HTML:

<!-- 开门 -->
<div class="door">
    <div class="left"></div>
    <div class="right"></div>
</div>

 

CSS:

/* 开门 */
.door{
    width: 550px;
    height: 300px;
    margin: 150px auto;
    perspective: 1200px;
    position: relative;
    border: 1px solid;
    transition: all 1s;
}

.left,.right {
    float: left;
    width: 50%;
    height: 100%;
    background-color: blue;
    opacity: 0.1;
    transition: 1s;
    position: relative;
}
.left{
    /* 旋转中心点变成是左边、上下居中的那个位置 */
    transform-origin: left center;
}
.right{
    transform-origin: right center;
}
.door:hover .left {
    transform: rotateY(-130deg);
}
.door:hover .right {
    transform: rotateY(130deg);
}

显示效果:

html5 wrapper 语法 html perspective_html5 wrapper 语法_03

这样,开门效果就完成了!本人较懒,做出的效果比较简单,各位看客想运用好这个效果,可以在door的这个div里添加背景图片,也可以在左右门里添加好看的样式等。