CSS3 3D效果

这里单独写一篇关于CSS3 3D动画的博文,和大家分享我对3D动画的认识

笛卡尔坐标系统

在说3D变换之前必须了解的一个坐标系统,浏览器对元素进行3D定位、渲染就是遵循这个笛卡尔坐标系统。

2D笛卡尔坐标系统

2D转换是沿着两个坐标轴定义,如下所示


值的注意的是,y轴是向下延伸,这是由于系统采用的是二维笛卡尔坐标系统。

坐标系统的X轴会沿着所要转换的元素节点向水平维度延伸,y轴则沿着垂直维度延伸。

此坐标系统的原点(图标中的“(0,0)”)默认位于所要转换的元素的中心。可通过transform-origin属性改变。

而本文重点介绍的3D transform在2D的基础上增加多一个维度。

3D笛卡尔坐标系统



坐标系统的Z轴同时与x和y轴垂直。

此坐标系统的原点(图表中的“(0,0,0)”)也默认位于所要转换的元素的中心。同样可通过transform-origin属性改变。

3D转换从IE10开始得到支持。


要实现3D效果,要使用如下css属性:

1.perspective

perspective是指景深,定一个长度值,这个值代表从这个透视长度检视物件的所有子元素。通俗点讲就是:我们离元素多远来观察这个3D视图,如下图所示:


一般而言,该声明应用在3D变换的兄弟元素们的父元素上。

2.perspective-origin(x,y)

perspective-origin是指景深基点,主要用来决定perspective属性的源点角度。perspective-origin属性必须定义在父元素上。通常perspective-orgin属性本身不做任何事情,它必须被定义在设置了perspective属性的元素上。换句话说,perspective-origin属性需要与perspective属性结合起来使用,以便将视点移至元素的中心以外位置。默认点是元素的中心点。其中X和Y的值可以是百分值、em、px,其中X也可以是字符参数值left,center,right;Y和X一样除了百分值外还可以设置字符值top,center,bottom这个看上去有点像我们background-position一样;下面给出一张图片方便大家理解:


上图中红点就相当于观察者的眼睛,我们在红点处观察3D元素,下面列出相应的写法:

top left、left top 等价于0 0、0% 0%

top、top center、center top 等价于50% 0

right top、top right 等价于100% 0

left、left center、center left 等价于0 50%、0% 50%

center、center center 等价于50% 50%(默认值)

right、right center、center right等价于100% 50%

bottom left、left bottom 等价于0 100%、0% 100%

bottom、bottom center、center bottom等价于50% 100%

bottom right、right bottom 等价于100% 100%

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

3.transform-style

transform-style 用于规定如何在3D空间中呈现被嵌套的元素,通俗来讲就是建立3D空间。一般而言,该声明应用在3D变换的兄弟元素们的父元素上。

transform-style:flat|preserve-3d;

flat:子元素将不保留其3D位置。(默认值)

preserve-3d:子元素将保留其3D位置。

4.transform

相对于2D变换,3D变换在原有的transform属性中添加了一下属性:

4.1 3D位移-translate3d(tx,ty,tz)

在CSS3中3D位移主要包括两种函数translateZ()和translate3d()。translate3d()函数使一个元素在三维空间移动。这种变形的特点是,使用三维向量的坐标定义元素在每个方向移动多少。其中

tx:代表x坐标位移向量的长度

ty:代表y坐标位移向量的长度

tz:代表z轴位移向量的长度。此值不能是一个百分比值,如果取值为百分比值,将会认为无效值。

衍生3个属性分别为:

translateX(tx):x轴位移向量的长度,相当于translate3d(tx,0,0)

translateY(ty):y轴位移向量的长度,相当于translate3d(0,ty,0)

translateZ(tz):z轴位移向量的长度,相当于translate3d(0,0,tz)

示例如下


4.2 3D旋转-rotate3d(x,y,z,angle)

