首页 > 作文

详解CSS3的perspective属性设置3D变换距离的方法

更新时间:2023-04-06 23:14:28 阅读: 评论:0

perspective属性对于3d变形来说至关重要。该属性会设置查看者的位置,并将可视内容映射到一个视锥上,继而投到一个2d视平面上。如果不指定透视,则z轴空间中的所有点将平铺到同一个2d视平面中,并且变换结果中将不存氧化反应在景深概念。

上面的描述可能让人难以理解一些,其实对于perspective属性,我们可以简单的理解为视距,用来设置用户和元素3d空间z平面之间的距离。而其效应由他的值来决定,值越小,用户与3d空间z平面距离越近,视觉效果更令人印象深刻;反之,值越大,用户与3d空间z平面距离越远,视觉效果就很小。

在3d变形中,对于某些变形,例如下面的示例演示的沿z轴的变形,perspective属性对于查看变形的效果来说必不可少。

我们先来看一个简单的实例,制作一个扑克牌3d旋转效果,并且一个在扑克牌的父元素添加了视距perspective,而另一个却没有设置:

html

xml/html code
复制内容到剪贴板

<div><imgsrc=“images/cardkingclub.png”alt=“”width=“142”height=“200”/><imgsrc=“images/cardkingclub.png”alt=“”width=“142”height=“200”/></div><div><imgsrc=“images/cardkingclub.png”alt=“”width=“142”height=“200”/><imgsrc=“images/cardkingclub.png”alt=“”width=“142”height=“200”/></div>

css

css code
复制内容到剪贴板

div{ width:500px; height:300px; margin:30pxaut年代秀20120113o; position:relative; background:url(images/bg-grid.jpg)no-repeatcentercenter; backgroundsize:100%100%; } divimg{ position:absolute; top:50%; left:50%; margin-left:–71px; margin-top:–100px; transform-origin:bottombottom; } divimg:nth-child(1){ opacity:.5; z-index:1; } divimg:nth-child(2){ z-index:2; transform:rotatex(45deg); } div:nth-of-type(2){ perspective:500px; }

其效果如下:

上图的效果完全说明了一切。父节点没有设置perspective的情况下,梅花ki班主任经验交流会ng的3d旋转效果不明显,而在父节点设置perspective后,梅花king才像个3d旋转。

上例简单的演示了perspective的使用方法,我们回过头来,看看perspective的使用语法:

css code
复制内容到剪贴板

perspective:none|<length>

perspective属性包括两个属性:none和具有单位的长度值。其中perspective属性的默认值为none,表示无限的角度来看3d物体,但看上去是平的。另一个值<length>接受一个长度单位大于0的值。而且其单位不能为百分比值。<length>值越大,角度出现的越远,从而创建一个相当低的强度和非常小的3d空间变化。反之,此值越小,角度出现的越近,从而创建一个高强度的角度和一个大型3d变化。

比如你站在10英尺和1000英尺的地方看一个10英尺的立方体。在10英尺的地方,你距离立方体是一样的尺寸。因此视角转变远远大于站在1000英尺处的,立体尺寸是你距离立方体距离的百分之一。同样的思维适用于perspective的<length>值。我们一起来看一个实例,来加强这方面的理解:

html

xml/html code
复制内容到剪贴板

<divclass=“wrapperw2”><divclass=“cube”><divclass=“sidefront”>1</div><divclass=“sideback”>6</div><divclass=“sideright”>4</div><divclass=“sideleft”>3</div><divclass=“sidetop”>5</div><divclass=“sidebottom”>2</div></div></div><divclass=“wrapperw1”><divclass=“cube”><divclass=“sidefront”>1</div><divclass=“sideback”>6</div><divclass=“sideright”>4</div><divclass=“sideleft”>3</div><divclass=“sidetop”>5</div><divclass=“sidebottom”>2</div></div></div>

css

css code
复制内容到剪贴板

.wrapper{ width:50%; float:left; } .cube{ font-size:4em; width:2em; margin:1.5emauto; transform-style:prerve-3d; transform:rotatex(-40deg)rotatey(32deg); } .side{ position:absolute; width:2em; height:2em; background:rgba(255,99,71,0.6); border:1pxsolidrgba(0,0,0,0.5); color:white; text-align:center; line-height:2em; } .front{ transform:translatez(1em); } .top{ transform:rotatex(90deg)translatez(1em); } .rightright{ transform:rotatey(90deg)translatez(1em); } .left{ transform:rotatey(-90deg)translatez(1em); } .bottombottom{ transform:rotatex(-90deg)translatez(1em); } .back{ transform:rotatey(-180deg)translatez(1em); } .w1{ perspective:100px; } .w2{ perspective:1000px; }

效果如下图所示:

