资讯专栏INFORMATION COLUMN

玩转CSS 3D -正四面体与正六面体

doodlewind / 1059人阅读

摘要:简单来说,就是非常对称的立方体,而且每一个面都是由正多边形组成,因此在这一篇,将会画出正四面体正六面体。完成之后应该就会顺利地看到一个正六面体,这时候我们可以改变的,可以更加清楚。

我们理解了CSS 3D的个中原理之后,废话就不用多说,直接来画正多面体吧!只要正多面体可以画出来,基本上在CSS 3D的领域里,大概就没甚么难得倒我们了。

首先看一下百度百科对于正多面体的介绍:“多面体,或称柏拉图立体,指各面都是全等的正多边形且每一个顶点所接的面数都是一样的凸多面体。”简单来说,就是非常对称的立方体,而且每一个面都是由正多边形组成,因此在这一篇,将会画出正四面体、正六面体。

正六面体

要绘制正多面体,第一个一定要先画正六面体,为什么呢?因为正六面体就是我们熟知的正立方体,夹角都是90度,也是最容易理解的形状(就算有写少许错,好像还是画得出来…)

首先我们要先在space里头放入六个正方形,分别给予box1到box6的类别名称识别,并写上1到6来确定翻转是否为正面朝外(朝内的话文字就会是反过来的)。

1
2
3
4
5
6

接着对camera、space和这些box做基本的CSS定义,记得box的position要设为absolute,才不会互相挤压。

.camera{
    width:200px;
    height:200px;
    perspective-origin:center center;
    -moz-perspective-origin:center center;
    -webkit-perspective-origin:center center;
    perspective:500px;
    -moz-perspective:500px;
    -webkit-perspective:500px;
}
.space{
    position:relative;
    width:100%;
    height:100%;
    border:1px dashed #000;
    transform-style:preserve-3d;
    -moz-transform-style:preserve-3d;
    -webkit-transform-style:preserve-3d;
}
.space div{
    position:absolute;
    width:100px;
    height:100px;
    font-size:50px;
    text-align:center;
    line-height:100px;
}

完成后先来看box1,box1最简单,只要将它位移到space的中间即可。

.box1{
    background:rgba(255,0,0,.2);
    transform:translateX(50px) translateY(50px);
}

box2除了移到中间,还必须要旋转90度,这时候就要使用transform-origin的属性,这可以设定物体作变化时要以自身的哪一点为主,设定不同的位置,旋转90度之后就会在不同的位置,这里我们先把box2水平位移150px,然后把变换的X定位在左侧,旋转后就会可以顺利地接在box1旁边。

.box2{
    background:rgba(255,255,0,.2);
    transform-origin:left top;
    transform:translateX(150px) translateY(50px) rotateY(90deg);
}

box3刚好在box1的正对面,所以只要旋转180度即可,但很重要的是旋转之后整个Z轴会跟着旋转180度,为了避免错乱,先把box3往Z轴后面移动100px,旋转后就会正常。

.box3{
    background:rgba(0,255,0,.2);
    transform:translateX(50px) translateY(50px) translateZ(-100px) rotateY(180deg);
}

box4和box2类似,不过要将旋转的中心点移到右侧,也因为移到右侧的缘故,所以我们要先进行X的位移。

.box4{
    background:rgba(255,0,255,.2);
    transform-origin:right top;
    transform:translateX(-50px) translateY(50px) rotateY(-90deg);
}

box5在上方,box6在下方,用跟box1到box4同样的方法,只是这次是要绕着X轴旋转。

.box5{
    background:rgba(0,0,255,.2);
    transform-origin:center bottom;
    transform:translateX(50px) translateY(-50px) rotateX(90deg);
}
.box6{
    background:rgba(0,255,255,.2);
    transform-origin:center top;
    transform:translateX(50px) translateY(150px) rotateX(-90deg);
}

完成之后应该就会顺利地看到一个正六面体,这时候我们可以改变camera的perspective,可以更加清楚。

我们可以在space套用animate的效果,透过space的旋转,仿佛就是一个正立方体在旋转啰!

.space{
    position:relative;
    width:100%;
    height:100%;
    -webkit-transform-style:preserve-3d;
    -webkit-transform-origin:center center -50px;
    -webkit-animation:s 4s linear infinite;
}
@-webkit-keyframes s{
    0%{
        -webkit-transform:rotateY(0);
    }
    100%{
        -webkit-transform:rotateY(-359.9deg);
    }
}

正四面体

理解正六面体之后,正四面体就比较好上手了,正四面体由四个正三角形组成,每个面之间的夹角为70.5度,所以待会旋转的角度也就是70.5度。

首先看到HTML的结构就是只有四个div而已。

camera和space的设定就不多谈,直接看到这些box的属性,别忘记要画正三角形,就要用到边框来绘制。

.space div{
  position:absolute;
  width:0;
  height:0;
  border-width:0 50px 87px;
  border-style:solid;
  opacity:.4;
}

首先看到box1,box1依旧是最简单的(但也是比正方形的麻烦一点),这里我要用box1当底,所以除了直接做位置的移动,移动后还要绕X轴旋转90度,比较特别的是因为正三角形是由边框构成,所以颜色就是要改变border才可以。

