CSS3 中的動畫

動畫是使元素從一種樣式逐漸變化爲另一種樣式的效果。通過 CSS3,能夠創建動畫,這可以在許多網頁中取代動畫圖片、Flash 動畫以及 JavaScript。

如需在 CSS3 中創建動畫,需要學習 @keyframes 規則。

@keyframes 規則用於創建動畫。在 @keyframes 中規定某項 CSS 樣式,就能創建由當前樣式逐漸改爲新樣式的動畫效果。通過 animation 相關動畫屬性完成整個 CSS3 動畫效果。

1.@keyframes 指定動畫名稱和動畫效果

@keyframes定義的動畫名稱用來被animation-name所使用。

定義動畫時,簡單的動畫可以直接使用關鍵字from和to,即從一種狀態過渡到另一種狀態。

語法:

@keyframes <identifier> { <keyframes-blocks> }

<keyframes-blocks>:[ [ from | to | <percentage> ]{ sRules } ] [ [ , from | to | <percentage> ]{ sRules } ]

取值:

  • <identifier>:identifier定義一個動畫名稱
  • <keyframes-blocks>:定義動畫在每個階段的樣式,即幀動畫

示例:

@keyframes testanimations {
    from { transform: translate(0, 0); }
    20% { transform: translate(20px, 20px); }
    40% { transform: translate(40px, 0); }
    60% { transform: translate(60px, 20); }
    80% { transform: translate(80px, 0); }
    to { transform: translate(100px, 20px); }
}
/* 或者 */
@keyframes testanimations{
    0% { transform: translate(0, 0); }
    20% { transform: translate(20px, 20px); }
    40% { transform: translate(40px, 0); }
    60% { transform: translate(60px, 20px); }
    80% { transform: translate(80px, 0); }
    100% { transform: translate(100px, 20px); }
}
2.animation-name 檢索或設置對象所應用的動畫名稱

必須與規則 @keyframes 配合使用,因爲動畫名稱由@keyframes定義。如果提供多個屬性值,以逗號進行分隔。

語法:

animation-name:<single-animation-name>[,<single-animation-name>]

<single-animation-name> = none | <identifier>

取值:

  • none:不引用任何動畫名稱
  • <identifier>:定義一個或多個動畫名稱(identifier標識)

示例:

@keyframes slide{
    0%{transform:scale(0);opacity:0;}
    40%{transform:scale(1);opacity:1;}
    100%{opacity:1;}
}
@-webkit-keyframes slide{
    0%{-webkit-transform:scale(0);opacity:0;}
    40%{-webkit-transform:scale(1);opacity:1;}
    100%{opacity:1;}
}
.slide-box{
    animation-name: slide;
}
3.animation-duration 設置對象動畫的持續時間

如果提供多個屬性值,以逗號進行分隔。

語法:

animation-duration:<time>[,<time>]

取值:

  • <time>:指定對象動畫的持續時間

示例:

.slide-box{
    animation-duration: .8s;
}
4.animation-timing-function 設置對象動畫的過渡類型

如果提供多個屬性值,以逗號進行分隔。

語法:

animation-timing-function:<single-animation-timing-function>[,<single-animation-timing-function>]

<single-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>)

取值:

  • 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 ] ]?):接受兩個參數的步進函數。第一個參數必須爲正整數,指定函數的步數。第二個參數取值可以是start或end,指定每一步的值發生變化的時間點。第二個參數是可選的,默認值爲end。
  • cubic-bezier(<number>, <number>, <number>, <number>):特定的貝塞爾曲線類型,4個數值需在[0, 1]區間內

示例:

.slide-box{
    animation-timing-function: ease-in;
}
5.animation-delay 設置對象動畫的延遲時間

如果提供多個屬性值,以逗號進行分隔。

語法:

animation-delay:<time>[,<time>]

取值:

  • <time>:指定對象動畫延遲的時間

示例:

.slide-box{
    animation-delay: .5s;
}
6.animation-iteration-count 設置對象動畫的循環次數

如果提供多個屬性值,以逗號進行分隔。

語法:

animation-iteration-count:<single-animation-iteration-count>[,<single-animation-iteration-count>]

<single-animation-iteration-count> = infinite | <number>

取值:

  • infinite:無限循環
  • <number>:指定對象動畫的具體循環次數

示例:

.slide-box{
    animation-iteration-count: infinite;/* 無限循環 */
}
7.animation-direction 設置對象動畫在循環中是否反向運動

如果提供多個屬性值,以逗號進行分隔。

語法:

animation-direction:<single-animation-direction>[,<single-animation-direction>]

<single-animation-direction> = normal | reverse | alternate | alternate-reverse

取值:

  • normal:正常方向
  • reverse:反方向運行
  • alternate:動畫先正常運行再反方向運行,並持續交替運行
  • alternate-reverse:動畫先反運行再正方向運行,並持續交替運行

示例:

.slide-box{
    animation-direction: reverse;/* 反方向運行循環 */
}
8.animation-play-state 設置對象動畫的狀態

如果提供多個屬性值,以逗號進行分隔。

語法:

animation-play-state:<single-animation-play-state>[,<single-animation-play-state>]

<single-animation-play-state> = running | paused

取值:

  • running:運動
  • paused:暫停

示例:

.slide-box{
    animation-play-state: running;
}
9.animation-fill-mode 設置對象動畫時間之外的狀態

如果提供多個屬性值,以逗號進行分隔。

語法:

animation-fill-mode:<single-animation-fill-mode>[,<single-animation-fill-mode>]

<single-animation-fill-mode> = none | forwards | backwards | both

取值:

  • none:默認值。不設置對象動畫之外的狀態
  • forwards:設置對象狀態爲動畫結束時的狀態
  • backwards:設置對象狀態爲動畫開始時的狀態
  • both:設置對象狀態爲動畫結束或開始的狀態

示例:

.slide-box{
    animation-fill-mode: backwards;
}
10.animation 複合屬性,設置對象所應用的動畫特效

如果提供多組屬性值,以逗號進行分隔。

注意:如果只提供一個<time>參數,則爲 <' animation-duration '> 的值定義;如果提供二個<time>參數,則第一個爲 <' animation-duration '> 的值定義,第二個爲 <' animation-delay '> 的值定義。

語法:

animation:<single-animation>[,<single-animation>]

<single-animation> = <single-animation-name> || <time> || <single-animation-timing-function> || <time> || <single-animation-iteration-count> || <single-animation-direction> || <single-animation-fill-mode> || <single-animation-play-state>

取值:

  • <' animation-name '>:檢索或設置對象所應用的動畫名稱
  • <' animation-duration '>:檢索或設置對象動畫的持續時間
  • <' animation-timing-function '>:檢索或設置對象動畫的過渡類型
  • <' animation-delay '>:檢索或設置對象動畫延遲的時間
  • <' animation-iteration-count '>:檢索或設置對象動畫的循環次數
  • <' animation-direction '>:檢索或設置對象動畫在循環中是否反向運動
  • <' animation-fill-mode '>:檢索或設置對象動畫時間之外的狀態
  • <' animation-play-state '>:檢索或設置對象動畫的狀態。w3c正考慮是否將該屬性移除,因爲動畫的狀態可以通過其它的方式實現,比如重設樣式

示例:

.slide-box{
    -webkit-animation:animations 2s ease-out forwards;
    animation:animations 2s ease-out forwards;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章