CSS3轉(zhuǎn)換、過渡與動畫

CSS轉(zhuǎn)換

CSS3 Transform(讓元素在一個坐標(biāo)系統(tǒng)中變形,可移動、旋轉(zhuǎn)和縮放元素)
transform : none / <transform-function> [ <transform-function> ]*;
/*默認(rèn)值:transform: none;*/

兼容性:IE10+、FireFox16+、Chrome36+、Safari16+、Opera23+

2D轉(zhuǎn)換 - rotate

rotate(通過指定的角度參數(shù)對原元素指定一個2D 旋轉(zhuǎn))
   -webkit-transform: rotate(45deg);
      -moz-transform: rotate(45deg);
       -ms-transform: rotate(45deg);
        -o-transform: rotate(45deg);
           transform: rotate(45deg);
/*angle指旋轉(zhuǎn)角度,正數(shù)表示順時針旋轉(zhuǎn),負(fù)數(shù)表示逆時針旋轉(zhuǎn)*/

2D轉(zhuǎn)換 - translate

translateX(x)(僅水平方向移動)
transform: translateX(<translation-value>);
translateY(Y)(僅垂直方向移動)
transform: translateY(<translation-value>);
translate(x, y)(水平方向和垂直方向同時移動)
transform: translate(<translation-value>[, <translation-value>]);
/*只寫其中一個則只有水平 / 垂直移動*/

2D轉(zhuǎn)換 - scale

scaleX(x)(使元素僅水平方向縮放)
transform: scaleX(<number>);
/* scale()中不能用 % */
scaleY(y)(使元素僅垂直方向縮放)
transform: scaleY(<number>);
scale(x, y)(使元素水平方向和垂直方向同時縮放)
transform: scale(<number>[, <number>]);

2D轉(zhuǎn)換 - skew

skewX(x)(使元素在水平方向扭曲變形)
transform: skewX(<angle>);
/*逆時針deg為正,順時針deg為負(fù),與rotate相反*/
skewY(y)(使元素在垂直方向扭曲變形)
transform: scaleX(<number>);
/*逆時針deg為負(fù),順時針deg為正,與rotate相同*/
skew(x, y)(使元素在水平和垂直方向同時扭曲)
transform: scaleX(<number>);
/*只寫其中一個則只有水平 / 垂直扭曲*/

3D轉(zhuǎn)換 - rotate

rotateX(指定對象在x軸上的旋轉(zhuǎn)角度)
transform: rotateX(angle);
rotateY(指定對象在y軸上的旋轉(zhuǎn)角度)
transform: rotateY(angle);
rotateZ(指定對象在z軸上的旋轉(zhuǎn)角度)
transform: rotateZ(angle);
rotate3d(指定對象的3D旋轉(zhuǎn)角度)
transform: rotate3d(x, y, z, angle);
/*參數(shù)不允許省略*/

3D轉(zhuǎn)換 - translate

translateZ(指定對象Z軸的平移,看不出來)
transform: translateZ(z);
translate3d(指定對象的3D位移)
transform: translate3d(x, y, z);
/*參數(shù)不允許省略*/

3D轉(zhuǎn)換 - scale

縮放scaleZ(指定對象的z軸縮放,看不出來)
transform: scaleZ(z);
scale3d(指定對象的3D縮放)
transform: scale3d(x, y, z);
/*參數(shù)不允許省略*/

Transform與坐標(biāo)系統(tǒng)

transform-origin(允許更改轉(zhuǎn)換元素的位置,即轉(zhuǎn)軸)
transform-origin: x-axis y-axis z-axis;
/*單位px / % / left / top / ...*/

CSS3 矩陣

matrix(元素2D平面的移動變換(transform),2D變換矩陣為3*3)
transform: matrix(a, b, c, d, tx, ty);
/*transform: matrix(1, 0, 0, 1, 30, 30);
對應(yīng) a=1, b=0, c=0, d=1, e=30, f=30
根據(jù)這個矩陣偏移元素的中心點,假設(shè)是(0, 0),即x = 0, y = 0
變換后,x=ax+cy+e=1*0+0*0+30=30,y=bx+dy+f=0*0+0*1+30=30
于是,整個元素的中心點從(0, 0)變成了(30, 30),整個元素就發(fā)生了平移
所以transform: matrix(1, 0, 0, 1, x, y)等同于transform: translate(x, y)*/

注意:matrix在FF瀏覽器下需添加單位,webkit內(nèi)核默認(rèn)px

matrix3d(元素3D的移動變換(transform),3D變換則是4*4的矩陣)
transform: matrix3d(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);
/*等同于transform: scale3d(x, y, z);*/

CSS3 矩陣轉(zhuǎn)換

矩陣matrix縮放(scale)

matrix(sx, 0, 0, sy, 0, 0) —— scale(sx, sy)

矩陣matrix旋轉(zhuǎn)(rotate)

matrix(cosθ, sinθ, -sinθ, cosθ, 0, 0) —— rotate(θdeg)

矩陣matrix拉伸(skew)

matrix(1, tanθy, tanθx, 1, 0, 0) —— skew(θxdeg, θydeg)

