@keyframes

Baseline 廣泛可用 *

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 2015 年 9 月以來,該特性已在各大瀏覽器中可用。

* 此特性的某些部分可能存在不同級別的支援。

@keyframes CSS @規則 透過定義動畫序列中關鍵幀(或中間點)的樣式來控制 CSS 動畫序列的中間步驟。與過渡相比,這能更好地控制動畫序列的中間步驟。

語法

css
@keyframes slide-in {
  from {
    transform: translateX(0%);
  }

  to {
    transform: translateX(100%);
  }
}

<custom-ident>

標識關鍵幀列表的名稱。這必須與 CSS 語法中的識別符號生成匹配。

from

起始偏移量為 0%

改為

結束偏移量為 100%

<percentage>

指定關鍵幀應發生時,動畫序列所經過時間的百分比。

<timeline-range-name> <percentage>

指定關鍵幀應發生時,指定 animation-range 所經過時間的百分比。有關使用命名時間線範圍的動畫型別,請參閱 CSS 滾動驅動動畫

描述

要使用關鍵幀,請建立一個 @keyframes 規則,併為其指定一個名稱,然後透過 animation-name 屬性使用該名稱將動畫與其關鍵幀宣告匹配。每個 @keyframes 規則都包含一個關鍵幀選擇器樣式列表,這些選擇器指定關鍵幀發生時動畫的百分比,以及一個包含該關鍵幀樣式的塊。

您可以按任意順序羅列關鍵幀百分比;它們將按應發生的順序進行處理。

JavaScript 可以透過 CSS 物件模型介面 CSSKeyframesRule 訪問 @keyframes @規則。

有效的關鍵幀列表

如果關鍵幀規則未指定動畫的開始或結束狀態(即 0%/from100%/to),瀏覽器將使用元素的現有樣式作為開始/結束狀態。這可用於使元素從其初始狀態動畫化並返回。

關鍵幀規則中無法動畫化的屬性將被忽略,但受支援的屬性仍將動畫化。

解決重複項

如果給定名稱存在多個關鍵幀集,則使用解析器遇到的最後一個。@keyframes 規則不會級聯,因此動畫絕不會從多個規則集中獲取關鍵幀。

如果某個動畫時間偏移量重複,則該百分比的 @keyframes 規則中的所有關鍵幀都將用於該幀。如果多個關鍵幀指定相同的百分比值,則 @keyframes 規則記憶體在級聯。

當某些關鍵幀中省略屬性時

如果可能,未在每個關鍵幀中指定的屬性將進行插值處理——無法進行插值處理的屬性將從動畫中刪除。例如

css
@keyframes identifier {
  0% {
    top: 0;
    left: 0;
  }
  30% {
    top: 50px;
  }
  68%,
  72% {
    left: 50px;
  }
  100% {
    top: 100px;
    left: 100%;
  }
}

在此處,top 屬性使用 0%30%100% 關鍵幀進行動畫處理,left 屬性使用 0%68%72%100% 關鍵幀進行動畫處理。

當關鍵幀被多次定義時

如果關鍵幀被多次定義,但並非所有受影響的屬性都在每個關鍵幀中,則會考慮這些關鍵幀中指定的所有值。例如

css
@keyframes identifier {
  0% {
    top: 0;
  }
  50% {
    top: 30px;
    left: 20px;
  }
  50% {
    top: 10px;
  }
  100% {
    top: 0;
  }
}

在此示例中,在 50% 關鍵幀處,使用的值是 top: 10pxleft: 20px

Firefox 14 及更高版本支援級聯關鍵幀。

關鍵幀中的 !important

帶有 !important 限定符的關鍵幀中的宣告將被忽略。

css
@keyframes important1 {
  0% {
    margin-top: 50px;
  }
  50% {
    margin-top: 150px !important; /* ignored */
  }
  100% {
    margin-top: 100px;
  }
}

@keyframes important2 {
  from {
    margin-top: 50px;
    margin-bottom: 100px;
  }
  to {
    margin-top: 150px !important; /* ignored */
    margin-bottom: 50px;
  }
}

正式語法

@keyframes = 
@keyframes <keyframes-name> { <qualified-rule-list> }

<keyframes-name> =
<custom-ident> |
<string>

示例

CSS 動畫示例

請參閱使用 CSS 動畫使用滾動驅動動畫滾動動畫元素以獲取示例。

規範

規範
CSS 動畫級別 1
# 關鍵幀

瀏覽器相容性

另見