依据上面的介绍,我们可对perspective取值做一个简单的结论:

1.perspective取值为none或不设置,就没有真3d空间。
2.perspective取值越小,3d效果就越明显,也就是你的眼睛越靠近真3d。
3.perspective的值无穷大,或值为0时与取值为none效果一样。
为了更好的理解perspective属性,我们很有必要把他和translatez的关系结合起来。其实也可以把perspective的值简单的理解为人的眼睛到显示器的距离,而translate就是3d物体距离源点的距离,下面引用w3c的一张图来解说perspective和translatez的关系。

上图显示了perspective属性和translatez的位置比例。要顶部的图,z是半个d,为了使用原始圆(轮廓)看起来出现在z轴上(虚线圆),画布上的实体圆将扩大两部,如浅蓝色的圆。在底部图中显示,圆按比例缩小,致使虚线圆出现在画布后面,并且z的大小是距原始位置三分之一。

在3d变形中,除了perspective属性可以激活一个3d空间之外,在3d变形的函数中的perspective()也可以激活3d空间。他们不同的地方是:perspective用在舞台元素上(变形元素们的共同父元素);perspective()就是用在当前变形元素上,并且可以与其他的transform函数一起使用。例如,我们可以把:

css code
复制内容到剪贴板

.stage{ perspective:600px}

写成:

css code
复制内容到剪贴板

.stage.box{ transform:perspective(600px); }

来看一个简单示例:

html

xml/html code
复制内容到剪贴板

<divclass=“stage”><divclass=“container”><imgsrc=“images/cardkingclub.png”alt=“”width=“142”逼真的近义词height=“200”/></div></div><divclass=“stage”><divclass=“container”><imgsrc=“images/cardkingclub.png”alt=“”width=“142”height=“200”/></div></div>

css

css code
复制内容到剪贴板

.stage{ width:500px; height:300px; margin:30pxauto; position:relative; background:url(images/bg-grid.jpg)no-repeatcentercenter; backgroundsize:100%100%; } .container{ position:absolute; top:50%; left:50%; width:142px; height:200px; border:1pxdottedorange; margin-left:–71px; margin-top:–100px; } .containerimg{ transform:rotatey(45deg); } .stage:nth-child(1).container{ perspective:600px; } .stage:nth-child(2)img{ transform:perspective(600px)rotatey(45deg); }

效果如下所示:

上图效果可以看出,虽然书写的形式,属性名称不一致,但是效果却一样。

虽然perspective属性和perspective()函数所起的功能是一样的,但其取值以及以运用的对像有所不同:

1.perspective属性可以取值为none或长度值;而perspective()函数取值只能大于0,如果取值为0或比0小的值,将无法激活3d空间;
2.perspective属性用于变形对像父元素;而perspective()函数用于变形对像自身,并和transform其他函数一起使用。

perspective-origin属性

perspective-origin属性是3d变形中另一个重要属性,主要用来决定perspective属性的源点角度。它实际上设置了x轴和y轴位置,在该位置观看者好像在观看该元素的子元素。

perspective-origin属性的使用语法也很简单:

复制代码 代码如下: perspective-origin:[<percentage> | <length> | left | center | right | top | bottom] | [[<percentage> | <length> | left | center | right] && [<percentage> | <length> | top | center | bottom]]

该属性的默认值为“50% 50%”(也就是center),其也可以设置为一个值,也可以设置为两个长度值:

第一个长度值指定相对于元素的包含框的x轴上的位置。它可以是长度值(以受支持的长度单位表示)、百分比或以下三个关键词之一:left(表示在包含框的x轴方向长度的0%),cent白鲜皮er(表示中间点),或right(表示长度的100%)。
第二个长度值指定相对于元素的包含框的y轴上的位置。它可以是长度值、百分比或以下三个关键词之一:top(表示在包含框的y轴方向长度的0%),center(表示中间点),或bottom(表示长度的100%)。
注意,为了指转换子元素变形的深度,perspective-origin属性必须定义父元素上。通常perspective-origin属性本身不做任何事情,它必须被定义在设置了perspective属性的元素上。换句话说,perspective-origin属性需要与perspective属性结合起来使用,以便将视点移至元素的中心以外位置,如下图所示:

往往我们看一样东西不可能一直都在中心位置看,想换个角度,换个位置一看究竟,这个时候就离不开perspective-origin这个属性,下面来自于w3c官网的图可以简单阐述这一观点:

本文发布于:2023-04-06 23:14:26,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/7c65d343817bdd001586c5c01fdedfd5.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:详解CSS3的perspective属性设置3D变换距离的方法.doc

本文 PDF 下载地址:详解CSS3的perspective属性设置3D变换距离的方法.pdf

标签:属性   元素   剪贴板   长度
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图