CSS3 建構過程,時常會需要用到動畫設計,所以就將相關的參數及使用記錄下來,方便之後查詢及使用~

瀏覽器前綴

在使用任何CSS3高級屬性時,建議都要搭配瀏覽器前綴,讓屬性效果可以在各瀏覽器有更好的支援

-moz-{屬性}Firefox 瀏覽器
-webkit-{屬性}Safari, Chrome, Opera 等瀏覽器
-o-{屬性} Opera 瀏覽器
-ms-{屬性} IE 瀏覽器

Transition

Transition 可以用來設定基礎的動畫效果,直接指定要產生變化的css屬性

需注意的是,並非所有css屬性都有支援 transition,可以參考這裡

.set_background{
    background: black;
    transition: background 0.3s linear;
}
.set_background:hover{
    background:white;
    transition: background 0.3s linear;
}

通常需要跨瀏覽器支援的情況,要用下面的方式來寫會比較保險

.set_background{
    background: black;
    -webkit-transition: background 0.3s linear;
    -moz-transition: background 0.3s linear;
    -o-transition: background 0.3s linear;
    -ms-transition: background 0.3s linear;
    transition: background 0.3s linear;
}

其實,Transition 有包含下面幾個屬性,只是通常我們都會簡寫成一行

名稱 說明
transition-property 指定要做 transition 的CSS屬性
transition-duration transition 執行時間(s or ms)
transition-delay 延遲執行時間 (s or ms)
transition-timing-function 動態執行參數

並且,transition-duration 與 transition-delay 有前後關係

另外,transition-timing-function 常見參數有以下幾個

  • linear: 平均速度
  • ease: 快入緩出 (預設)
  • ease-in: 緩入
  • ease-out: 緩出
  • ease-in-out: 緩入緩出
  • cubic-bezier: 自定義速度模式

Animation

使用 animation 可以製作比較複雜的css3動態效果

可以搭配 frome to 的方式來設定動畫

.set_background{
    animation: 0.9s myCustomAnimate
}

@keyframes myCustomAnimate{
	from {background: black;}
  to {background: white;}
}

也可以用百分比(%)的方式來設定

.set_background{
    animation: 0.9s myCustomAnimate
}

@keyframes myCustomAnimate{
	0% {background: black;}
  50% {background: yellow;}
  100% {background: white;}
}

Animation 包含了下面所列的屬性,可以分別應用

名稱 說明
animation-name 動畫名稱
animation-duration 動畫執行1次所需的時間(s or ms)
animation-timing-function 動態執行參數
animation-delay 延遲執行時間 (s or ms)
animation-iteration-count 播放次數 (可設定數字或 infinite設定為無限)
animation-direction 播放方向/順序
animation-fill-mode 指定動畫播放完畢的狀態
animation-play-state 指定動畫播放或暫停

此外,

animation-direction 有下列參數可以使用

  • normal(正常播放)
  • reverse (反向播放)
  • alternate (正向撥放,再反向播放)
  • alternate-reverse (反向撥放,再正向播放)

animation-fill-mode 有下列參數可以使用

  • none (回到最初未撥放狀態)
  • forwards (停在最後一個狀態)
  • backwards (停在第一個狀態)
  • both (停留在 animation-direction 最後一個狀態)

animation-play-state 必須獨立設定,並且有兩個屬性可以使用

  • running (預設播放)
  • paused (暫停播放)

Transform

CSS3 的 transform 屬性可以控制HTML元素,讓網頁元素做出旋轉、縮放、移動等效果

類型 參數 說明
轉換 translateX(x) 1D轉換,從參考點向 X軸移動 x距離
轉換 translateY(y) 1D轉換,從參考點向 Y軸移動 y距離
轉換 translateZ(z) 1D轉換,從參考點向 Z軸移動 z距離
轉換 translate(x,y) 2D轉換,從參考點向 X軸移動 x距離,Y軸移動 y距離
轉換 translate3d(x,y,z) 3D轉換,從參考點向 X軸移動 x距離,Y軸移動 y距離,Z軸移動 z距離
縮放 scaleX(x) 2D縮放,從參考點向 X軸縮放
縮放 scaleY(y) 2D縮放,從參考點向 Y軸縮放
縮放 scaleZ(z) 2D縮放,從參考點向 Z軸縮放
旋轉 rotateX(n) 從X軸為參考點旋轉n角度
旋轉 rotateY(n) 從Y軸為參考點旋轉n角度
旋轉 rotateZ(n) 從Z軸為參考點旋轉n角度
旋轉 rotate(n) 從中心為參考點旋轉n角度
旋轉 rotate3d(x,y,z,n) 3D旋轉,從設定參考點中心旋轉n角度
傾斜 skewX(n) 從X軸為參考點傾斜n角度
傾斜 skewY(n) 從Y軸為參考點傾斜n角度
矩陣 matrix(n1, n2, n3, n4, n5, n6) 2D動畫,設定 6 個值設定變化效果
矩陣 matrix(n1, n2, ………., n16) 3D動畫,設定 16 個值設定變化效果

使用方式如下:

.my_box:hover{
  -webkit-transform: translateX(-50%) scale3d(1,1,1);
  -ms-transform: translateX(-50%) scale3d(1,1,1);
  transform: translateX(-50%) scale3d(1,1,1);
  -webkit-transition: -webkit-transform .22s ease-in;
  -ms-transition: -ms-transform .22s ease-in;
	transition: transform .22s ease-in;
}

但是,在實際運用 CSS3 transform 時,必須要留意效能問題

畢竟 transform 會透過操作 DOM 座標或內容來運算出特效變化,同一頁面中,要避免使用太多