CSS3中Transform动画属性用法详解

人生有起有落,有起有伏,无论你现在是在人生的顶峰,还是在人生的低谷,都是人生必经的一个过程。站在山峰的你,回头看看曾经在山谷的你,是多么的发奋图强,自强不息。所有的好事不是不来,而是在等红绿灯的路上。

css3在原来的基础上增加了变形和动画相关的属性,动画三兄弟:transform、transition和animation,通过使用这三个属性可以达到很炫酷的效果。需要注意的是这三个属性都是css3新增的属性,各大浏览器支持方面还不是特别好,使用时要特别注意浏览器的兼容性,本文重点介绍Transform的使用方法,具体内容如下

浏览器支持情况:

Internet Explorer 10、Firefox、Opera 支持 transform 属性。

Internet Explorer 9 支持替代的 -ms-transform 属性(仅适用于 2D 转换)。

Safari 和 Chrome 支持替代的 -webkit-transform 属性(3D 和 2D 转换)。

Opera 只支持 2D 转换。

2D transform变换方法

•translate(x, y)方法,根据左(X轴)和顶部(Y轴)位置给定的参数,从当前元素位置移动。x, y的值可以取正负,分别表示表示向不同的方向偏移。
•rotate(angle)方法, 表示旋转angle角度。angle为正时,按顺时针角度旋转,为负值时,元素逆时针旋转。
•scale(x, y)方法,表示元素在x轴和y轴上的缩放比例,参数大于1时,元素放大,小于1时,元素缩小。
•skew(x-angle,y-angle)方法,用来对元素进行扭曲变行,第一个参数是水平方向扭曲角度,第二个参数是垂直方向扭曲角度。其中第二个参数是可选参数,如果没有设置第二个参数,那么Y轴为0deg
•matrix(n,n,n,n,n,n)方法, 以一个含六值的变换矩阵的形式指定一个2D变换,此属性值使用涉及到数学中的矩阵,感兴趣的读者可以深入了解一下,这里就不做详细介绍了。

下面是上面方法的演示:

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPEhtml>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>transform2D演示</title>
  6. <styletype="text/css">
  7. #container{
  8. width:700px;
  9. height:120px;
  10. border:1pxsolidblue;
  11. margin:20pxauto;
  12. padding:20px20px;
  13. }
  14. #div1,#div2,#div3,#div4{
  15. height:100px;
  16. width:100px;
  17. border:1pxdashedred;
  18. display:inline-block;
  19. }
  20. #div1div{
  21. height:100px;
  22. width:100px;
  23. background:#63F7ED;
  24. transform:translate(20px,10px);/*W3C标准*/
  25. -ms-transform:translate(20px,10px);/*IE9*/
  26. -moz-transform:translate(20px,10px);/*Firefox*/
  27. -webkit-transform:translate(20px,10px);/*Safari和Chrome*/
  28. -o-transform:translate(20px,10px);/*Opera*/
  29. }
  30. #div2{margin-left:50px;}
  31. #div2div{
  32. height:100px;
  33. width:100px;
  34. background:#63F7ED;
  35. transform:rotate(45deg);/*W3C标准*/
  36. -ms-transform:rotate(45deg);/*IE9*/
  37. -moz-transform:rotate(45deg);/*Firefox*/
  38. -webkit-transform:rotate(45deg);/*Safari和Chrome*/
  39. -o-transform:rotate(45deg);/*Opera*/
  40. }
  41. #div3{margin-left:100px;}
  42. #div3div{
  43. height:100px;
  44. width:100px;
  45. background:#63F7ED;
  46. transform:scale(2,0.5);/*W3C标准*/
  47. -ms-transform:scale(2,0.5);/*IE9*/
  48. -moz-transform:scale(2,0.5);/*Firefox*/
  49. -webkit-transform:scale(2,0.5);/*Safari和Chrome*/
  50. -o-transform:scale(2,0.5);/*Opera*/
  51. }
  52. #div4{margin-left:100px;}
  53. #div4div{
  54. height:100px;
  55. width:100px;
  56. background:#63F7ED;
  57. transform:skew(30deg,-20deg);/*W3C标准*/
  58. -ms-transform:skew(30deg,-20deg);/*IE9*/
  59. -moz-transform:skew(30deg,-20deg);/*Firefox*/
  60. -webkit-transform:skew(30deg,-20deg);/*Safari和Chrome*/
  61. -o-transform:skew(30deg,-20deg);/*Opera*/
  62. }
  63. </style>
  64. </head>
  65. <body>
  66. <divid="container">
  67. <divid="div1">
  68. <div>translate</div>
  69. </div>
  70. <divid="div2">
  71. <div>rotate</div>
  72. </div>
  73. <divid="div3">
  74. <div>scale</div>
  75. </div>
  76. <divid="div4">
  77. <div>skew</div>
  78. </div>
  79. </div>
  80. </body>
  81. </html>

