CSS3实践之路(五):2D和3D转换(transform)
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:admin 阅读 303
.panal{width:500pxborder:1pxsolidblueheight:200px}.panaldiv{border:1pxsolid#6600ffwidth:120pxheight
.panal{ width:500px; border: 1px solid blue; height:200px; } .panal div{ border: 1px solid #6600ff ;width:120px; height:60px; background-color:#cc9900; } .tr{ transform: translate(80px, 60px) scale(.75, .75) rotate(40deg); transform-origin: 60% 100%; -ms-transform: translate(80px, 60px) scale(.75, .75) rotate(40deg); -ms-transform-origin: 60% 100%; -moz-transform: translate(80px, 60px) scale(.75, .75) rotate(40deg); -moz-transform-origin: 60% 100%; -webkit-transform: translate(80px, 60px) scale(.75, .75) rotate(40deg); -webkit-transform-origin: 60% 100%; -o-transform: translate(80px, 60px) scale(.75, .75) rotate(40deg); -o-transform-origin: 60% 100%; } #clock{ width: 200px; height: 200px; border: 1px solid black; border-radius: 100px; position:relative; margin:0 auto; background-color:#eee; } #dot{ border-radius:2px; width: 8px; height: 8px; position:absolute; top: 0; bottom: 0; margin: auto; left: 0; right: 0; background: black; } .needle { -ms-transform-origin: 50% 100%; -webkit-transform-origin: 50% 100%; -moz-transform-origin: 50% 100%; -o-transform-origin: 50% 100%; transform-origin:50% 100%; } #second{ position:relative; z-index:5; height: 80px; width: 1px; margin: 20px auto; } #second_needle{ height: 100%; width: 100%; position: relative; background: green; } #minute{ z-index:4; height: 60px; width: 4px; position: absolute; top: 40px; left: 0px; right: 0px; margin: auto; } #minute_needle{ height: 100%; width: 100%; background: blue; } #hour{ z-index:3; height: 40px; width: 8px; position: absolute; top: 60px; left: 0px; right: 0px; margin: auto; } #hour_needle{ height: 100%; width: 100%; background: red; }

Transform 适应于对任一DOM元素的2D或3D转换,这些转换效果有:旋转(rotate)、拉伸(scale)、平移(move)、倾斜(skew)等,利用Transform和javascript可以制作一些简单的动画,可以为web应用带来些意想不到的效果。

目前浏览器并不是完全支持所有的Transform ,IE9、Firefox 和Opera 仅支持2D transforms ,相应的CSS定义为:-ms-transform 、-moz-transform 和-o-transform ,而Safari 和Chrome 都支持2D和3D transforms ,相应的CSS定义为:-webkit-transform 。

下面给出一个transform定义实例:

div  {  transform:rotate(7deg);  -ms-transform:rotate(7deg); /* IE 9 */  -moz-transform:rotate(7deg); /* Firefox */  -webkit-transform:rotate(7deg); /* Safari and Chrome */  -o-transform:rotate(7deg); /* Opera */  }
1.1 transform
语法:transform: none|transform-functions;
说明:

Value

Description

none

定义这不需要转换

matrix(n,n,n,n,n,n)

使用有6个值的矩阵(matrix)来定义一个 2D 转换

matrix3d
(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n)

使用有4*4的矩阵(matrix)来定义一个 3D 转换

translate(x,y)

定义一个2D 转换,x:水平位移,y:垂直位移,个人觉得和margin-left(left) 和margin-top(top)类似.

translate3d(x,y,z)

定义一个2D 转换,x:水平位移,y:垂直位移,z:Z方向的位移

translateX(x)

定义一个水平方向2D 转换

translateY(y)

定义一个垂直方向2D 转换

translateZ(z)

定义一个Z方向3D 转换

scale(x,y)

定义一个2D 拉伸, x:水平拉伸,y:垂直拉伸

scale3d(x,y,z)

义一个3D 拉伸, x:水平拉伸,y:垂直拉伸,z:Z方向的拉伸

scaleX(x)

定义一个水平方向拉伸

scaleY(y)

定义一个垂直方向拉伸

scaleZ(z)

定义一个Z方向的拉伸

rotate(angle)

定义一个 2D 旋转, angle :旋转角度(deg)

rotate3d(x,y,z,angle)

定义一个 3D 旋转,

rotateX(angle)

定义一个X轴3D旋转

rotateY(angle)

定义一个Y轴3D旋转

rotateZ(angle)

定义一个Z轴3D旋转

skew(x-angle,y-angle)

定义一个X轴和Y轴的2D 倾斜

skewX(angle)

定义一个X轴的2D 倾斜

skewY(angle)

定义一个Y轴的2D 倾斜

perspective(n)

定义一个3D转换效果和透视图

1.2 transform-origin

定义元素旋转的位置,配合transform使用。

语法:transform-origin: x-axis y-axis z-axis;

说明:

Property Value

Description

x-axis

定义X轴的转换位置. 可能的值有:

  • left
  • center
  • right
  • length
  • %

y-axis

定义Y轴的转换位置. 可能的值有:

  • top
  • center
  • bottom
  • length
  • %

z-axis

定义Z轴的转换位置. 可能的值有:

  • length

1.3 transform-style

对于支持3D转换的浏览器,指定元素内的子元素是否进入其3D环境中。

语法:transform-style: flat|preserve-3d;

说明:

Property Value

Description

flat

子元素不参与3D转换

preserve-3d

子元素将显示在3D环境中

实例:

<style type="text/css">  .panal{   width:500px; border: 1px solid blue; height:200px;  }  .panal div{   border: 1px solid #6600FF ;width:120px; height:60px; background-color:#CC9900;  }  .tr{  transform: translate(80px, 60px) scale(.75, .75) rotate(40deg);  transform-origin: 60% 100%;  -ms-transform:  translate(80px, 60px) scale(.75, .75) rotate(40deg);  -ms-transform-origin: 60% 100%;  -moz-transform:  translate(80px, 60px) scale(.75, .75) rotate(40deg);  -moz-transform-origin: 60% 100%;  -webkit-transform: translate(80px, 60px) scale(.75, .75) rotate(40deg);  -webkit-transform-origin: 60% 100%;  -o-transform:  translate(80px, 60px) scale(.75, .75) rotate(40deg);  -o-transform-origin: 60% 100%;  }  </style>  
<div class="panal">  <div></div>  <div class="tr"></div>  </div>

在我之前的一篇博文利用Transform结合javascript做的动态时钟,下面再给展现一个带有动态效果的DEMO:

联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2