.box1{
    border-color:transparent transparent #f00;
    transform-origin:center bottom;
    transform:translateX(50px) translateY(50px) rotateX(-90deg);
}

再来就是另外三个面了,box2跟box1差不多简单,只是box1旋转90度,box2要旋转19.5度,因为box1要和box2有着70.5度的夹角。

.box2{
    border-color:transparent transparent #00f;
    transform-origin:center bottom;
    transform:translateX(50px) translateY(50px) rotateX(-19.5deg);
}

box3比较麻烦,我们要先让box3绕着Y轴旋转60度(因为正三角形每个角是60度),绕完之后,再绕X轴旋转19.5度,为什么这里的19.5度是正值呢?因为我们绕Y轴旋转后,X轴也跟着旋转,所以绕X轴的方向就变成颠倒过来了。

.box3{
    border-color:transparent transparent #00f;
    transform-origin:right bottom;
    transform:translateX(50px) translateY(50px) rotateY(60deg) rotateX(19.5deg);
}

box4和box3类似,同样的要先绕Y旋转60度,这次是要绕负的,因为是另外一侧。

.box4{
    border-color:transparent transparent #f0f;
    transform-origin:left bottom;
    transform:translateX(50px) translateY(50px) rotateY(-60deg) rotateX(19.5deg);
}

按照上面做,应该就可以得到下图的结果:

同样的,把space加上动画,就可以看到正四面体旋转啰!比较不同的地方是中心点的位移为29px,为什么呢?因为要抓取正三角形的中心点,数学式为:tan(30deg)x 50 = 28.86。

.space{
    position:relative;
    width:100%;
    height:100%;
    transform-style:preserve-3d;
    -webkit-transform-origin:center center 29px;
    -webkit-animation:s 4s linear infinite;
}
@-webkit-keyframes s{
    0%{
        -webkit-transform:rotateY(0);
    }
    100%{
        -webkit-transform:rotateY(-359.9deg);
    }
}


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/114474.html

相关文章

  • 带你玩转css3的3D

    摘要:透视即是以现实的视角来看屏幕上的事物,从而展现的效果。旋转则不再是平面上的旋转,而是三维坐标系的旋转,就包括轴,轴,轴旋转。必须与属性一同使用,而且只影响转换元素。可自由转载引用,但需署名作者且注明文章出处。 showImg(https://segmentfault.com/img/bVzJoZ); 话不多说,先上demo 酷炫css3走马灯/正方体动画: https://bupt-...

    Panda 评论0 收藏0
  • 带你玩转css3的3D

    摘要:透视即是以现实的视角来看屏幕上的事物,从而展现的效果。旋转则不再是平面上的旋转,而是三维坐标系的旋转,就包括轴,轴,轴旋转。必须与属性一同使用,而且只影响转换元素。可自由转载引用,但需署名作者且注明文章出处。 showImg(https://segmentfault.com/img/bVzJoZ); 话不多说,先上demo 酷炫css3走马灯/正方体动画: https://bupt-...

    archieyang 评论0 收藏0
  • 玩转3D Swiper性感秀之思路分析总结

    摘要:前言继一次的魔方之后,这次带你一起玩转性感美女秀,正常套路,请先一堵为快,有兴趣继续,没兴趣也可以看看美女养眼哦 showImg(https://segmentfault.com/img/bVbi4d2?w=1008&h=298); 前言   继一次的3D魔方之后,这次带你一起玩转性感美女秀,正常套路,请先一堵为快,有兴趣继续,没兴趣也可以看看美女养眼哦

    Zoom 评论0 收藏0
  • 玩转3D Swiper性感秀之思路分析总结

    摘要:前言继一次的魔方之后,这次带你一起玩转性感美女秀,正常套路,请先一堵为快,有兴趣继续,没兴趣也可以看看美女养眼哦 showImg(https://segmentfault.com/img/bVbi4d2?w=1008&h=298); 前言   继一次的3D魔方之后,这次带你一起玩转性感美女秀,正常套路,请先一堵为快,有兴趣继续,没兴趣也可以看看美女养眼哦

    kycool 评论0 收藏0
  • css3的3D

    摘要:概念要玩转的,就必须了解几个词汇,便是透视旋转和移动。透视即是以现实的视角来看屏幕上的事物,从而展现的效果。旋转则不再是平面上的旋转,而是三维坐标系的旋转,就包括轴,轴,轴旋转。 1.概念 要玩转css3的3d,就必须了解几个词汇,便是透视(perspective)、旋转(rotate)和移动(translate)。透视即是以现实的视角来看屏幕上的2D事物,从而展现3D的效果。旋转则不...

    feng409 评论0 收藏0
  • css3的3D

    摘要:概念要玩转的,就必须了解几个词汇,便是透视旋转和移动。透视即是以现实的视角来看屏幕上的事物,从而展现的效果。旋转则不再是平面上的旋转,而是三维坐标系的旋转,就包括轴,轴,轴旋转。 1.概念 要玩转css3的3d,就必须了解几个词汇,便是透视(perspective)、旋转(rotate)和移动(translate)。透视即是以现实的视角来看屏幕上的2D事物,从而展现3D的效果。旋转则不...

    woshicixide 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<