效果如下:

transform-origin 属性

前面我们提到的transform的方法都是基于元素的中心来变换的,也就是元素变换的基点默认是元素的中心。但是有时候我们需要在不同的位置对元素进行这些操作,那么我们就可以使用transform-origin来对元素进行基点位置改变。该属性可以接收三个参数:

transform-origin: x-axis y-axis z-axis;
•x-axis,表示水平方向上的取值,可以取 字符参数值left,center right,也可以取百分比,字符参数值对应的百分值为left=0%;center=50%;right=100%。
•y-axis,表示竖直方向上的取值,还可以设置字符值top,center,bottom,也可以取百分比,字符参数值对应的百分值为top=0%;center=50%;bottom=100%。
•z-axis,表示视图被置于 Z 轴的何处,用于3D变形中。

我们可以设置基点来与之前的transform图形进行对比:

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPEhtml>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>transform-origin演示</title>
  6. <styletype="text/css">
  7. *{
  8. margin:0;
  9. padding:0;
  10. }
  11. #container{
  12. width:800px;
  13. height:150px;
  14. border:1pxsolidblue;
  15. margin:20pxauto;
  16. padding:20px20px;
  17. }
  18. #div1,#div2,#div3,#div4{
  19. height:100px;
  20. width:100px;
  21. border:1pxdashedred;
  22. display:inline-block;
  23. }
  24. #div1div{
  25. height:100px;
  26. width:100px;
  27. background:#63F7ED;
  28. transform:translate(20px,10px);/*W3C标准*/
  29. -ms-transform:translate(20px,10px);/*IE9*/
  30. -moz-transform:translate(20px,10px);/*Firefox*/
  31. -webkit-transform:translate(20px,10px);/*Safari和Chrome*/
  32. -o-transform:translate(20px,10px);/*Opera*/
  33. transform-origin:lefttop;/*W3C标准*/
  34. -ms-transform-origin:lefttop;/*IE9*/
  35. -moz-transform-origin:lefttop;/*Firefox*/
  36. -webkit-transform-origin:lefttop;/*Safari和Chrome*/
  37. -o-transform-origin:lefttop;/*Opera*/
  38. }
  39. #div2{margin-left:100px;}
  40. #div2div{
  41. height:100px;
  42. width:100px;
  43. background:#63F7ED;
  44. transform:rotate(45deg);/*W3C标准*/
  45. -ms-transform:rotate(45deg);/*IE9*/
  46. -moz-transform:rotate(45deg);/*Firefox*/
  47. -webkit-transform:rotate(45deg);/*Safari和Chrome*/
  48. -o-transform:rotate(45deg);/*Opera*/
  49. transform-origin:0%0%;/*W3C标准*/
  50. -ms-transform-origin:0%0%;/*IE9*/
  51. -moz-transform-origin:0%0%;/*Firefox*/
  52. -webkit-transform-origin:0%0%;/*Safari和Chrome*/
  53. -o-transform-origin:0%0%;/*Opera*/
  54. }
  55. #div3{margin-left:50px;}
  56. #div3div{
  57. height:100px;
  58. width:100px;
  59. background:#63F7ED;
  60. transform:scale(2,0.5);/*W3C标准*/
  61. -ms-transform:scale(2,0.5);/*IE9*/
  62. -moz-transform:scale(2,0.5);/*Firefox*/
  63. -webkit-transform:scale(2,0.5);/*Safari和Chrome*/
  64. -o-transform:scale(2,0.5);/*Opera*/
  65. transform-origin:centertop;/*W3C标准*/
  66. -ms-transform-origin:centertop;/*IE9*/
  67. -moz-transform-origin:centertop;/*Firefox*/
  68. -webkit-transform-origin:centertop;/*Safari和Chrome*/
  69. -o-transform-origin:centertop;
  70. }
  71. #div4{margin-left:150px;}
  72. #div4div{
  73. height:100px;
  74. width:100px;
  75. background:#63F7ED;
  76. transform:skew(30deg,-20deg);/*W3C标准*/
  77. -ms-transform:skew(30deg,-20deg);/*IE9*/
  78. -moz-transform:skew(30deg,-20deg);/*Firefox*/
  79. -webkit-transform:skew(30deg,-20deg);/*Safari和Chrome*/
  80. -o-transform:skew(30deg,-20deg);/*Opera*/
  81. transform-origin:100%100%;/*W3C标准*/
  82. -ms-transform-origin:100%100%;/*IE9*/
  83. -moz-transform-origin:100%100%;/*Firefox*/
  84. -webkit-transform-origin:100%100%;/*Safari和Chrome*/
  85. -o-transform-origin:100%100%;
  86. }
  87. </style>
  88. </head>
  89. <body>
  90. <divid="container">
  91. <divid="div1">
  92. <div>translate(基点为(lefttop)</div>
  93. </div>
  94. <divid="div2">
  95. <div>rotate(基点为(0%,0%)</div>
  96. </div>
  97. <divid="div3">
  98. <div>scale(基点为(center,top)</div>
  99. </div>
  100. <divid="div4">
  101. <div>skew(基点为(100%,100%)</div>
  102. </div>
  103. </div>
  104. </body>
  105. </html>

效果如下:

对比发现:translate()方法与之前的没有区别,其他三个方法基点改变了,图形变形效果也有所变化。

3D transform变换方法

Internet Explorer 10 和 Firefox 支持 3D 转换.
Chrome 和 Safari 必须添加前缀 -webkit-.
Opera 还不支持 3D 转换(支持 2D 转换 ).

三维变换使用基于二维变换的相同属性。CSS3中的3D变换主要包括以下几种功能函数:
•3D位移:CSS3中的3D位移主要包括translateZ()和translate3d()两个功能函数;
•3D旋转:CSS3中的3D旋转主要包括rotateX()、rotateY()、rotateZ()和rotate3d()四个功能函数;
•3D缩放:CSS3中的3D缩放主要包括scaleZ()和scale3d()两个功能函数;
•3D矩阵:CSS3中3D变形中和2D变形一样也有一个3D矩阵功能函数matrix3d()。

还有以下几个转换属性:
•transform-style: 规定被嵌套元素如何在 3D 空间中显示。
•perspective: 规定 3D 元素的透视效果。
•perspective-origin: 规定 3D 元素的底部位置。
•backface-visibility: 定义元素在不面对屏幕时是否可见。

目前各大主流浏览器对transform 3d属性的兼容性还不是特别好,感兴趣的读者可以自行深入了解。下面我们介绍几个常用的功能方法:

rotateX()方法,围绕其在一个给定度数X轴旋转的元素;
rotateY()方法,围绕其在一个给定度数Y轴旋转的元素;
rotateZ()方法,围绕其在一个给定度数Z轴旋转的元素。

JavaScript Code复制内容到剪贴板
  1. <!DOCTYPEhtml>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>transform3d</title>
  6. <styletype="text/css">
  7. *{
  8. margin:0;
  9. padding:0;
  10. }
  11. #container{
  12. width:440px;
  13. height:120px;
  14. border:1pxsolidblue;
  15. margin:20pxauto;
  16. padding:20px20px;
  17. }
  18. #div1,#div2,#div3,#div4{
  19. height:100px;
  20. width:100px;
  21. border:1pxdashedred;
  22. display:inline-block;
  23. }
  24. #div1div{
  25. height:100px;
  26. width:100px;
  27. background:#63F7ED;
  28. transform:rotateX(45deg);/*W3C标准*/
  29. -webkit-transform:rotateX(45deg));/*Safari和Chrome*/
  30. }
  31. #div2{margin-left:50px;}
  32. #div2div{
  33. height:100px;
  34. width:100px;
  35. background:#63F7ED;
  36. transform:rotateY(45deg);/*W3C标准*/
  37. -webkit-transform:rotateY(45deg));/*Safari和Chrome*/
  38. }
  39. #div3{margin-left:50px;}
  40. #div3div{
  41. height:100px;
  42. width:100px;
  43. background:#63F7ED;
  44. transform:rotateZ(45deg);/*W3C标准*/
  45. -webkit-transform:rotateZ(45deg));/*Safari和Chrome*/
  46. }
  47. </style>
  48. </head>
  49. <body>
  50. <divid="container">
  51. <divid="div1">
  52. <div>rotateX(45deg)</div>
  53. </div>
  54. <divid="div2">
  55. <div>rotateY(45deg)</div>
  56. </div>
  57. <divid="div3">
  58. <div>rotateZ(45deg)</div>
  59. </div>
  60. </div>
  61. </body>
  62. </html>

下面是显示效果:

到此这篇关于CSS3中Transform动画属性用法详解就介绍到这了。为忍人所不能忍,方得人所不能得!!更多相关CSS3中Transform动画属性用法详解内容请查看相关栏目,小编编辑不易,再次感谢大家的支持!

您可能有感兴趣的文章
CSS transform-origin属性的理解

浅谈CSS3中的变形功能-transform功能

CSS3中的transform属性进行2D和3D变换的基本用法

CSS3的常见transformation图形变化用法小结

深入剖析CSS变形transform(3d)