rotate3d代表在3D空间,元素沿着经过原点(0,0,0)和三维坐标(x,y,z)2点的直线进行旋转。其中:

x:是一个0到1之间的数值,主要用来描述元素围绕X轴旋转的矢量值

y:是一个0到1之间的数值,主要用来描述元素围绕Y轴旋转的矢量值

z:是一个0到1之间的数值,主要用来描述元素围绕Z轴旋转的矢量值

angle:是一个角度值,主要用来指定元素在3D空间旋转的角度,如果其值为正值,元素顺时针旋转,反之元素逆时针旋转。

衍生3个属性分别为:

rotateX(angle):指定沿着X轴根据指定角度的顺时针方向旋转。相当于rotate(1,0,0,angle);

rotateY(angle):指定沿着Y轴根据指定角度的顺时针方向旋转。相当于rotate(0,1,0,angle);

rotateZ(angle):指定沿着Z轴根据指定角度的顺时针方向旋转。相当于rotate(0,0,1,angle);

示例如下:


4.3 3D缩放-scale3d(sx,sy,sz)

CSS3 3D变形中的缩放主要有scaleZ()和scale3d()两种函数,当scale3d()中X轴和Y轴同时为1,即scale3d(1,1,sz),其效果等同于scaleZ(sz)。使用3D缩放函数,可以让元素在Z轴上按比例缩放。默认值为1,当值大于1时,元素放大,反之小于1大于0.01时,元素缩小。

其取值说明如下:

sx:横向缩放比例

sy:纵向缩放比例

sz:z轴缩放比例

衍生3个属性分别为:

scaleX(sx):指定元素每个点在X轴的比例。相当于scale3d(sx,1,1);

scaleY(sy):指定元素每个点在Y轴的比例。相当于scale3d(1,sy,1);

scaleZ(sz):指定元素每个点在Z轴的比例。相当于scale3d(1,1,sz);

示例如下:


应用

下面我们绘制一个正方体

css代码如下


html代码


显示效果如下:


注意:transform属性中rotate和translate的顺序是很重要的,比如.top中我们先沿X轴旋转90度,此时该div的Z轴已经不是垂直屏幕指向读者,而是竖直向上了。大家可能需要一些时间研究这些代码,要从立体的角度想象rotate之后Z轴的指向。每一个面开始时都按自己的中心点旋转,旋转之后X、Y、Z轴的指向也发生了变化。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSS3D旋转效果图是一种利用CSS33D变换属性来实现的图形旋转效果。通过使用CSS3的transform属性和perspective属性,可以创建出具有立体感的旋转效果。 要实现CSS3D旋转效果图,可以按照以下步骤进行操作: 1. 创建一个HTML元素,例如一个div容器,用于包裹需要旋转的图形或内容。 2. 使用CSS样式设置该容器的宽度、高度和透视效果。透视效果可以通过perspective属性来设置,例如:`perspective: 1000px;`。 3. 在容器内部创建需要旋转的图形或内容,并使用CSS样式设置其宽度、高度和其他样式属性。 4. 使用CSS3的transform属性来实现旋转效果。可以使用rotateX、rotateY或rotateZ函数来分别实现绕X轴、Y轴或Z轴的旋转。例如:`transform: rotateY(45deg);`。 5. 可以通过添加过渡效果(transition)来使旋转更加平滑。例如:`transition: transform 0.5s ease;`。 下面是一个示例代码,展示了一个简单的CSS3D旋转效果图: ```html <!DOCTYPE html> <html> <head> <style> .container { width: 200px; height: 200px; perspective: 1000px; } .box { width: 100%; height: 100%; background-color: red; transform: rotateY(45deg); transition: transform 0.5s ease; } .container:hover .box { transform: rotateY(180deg); } </style> </head> <body> <div class="container"> <div class="box"></div> </div> </body> </html> ``` 以上代码中,当鼠标悬停在容器上时,盒子会绕Y轴旋转180度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值