CSS3 矩陣應(yīng)用

矩陣matrix鏡像對稱效果
y=kx.jpg
transform: matrix((1-k*k) / (1+k*k), 2k / (1 + k*k), 2k / (1 + k*k), (k*k - 1) / (1+k*k), 0, 0);

CSS3 擴展屬性

transform-style(指定嵌套元素是怎樣在三維空間中呈現(xiàn))
  -webkit-transform-style: preserve-3d;
     -moz-transform-style: preserve-3d;
      -ms-transform-style: preserve-3d;
       -o-transform-style: preserve-3d;
          transform-style: preserve-3d;
/*默認(rèn)值:transform-style: flat; 屬性寫在父元素上*/
perspective(指定觀察者與「z=0」平面的距離,使具有三維位置變換的元素產(chǎn)生透視效果)
  -webkit-perspective: 500px;
     -moz-perspective: 500px;
      -ms-perspective: 500px;
       -o-perspective: 500px;
          perspective: 500px;
/*默認(rèn)值:none*/
perspective-origin(指定透視點的位置)
  -webkit-perspective-origin: x-axis y-axis;
     -moz-perspective-origin: x-axis y-axis;
      -ms-perspective-origin: x-axis y-axis;
       -o-perspective-origin: x-axis y-axis;
          perspective-origin: x-axis y-axis;
/*默認(rèn)值:perspective-origin: 50% 50%;*/
backface-visibility(指定元素背面(翻轉(zhuǎn)后朝向)面向用戶時是否可見)
backface-visibility: visible / hidden;
/*默認(rèn)值:visible*/

CSS3 過渡(Transition)

允許css的屬性值在一定的時間區(qū)間內(nèi)平滑地過渡,在鼠標(biāo)單擊、獲得焦點、被點擊或?qū)υ厝魏胃淖冎杏|>發(fā),并圓滑地以動畫效果改變CSS的屬性值。
兼容性:IE10+、FireFox16+、Chrome26+、Safari6.1+、Opera12.1+

transition-property(規(guī)定設(shè)置過渡效果的 CSS 屬性名)
   -webkit-transition-property: none / all / property;
      -moz-transition-property: none / all / property;
       -ms-transition-property: none / all / property;
        -o-transition-property: none / all / property;
           transition-property: none / all / property;
/*參數(shù)說明
- none
- all,默認(rèn)值
- property(CSS屬性名) 例如color、opacity...*/
transition-duration(規(guī)定完成過渡效果需要多少時間)
transition-duration: time;
/*參數(shù)說明
- 規(guī)定完成過渡效果需要花費的時間(以秒或毫秒計)
- 默認(rèn)值是 0*/
transition-timing-function(規(guī)定速度效果的速度曲線)
transition-timing-function: ease / linear / ease-in / ease-out / ease-in-out
                            step-start / step-end / steps(<integer>, [ start / end ]) 
                            cubic-bezier(<number>, <number>, <number>, <number>);
/*參數(shù)說明
? linear:線性過渡。等同于貝塞爾曲線(0.0, 0.0, 1.0, 1.0)
? ease:平滑過渡。等同于貝塞爾曲線(0.25, 0.1, 0.25, 1.0)
? ease-in:由慢到快。等同于貝塞爾曲線(0.42, 0, 1.0, 1.0)
? ease-out:由快到慢。等同于貝塞爾曲線(0, 0, 0.58, 1.0)

? ease-in-out:由慢到快再到慢。等同于貝塞爾曲線(0.42, 0, 0.58, 1.0)(最佳效果)

? step-start:等同于 steps(1, start)
? step-end:等同于 steps(1, end)
? steps(<integer>[, [ start | end ] ]?):接受兩個參數(shù)的步進(jìn)函數(shù)
                                         第一個參數(shù):必須為正整數(shù),指定函數(shù)的步數(shù)
                                         第二個參數(shù):取值可是start或end,指定每一步的值發(fā)生變化的時間點
                                         第二個參數(shù):可選,默認(rèn)值為end
? cubic-bezier(<number>, <number>, <number>, <number>):
  特定的貝塞爾曲線類型,4個數(shù)值需在[0, 1]區(qū)間內(nèi)*/
transition-delay(定義過渡效果何時開始)
transition-delay: time;
/*參數(shù)說明
- 指定秒或毫秒數(shù)之前要等待切換效果開始
- 默認(rèn)值是 0*/
transition復(fù)合寫法
transition: property duration timing-function delay;

CSS3動畫

兼容性:IE10+、FireFox16+、Chrome43+、Safari9+、Opera30+、Android(-webkit-)

