CSS3中Transform動畫屬性用法詳解

css3在原來的基礎(chǔ)上增加了變形和動畫相關(guān)的屬性,動畫三兄弟:transform、transition和animation,通過使用這三個屬性可以達(dá)到很炫酷的效果。需要注意的是這三個屬性都是css3新增的屬性,各大瀏覽器支持方面還不是特別好,使用時要特別注意瀏覽器的兼容性,本文重點(diǎn)介紹Transform的使用方法,具體內(nèi)容如下
瀏覽器支持情況:
Internet Explorer 10、Firefox、Opera 支持 transform 屬性。
Internet Explorer 9 支持替代的 -ms-transform 屬性(僅適用于 2D 轉(zhuǎn)換)。
Safari 和 Chrome 支持替代的 -webkit-transform 屬性(3D 和 2D 轉(zhuǎn)換)。
Opera 只支持 2D 轉(zhuǎn)換。
2D transform變換方法
•translate(x, y)方法,根據(jù)左(X軸)和頂部(Y軸)位置給定的參數(shù),從當(dāng)前元素位置移動。x, y的值可以取正負(fù),分別表示表示向不同的方向偏移。
•rotate(angle)方法, 表示旋轉(zhuǎn)angle角度。angle為正時,按順時針角度旋轉(zhuǎn),為負(fù)值時,元素逆時針旋轉(zhuǎn)。
•scale(x, y)方法,表示元素在x軸和y軸上的縮放比例,參數(shù)大于1時,元素放大,小于1時,元素縮小。
•skew(x-angle,y-angle)方法,用來對元素進(jìn)行扭曲變行,第一個參數(shù)是水平方向扭曲角度,第二個參數(shù)是垂直方向扭曲角度。其中第二個參數(shù)是可選參數(shù),如果沒有設(shè)置第二個參數(shù),那么Y軸為0deg
•matrix(n,n,n,n,n,n)方法, 以一個含六值的變換矩陣的形式指定一個2D變換,此屬性值使用涉及到數(shù)學(xué)中的矩陣,感興趣的讀者可以深入了解一下,這里就不做詳細(xì)介紹了。
下面是上面方法的演示:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>transform 2D演示</title>
- <style type="text/css">
- #container{
- width: 700px;
- height: 120px;
- border: 1px solid blue;
- margin: 20px auto;
- padding: 20px 20px;
- }
- #div1 ,#div2, #div3, #div4{
- height: 100px;
- width: 100px;
- border: 1px dashed red;
- display: inline-block;
- }
- #div1 div{
- height: 100px;
- width: 100px;
- background: #63F7ED;
- transform:translate(20px,10px); /* W3C標(biāo)準(zhǔn) */
- -ms-transform:translate(20px,10px); /* IE 9 */
- -moz-transform:translate(20px,10px); /* Firefox */
- -webkit-transform:translate(20px,10px); /* Safari 和 Chrome */
- -o-transform:translate(20px,10px); /* Opera */
- }
- #div2{margin-left: 50px;}
- #div2 div{
- height: 100px;
- width: 100px;
- background: #63F7ED;
- transform:rotate(45deg); /* W3C標(biāo)準(zhǔn) */
- -ms-transform:rotate(45deg); /* IE 9 */
- -moz-transform:rotate(45deg); /* Firefox */
- -webkit-transform:rotate(45deg); /* Safari 和 Chrome */
- -o-transform:rotate(45deg); /* Opera */
- }
- #div3{margin-left: 100px;}
- #div3 div{
- height: 100px;
- width: 100px;
- background: #63F7ED;
- transform:scale(2,0.5); /* W3C標(biāo)準(zhǔn) */
- -ms-transform:scale(2,0.5); /* IE 9 */
- -moz-transform:scale(2,0.5); /* Firefox */
- -webkit-transform:scale(2,0.5); /* Safari 和 Chrome */
- -o-transform:scale(2,0.5); /* Opera */
- }
- #div4{margin-left: 100px;}
- #div4 div{
- height: 100px;
- width: 100px;
- background: #63F7ED;
- transform:skew(30deg,-20deg); /* W3C標(biāo)準(zhǔn) */
- -ms-transform:skew(30deg,-20deg); /* IE 9 */
- -moz-transform:skew(30deg,-20deg); /* Firefox */
- -webkit-transform:skew(30deg,-20deg); /* Safari 和 Chrome */
- -o-transform:skew(30deg,-20deg); /* Opera */
- }
- </style>
- </head>
- <body>
- <div id="container">
- <div id="div1">
- <div>translate</div>
- </div>
- <div id="div2">
- <div>rotate</div>
- </div>
- <div id="div3">
- <div>scale</div>
- </div>
- <div id="div4">
- <div>skew</div>
- </div>
- </div>
- </body>
- </html>
效果如下:
transform-origin 屬性
前面我們提到的transform的方法都是基于元素的中心來變換的,也就是元素變換的基點(diǎn)默認(rèn)是元素的中心。但是有時候我們需要在不同的位置對元素進(jìn)行這些操作,那么我們就可以使用transform-origin來對元素進(jìn)行基點(diǎn)位置改變。該屬性可以接收三個參數(shù):
transform-origin: x-axis y-axis z-axis;
•x-axis,表示水平方向上的取值,可以取 字符參數(shù)值left,center right,也可以取百分比,字符參數(shù)值對應(yīng)的百分值為left=0%;center=50%;right=100%。
•y-axis,表示豎直方向上的取值,還可以設(shè)置字符值top,center,bottom,也可以取百分比,字符參數(shù)值對應(yīng)的百分值為top=0%;center=50%;bottom=100%。
•z-axis,表示視圖被置于 Z 軸的何處,用于3D變形中。
我們可以設(shè)置基點(diǎn)來與之前的transform圖形進(jìn)行對比:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>transform-origin演示</title>
- <style type="text/css">
- *{
- margin: 0;
- padding: 0;
- }
- #container{
- width: 800px;
- height: 150px;
- border: 1px solid blue;
- margin: 20px auto;
- padding: 20px 20px;
- }
- #div1 ,#div2, #div3, #div4{
- height: 100px;
- width: 100px;
- border: 1px dashed red;
- display: inline-block;
- }
- #div1 div{
- height: 100px;
- width: 100px;
- background: #63F7ED;
- transform:translate(20px,10px); /* W3C標(biāo)準(zhǔn) */
- -ms-transform:translate(20px,10px); /* IE 9 */
- -moz-transform:translate(20px,10px); /* Firefox */
- -webkit-transform:translate(20px,10px); /* Safari 和 Chrome */
- -o-transform:translate(20px,10px); /* Opera */
- transform-origin:left top; /* W3C標(biāo)準(zhǔn) */
- -ms-transform-origin:left top; /* IE 9 */
- -moz-transform-origin:left top; /* Firefox */
- -webkit-transform-origin:left top; /* Safari 和 Chrome */
- -o-transform-origin:left top; /* Opera */
- }
- #div2{margin-left: 100px;}
- #div2 div{
- height: 100px;
- width: 100px;
- background: #63F7ED;
- transform:rotate(45deg); /* W3C標(biāo)準(zhǔn) */
- -ms-transform:rotate(45deg); /* IE 9 */
- -moz-transform:rotate(45deg); /* Firefox */
- -webkit-transform:rotate(45deg); /* Safari 和 Chrome */
- -o-transform:rotate(45deg); /* Opera */
- transform-origin:0% 0%; /* W3C標(biāo)準(zhǔn) */
- -ms-transform-origin:0% 0%; /* IE 9 */
- -moz-transform-origin:0% 0%; /* Firefox */
- -webkit-transform-origin:0% 0%; /*Safari 和 Chrome */
- -o-transform-origin:0% 0%; /* Opera */
- }
- #div3{margin-left: 50px;}
- #div3 div{
- height: 100px;
- width: 100px;
- background: #63F7ED;
- transform:scale(2,0.5); /* W3C標(biāo)準(zhǔn) */
- -ms-transform:scale(2,0.5); /* IE 9 */
- -moz-transform:scale(2,0.5); /* Firefox */
- -webkit-transform:scale(2,0.5); /* Safari 和 Chrome */
- -o-transform:scale(2,0.5); /* Opera */
- transform-origin:center top; /* W3C標(biāo)準(zhǔn) */
- -ms-transform-origin:center top; /* IE 9 */
- -moz-transform-origin:center top; /* Firefox */
- -webkit-transform-origin:center top; /* Safari 和 Chrome */
- -o-transform-origin:center top;
- }
- #div4{margin-left: 150px;}
- #div4 div{
- height: 100px;
- width: 100px;
- background: #63F7ED;
- transform:skew(30deg,-20deg); /* W3C標(biāo)準(zhǔn) */
- -ms-transform:skew(30deg,-20deg); /* IE 9 */
- -moz-transform:skew(30deg,-20deg); /* Firefox */
- -webkit-transform:skew(30deg,-20deg); /* Safari 和 Chrome */
- -o-transform:skew(30deg,-20deg); /* Opera */
- transform-origin:100% 100%; /* W3C標(biāo)準(zhǔn) */
- -ms-transform-origin:100% 100%; /* IE 9 */
- -moz-transform-origin:100% 100%; /* Firefox */
- -webkit-transform-origin:100% 100%; /* Safari 和 Chrome */
- -o-transform-origin:100% 100%;
- }
- </style>
- </head>
- <body>
- <div id="container">
- <div id="div1">
- <div>translate(基點(diǎn)為(left top)</div>
- </div>
- <div id="div2">
- <div>rotate(基點(diǎn)為(0%, 0%)</div>
- </div>
- <div id="div3">
- <div>scale(基點(diǎn)為(center, top)</div>
- </div>
- <div id="div4">
- <div>skew(基點(diǎn)為(100%, 100%)</div>
- </div>
- </div>
- </body>
- </html>
效果如下:
對比發(fā)現(xiàn):translate()方法與之前的沒有區(qū)別,其他三個方法基點(diǎn)改變了,圖形變形效果也有所變化。
3D transform變換方法
Internet Explorer 10 和 Firefox 支持 3D 轉(zhuǎn)換.
Chrome 和 Safari 必須添加前綴 -webkit-.
Opera 還不支持 3D 轉(zhuǎn)換(支持 2D 轉(zhuǎn)換 ).
三維變換使用基于二維變換的相同屬性。CSS3中的3D變換主要包括以下幾種功能函數(shù):
•3D位移:CSS3中的3D位移主要包括translateZ()和translate3d()兩個功能函數(shù);
•3D旋轉(zhuǎn):CSS3中的3D旋轉(zhuǎn)主要包括rotateX()、rotateY()、rotateZ()和rotate3d()四個功能函數(shù);
•3D縮放:CSS3中的3D縮放主要包括scaleZ()和scale3d()兩個功能函數(shù);
•3D矩陣:CSS3中3D變形中和2D變形一樣也有一個3D矩陣功能函數(shù)matrix3d()。
還有以下幾個轉(zhuǎn)換屬性:
•transform-style: 規(guī)定被嵌套元素如何在 3D 空間中顯示。
•perspective: 規(guī)定 3D 元素的透視效果。
•perspective-origin: 規(guī)定 3D 元素的底部位置。
•backface-visibility: 定義元素在不面對屏幕時是否可見。
目前各大主流瀏覽器對transform 3d屬性的兼容性還不是特別好,感興趣的讀者可以自行深入了解。下面我們介紹幾個常用的功能方法:
rotateX()方法,圍繞其在一個給定度數(shù)X軸旋轉(zhuǎn)的元素;
rotateY()方法,圍繞其在一個給定度數(shù)Y軸旋轉(zhuǎn)的元素;
rotateZ()方法,圍繞其在一個給定度數(shù)Z軸旋轉(zhuǎn)的元素。
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>transform 3d </title>
- <style type="text/css">
- *{
- margin: 0;
- padding: 0;
- }
- #container{
- width: 440px;
- height: 120px;
- border: 1px solid blue;
- margin: 20px auto;
- padding: 20px 20px;
- }
- #div1 ,#div2, #div3, #div4{
- height: 100px;
- width: 100px;
- border: 1px dashed red;
- display: inline-block;
- }
- #div1 div{
- height: 100px;
- width: 100px;
- background: #63F7ED;
- transform:rotateX(45deg); /* W3C標(biāo)準(zhǔn) */
- -webkit-transform:rotateX(45deg)); /* Safari 和 Chrome */
- }
- #div2{margin-left: 50px;}
- #div2 div{
- height: 100px;
- width: 100px;
- background: #63F7ED;
- transform:rotateY(45deg); /* W3C標(biāo)準(zhǔn) */
- -webkit-transform:rotateY(45deg)); /* Safari 和 Chrome */
- }
- #div3{margin-left: 50px;}
- #div3 div{
- height: 100px;
- width: 100px;
- background: #63F7ED;
- transform:rotateZ(45deg); /* W3C標(biāo)準(zhǔn) */
- -webkit-transform:rotateZ(45deg)); /* Safari 和 Chrome */
- }
- </style>
- </head>
- <body>
- <div id="container">
- <div id="div1">
- <div>rotateX(45deg)</div>
- </div>
- <div id="div2">
- <div>rotateY(45deg)</div>
- </div>
- <div id="div3">
- <div>rotateZ(45deg)</div>
- </div>
- </div>
- </body>
- </html>
下面是顯示效果:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
- 這篇文章主要為大家詳細(xì)介紹了CSS3中Transition動畫屬性用法,教大家如何使用Transition動畫,感興趣的小伙伴們可以參考一下2016-07-04
- 這篇文章主要為大家詳細(xì)介紹了CSS3中Animation動畫屬性用法,教大家如何使用animation動畫,感興趣的小伙伴們可以參考一下2016-07-04
CSS3中的Transition過度與Animation動畫屬性使用要點(diǎn)
這篇文章主要介紹了CSS3中的Transition過度與Animation動畫屬性使用要點(diǎn)Transition和Animation能被用來制作基本的頁面圖片動態(tài)效果,當(dāng)然進(jìn)一步的控制還是需要JavaScript的2016-05-20- 下面小編就為大家?guī)硪黄钊肜斫鈉ss屬性的選擇對動畫性能的影響。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考2016-04-20
jQuery利用CSS3的keyframes屬性實(shí)現(xiàn)飛翔的小鳥動畫特效
jQuery利用CSS3的keyframes屬性實(shí)現(xiàn)飛翔的小鳥動畫特效是一款利用css3的keyframes屬性制作的飛翔的小鳥動畫特效。小鳥飛翔速度有快有慢,效果非常逼真,對本段代碼感興趣的2016-02-14- CSS3實(shí)現(xiàn)僵尸行Sprite動畫特效源碼是一款使用animation動畫的steps屬性制作的僵尸行走CSS3 Sprite動畫特效的代碼,形成僵尸走路的動畫效果2015-12-10
css動畫屬性使用及實(shí)例代碼(transition/transform/animation)
這篇文章主要介紹了css動畫屬性使用及實(shí)例代碼(transition/transform/animation) ,需要的朋友可以參考下2019-05-09