animation-name(規(guī)定需要綁定到選擇器的 keyframe 名稱)
animation-name: keyframename / none;
/*參數(shù)說明
 keyframename:指定要綁定到選擇器的關(guān)鍵幀的名稱;
 none:指定有沒有動畫(可用于覆蓋從級聯(lián)的動畫)
*/
Keyframes(關(guān)鍵幀,可以指定任何順序排列來決定Animation動畫變化的關(guān)鍵位置)
@keyframes animationname {
   keyframes-selector {
       css-styles;
   }
}
/*參數(shù)說明
 animationname:必寫項,定義animation的名稱
 keyframes-selector:必寫項,動畫持續(xù)時間的百分比,0-100%、from (0%)、to (100%)
 css-styles:必寫項,一個或多個合法的CSS樣式屬性
 @keyframes animationname在style中單獨寫入
*/
animation-duration(規(guī)定完成動畫所花費的時間,以秒或毫秒計)
animation-duration: time;
/*參數(shù)說明
 time指定動畫播放完成花費的時間。默認(rèn)值為 0,意味著沒有動畫效果
*/
animation-timing-function(規(guī)定動畫的速度曲線)
animation-timing-function: ease / linear / ease-in / ease-out / ease-in-out
                            step-start / step-end / steps(<integer>, [ start / end ]) 
                            cubic-bezier(<number>, <number>, <number>, <number>);
/*參數(shù)說明
? linear:線性過渡。等同于貝塞爾曲線(0.0, 0.0, 1.0, 1.0)
? ease:平滑過渡。等同于貝塞爾曲線(0.25, 0.1, 0.25, 1.0)
? ease-in:由慢到快。等同于貝塞爾曲線(0.42, 0, 1.0, 1.0)
? ease-out:由快到慢。等同于貝塞爾曲線(0, 0, 0.58, 1.0)

? ease-in-out:由慢到快再到慢。等同于貝塞爾曲線(0.42, 0, 0.58, 1.0)(最佳效果)

? step-start:等同于 steps(1, start)
? step-end:等同于 steps(1, end)
? steps(<integer>[, [ start | end ] ]?):接受兩個參數(shù)的步進(jìn)函數(shù)
                                         第一個參數(shù):必須為正整數(shù),指定函數(shù)的步數(shù)
                                         第二個參數(shù):取值可是start或end,指定每一步的值發(fā)生變化的時間點
                                         第二個參數(shù):可選,默認(rèn)值為end
? cubic-bezier(<number>, <number>, <number>, <number>):
  特定的貝塞爾曲線類型,4個數(shù)值需在[0, 1]區(qū)間內(nèi)*/
animation-delay(規(guī)定在動畫開始之前的延遲)
animation-delay: time;
/*參數(shù)說明
 可選。定義動畫開始前等待的時間,以秒或毫秒計。默認(rèn)值為0
 如果值為負(fù),則動畫馬上開始,但會跳過相應(yīng)的時間進(jìn)入動畫
*/
animation-iteration-count(規(guī)定動畫應(yīng)該播放的次數(shù))
animation-iteration-count: infinite / <number>;
/*參數(shù)說明
 <number>為數(shù)字,其默認(rèn)值為“1”;infinite為無限次數(shù)循環(huán)
*/
animation-direction(規(guī)定是否應(yīng)該輪流反向播放動畫)
animation-direction: normal / reverse / alternate / alternate-reverse / initial / inherit;
/*參數(shù)說明
 normal:正常方向
 reverse:反方向運行
 alternate:先正后反,并持續(xù)交替運行(需依賴infinite)
 alternate-reverse:先反后正,并持續(xù)交替運行(需依賴infinite)
*/
animation-fill-mode(規(guī)定當(dāng)動畫完成或當(dāng)動畫有延遲未開始播放時,要應(yīng)用到元素的樣式)
animation-fill-mode: none / forwards / backwards / both / initial / inherit;
/*參數(shù)說明
 none:默認(rèn)值。不設(shè)置對象動畫之外的狀態(tài)
 forwards:設(shè)置對象狀態(tài)為動畫結(jié)束時的狀態(tài)
 backwards:設(shè)置對象狀態(tài)為動畫開始時的狀態(tài)
 both:設(shè)置對象狀態(tài)為動畫結(jié)束或開始的狀態(tài)
*/
animation-play-state(規(guī)定動畫運行或暫停)
animation-play-state: paused / running;
/*參數(shù)說明
 paused:指定暫停動畫
 running:默認(rèn)值,指定正在運行的動畫
*/
animation(復(fù)合寫法)
animation: name duration timing-function delay iteration-count direction fill-mode play-state;
/*參數(shù)說明
 默認(rèn)寫在前面的時間為duration
*/
will-change(增強頁面渲染性能)

即提前通知瀏覽器元素將要做什么動畫,讓瀏覽器提前準(zhǔn)備合適的優(yōu)化設(shè)置

will-change: auto / scroll-position / contents / <custom-ident> / <animateable-feature>;
/*參數(shù)說明
 auto:此關(guān)鍵字表示沒有特定的意圖,適用于它通常所做的任何啟發(fā)式和優(yōu)化
 scroll-position:表示將要改變元素的滾動位置
 contents:表示將要改變元素的內(nèi)容
 <custom-ident>:明確指定將要改變的屬性與給定的名稱
 <animateable-feature>:可動畫的一些特征值,比如left、top、margin等
*/
兼容性:IE13+、FireFox47+、Chrome49+、Safari9.1+、Opera39+、IOS9.3+、Android52+
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容