CSSアニメーション レベル2

W3C作業草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2023/WD-css-animations-2-20230602/
最新公開バージョン:
https://www.w3.org/TR/css-animations-2/
編集者草案:
https://drafts.csswg.org/css-animations-2/
履歴:
https://www.w3.org/standards/history/css-animations-2
フィードバック:
CSSWG課題リポジトリ
仕様内でインライン
編集者:
L. David Baron (Google)
(招待エキスパート)
この仕様への編集提案:
GitHubエディター

概要

このCSSモジュールは、著者がキーフレームを使用してCSSプロパティの値を時間経過とともにアニメーションさせる方法について説明します。これらのキーフレームアニメーションの挙動は、持続時間、繰り返し回数、および繰り返し動作を指定することで制御できます。

CSSは、構造化文書(HTMLやXMLなど)の画面や紙などへのレンダリングを記述する言語です。

この文書のステータス

このセクションは、出版時点でのこの文書のステータスについて説明します。 現在のW3C出版物の一覧や、この技術報告書の最新版は、 https://www.w3.org/TR/ のW3C技術報告書インデックスで確認できます。

この文書は、CSS作業グループによって 作業草案として、 勧告トラックを使用して公開されました。 作業草案としての公開は、W3Cおよびその会員による承認を意味するものではありません。

この文書は草案であり、随時更新、置換、または他の文書によって廃止される可能性があります。 この文書を進行中の作業以外として引用することは適切ではありません。

ご意見は、GitHubで課題を提出(推奨)することでお寄せください。 件名に「css-animations」という仕様コードを含めて、次のようにしてください: 「[css-animations] …コメントの要約…」。 すべての課題とコメントはアーカイブされています。 または、(アーカイブ済み)の公開メーリングリスト www-style@w3.orgへ送信することもできます。

この文書は、2021年11月2日版W3Cプロセス文書に準拠しています。

この文書は、W3C特許ポリシーの下で運用されているグループによって作成されました。 W3Cは、グループの成果物に関連して提出された特許開示の公開リストを管理しています。 そのページには特許を開示するための手順も記載されています。 ある個人が、本質的な請求項を含むと考える特許を実際に知っている場合、 W3C特許ポリシー第6節に従って情報を開示しなければなりません。

1. デルタ仕様

これはデルタ仕様であり、現在はCSS Animations Level 1 [CSS3-ANIMATIONS] からの差分のみを含みます。 Level 1仕様が完成に近づいた時点で、ここに追加された内容と統合されて完全なLevel 2仕様となります。

2. アニメーション

この仕様で定義されたアニメーションプロパティのいずれかに変更があると、 対応する CSSAnimation オブジェクトおよびその関連オブジェクトは、 これらのプロパティと § 3 キーフレームの組み立てで定義されるWeb Animationsの概念との対応に従って更新されます。

ただし、著者がWeb Animationsプログラミングインターフェイスを使用してアニメーションを変更した場合は、 以下のようにプログラミングインターフェイスによる変更が優先されます:

注意、 上記の規則で「正常な呼び出し」が参照されているのは、 これらのメソッドが例外をスローした場合は オーバーライドの挙動が適用されないことを保証するためです。

2.1. 所有要素

所有要素とは、 アニメーションを生成した animation-name プロパティが適用された 要素または疑似要素を指します。

要素の display プロパティが none に設定されていて、 TransitionsとAnimations カスケード起点を無視した場合に display の値が none になるなら、 この 所有要素 の実行中アニメーションを終了します。 要素の displaynone で、 TransitionsとAnimations カスケード起点を無視した場合に display の値が none だった場合、 displaynone 以外に更新すると animation-name プロパティによって適用された すべてのアニメーションが開始されます。

注意: 実際には、display の値が none へのアニメーションは、 スタイルがアニメーションの効果を除いて none に算出されない限り、 実行中アニメーションを終了しません。

この仕様で定義されたマークアップを使用して生成されたアニメーションが、 後に animation-name プロパティの算出値の更新により 所有要素 から切り離された場合、 そのアニメーションは 所有要素 から切り離されます (つまりその時点から 所有要素 を持ちません)。

下記の例では、animation の初期 所有要素elem です。animationelemanimation-name プロパティの算出値の更新によって element から切り離されます。

elem.style.animation = 'spin 1s';
let animation = elem.getAnimations()[0]; // animationの所有要素はelem
elem.style.animation = ''; // animationはもう所有要素を持たない

所有要素 は 多くの場合アニメーションの ターゲット要素 と等しいですが、 必ずしもそうとは限りません。 下記の例は、両者が異なる状況の一部を示しています。

elem.style.animation = 'move 1s';
let animation = elem.getAnimations()[0];
// animation.effect.target == elem == animationの所有要素

animation.effect.target = elem2;
// animation.effect.target == elem2 != animationの所有要素

animation.effect = null;
// animation.effect?.targetはundefined != animationの所有要素

2.2. アニメーション合成順序

アニメーション は この仕様で定義されたマークアップから生成された場合、 animation class が「CSS Animation」となります。

所有要素 を持つCSSアニメーションは、 CSSトランジションよりも、特定の animation class を持たないアニメーションよりもの合成順序になります。

所有要素 を持つCSSアニメーションの集合内では、 2つのアニメーション AB の合成順序(先から後)は以下のようにソートされます:

  1. 所有要素AB で異なる場合、 AB は、それぞれの 所有要素ツリー順序でソートされます。 疑似要素に関する順序は以下の通りです:

    • element

    • ::marker

    • ::before

    • このリストに特記されていないその他の疑似要素は、 各セレクターを構成するUnicodeコードポイントの昇順でソート

    • ::after

    • elementの子

  2. それ以外の場合、AB は、 共通の animation-name プロパティの算出値における 所有要素 での位置によってソートされます。

所有要素 を持たないCSSアニメーションの合成順序は、 global animation list 内の位置に基づきます。

この挙動はトランジションで定義されているものとは異なります。 おそらく、まずトランジション、次にアニメーション、最後にglobal animation listでソートしたほうが良いでしょう。 なぜなら、開発者ツールなどが孤立したアニメーションやトランジションを保持して再生する場合、 合成順序を大体維持する必要があるからです。

この仕様で定義されたマークアップを使って生成されたCSSアニメーションは、作成時に global animation list には追加されません。 代わりに、これらのアニメーションが idle play state から離れた最初の瞬間に global animation list に追加されます(所有要素から切り離された後)。 所有要素 から切り離されてもまだ idle のCSSアニメーションは、 合成順序が定義されません。

注意、 この挙動は、 アニメーションが 所有要素 から切り離されると そのアニメーションが必ず(またはそのまま) idle play state になることに依存しています。

3. キーフレームの組み立て

3.1. キーフレームの宣言: @keyframes 規則

CSS Animations 1 § 3 キーフレーム を参照してください。

3.2. キーフレームの処理

ターゲット(疑似)要素 elementcoordinated value list における N 番目の animation-* プロパティによって定義された各アニメーション効果について、 その関連する キーフレーム は以下のように生成されます:

  1. デフォルトの設定:

    • default timing functionelement 上の computed valueanimation-timing-function とする。

    • default compositeelement 上の computed valueanimation-composition とする。

    • keyframes を空の キーフレームオブジェクトのシーケンスとして初期化する。 各キーフレームは keyframe offset, keyframe timing function, keyframe composite, keyframe values を持つ。

    • animated properties をCSSプロパティ名の空集合として初期化する。

  2. 宣言されたキーフレームを収集:

    1. 文書順で最後に現れる @keyframes at-rule を探し、 対応する animation-name の値 name<keyframes-name> が一致するものとする。

      一致する @keyframes at-rule が存在しない場合 (あるいは namenone の場合)、 この手順を中止する。 この場合、アニメーションは生成されず、 name と一致する既存のアニメーションはキャンセルされる。

    2. 同じ キーフレームブロックspecified<keyframe-selector>from0%to100% とみなす)ごとにグループ化し、 最後に宣言された animation-timing-functioncomputed value(宣言がなければ default timing function をデフォルトとする)、 および最後に宣言された animation-compositioncomputed value(宣言がなければ default composite をデフォルトとする)を取得する。

    3. 各グループごとに、最も早い キーフレームブロック の順で次を行う:

      1. そのグループの全ての 宣言ブロックカスケードし、 各CSSプロパティ(「アニメーション不可」は除外)について 全ての キーフレームブロック の中で最後に宣言されたものが優先される。 [CSS-CASCADE-4]

        注意: カスケードショートハンドプロパティサブプロパティに展開し、 各 論理プロパティグループにおける対応するプロパティ群を elementcomputed書字モードに従ってマッピングする。

      2. このカスケードの結果得られた 宣言値のセットを keyframe values として持つ空の キーフレーム keyframekeyframes に追加する。 その keyframe offset, keyframe timing function, keyframe composite を設定する。

      3. keyframe properties に追加されたプロパティ名を animated properties に追加する。

  3. 初期フレーム・最終フレームの生成:

    1. initial keyframe を探すか新しく作成する。 keyframe offset0%keyframe timing functiondefault timing functionkeyframe compositedefault composite とする。

    2. animated properties に含まれるプロパティで、 0% のオフセットのキーフレームや used keyframe order でそれより前に配置されるキーフレームに 含まれていないものについては、 element 上のそのプロパティの computed valueinitial keyframekeyframe values に追加する。

    3. initial keyframekeyframe values が空でなければ、 keyframes の先頭に initial keyframe を追加する。

    4. final keyframe についても同様に、 オフセットは 100%used keyframe order でより後に配置されるキーフレームを考慮し、 keyframes の末尾に追加する。

  4. フレームのソート:

    • 指定順序は、 上記の手順で得られた keyframes の順序、 すなわち文書順で重複キーフレームは最も早い位置にまとめられる。

    • 算出順序は、 keyframes のうち <percentage>fromto キーワードで指定されたオフセットを持つものを リストの先頭(生成された initial keyframe の後)に移動し、 それらを keyframe offset で安定ソートした順序。 getKeyframes() の返す順序となる。

    • 使用順序は、 keyframes をアニメーション効果のタイムライン上に iteration count 1と仮定して 早い順から遅い順に並べ、 同じオフセットの場合は 算出順序で決定する。 実際のアニメーションフレームの補間および計算に使われる順序。

    この仕様で導入された算出キーフレームのソートに関する要件は、 Web Animations § 5.3.3 Calculating computed keyframes に統合されるべきです。 使用キーフレームに関する要件も Web Animations § 5.3.4 The effect value of a keyframe effect に統合されるべきです。 上記のキーフレーム集合の区別については説明的注記に移動すべきです。

    注意: 算出順序<percentage> のオフセットでキーフレームをソートしますが、 <timeline-range-name> で指定されたキーフレームは 指定順序(生成された final keyframe 以外の <percentage> キーフレームの後)を保持します。 これらが 使用順序で後に来る場合でも同様です。

4. アニメーションの宣言

CSSアニメーションは、animation-* プロパティを使って キーフレームを要素にバインドすることで定義されます。 これらのリスト値プロパティはすべて ロングハンドであり、 animationショートハンドです。 coordinating list property group を形成し、 animation-namecoordinating list base property となり、 coordinated value list の各項目が 1つのアニメーション効果のプロパティ群を定義します。

animation-* プロパティ値の連携方法については CSS Values 4 § A Coordinating List-Valued Properties を参照してください。

4.1. animation-duration プロパティ

名前: animation-duration
値: [ auto | <time [0s,∞]> ]#
初期値: auto
適用対象: 全要素
継承: no
パーセンテージ: N/A
算出値: リスト(各項目は時間またはキーワード auto
正規順序: 文法どおり
アニメーション型: アニメーション不可

animation-duration プロパティは アニメーションの関連付けられた 反復時間 を指定します。

auto
時間駆動型アニメーションの場合、 0s と同等です。

スクロール駆動型アニメーションの場合、 タイムラインを埋めるのに必要な時間と同等です。 animation-rangeanimation-delayanimation-iteration-count を考慮する。 Scroll-driven Animations § 4.1 有限タイムライン計算 を参照。

<time [0s,∞]>
時間駆動型アニメーションの場合、 アニメーションが1サイクル完了するまでの時間を指定します。 負の <time> は無効です。

<time>0s(初期値など)の場合、 アニメーションのキーフレームは効果を持ちませんが、 アニメーション自体は即座に発生します。 具体的には、開始イベントと終了イベントが発火します。 animation-fill-modebackwards または both の場合、 アニメーションの最初のフレーム(animation-direction により定義される)が animation-delay 中に表示されます。 animation-delay の後は、 アニメーションの最後のフレーム(animation-direction で定義)が animation-fill-modeforwards または both の場合に表示されます。 animation-fill-modenone の場合は アニメーションは目に見える効果を持ちません。

スクロール駆動型アニメーションの場合は auto として扱われます。

4.2. animation-timing-function プロパティ

animation-timing-function は、イージング関数(タイミング関数)を各 キーフレーム に適用するために使用されます。詳しくは § 3 キーフレームの組み立て を参照してください。

4.3. animation-iteration-count プロパティ

animation-iteration-count プロパティは、アニメーションの 反復回数を指定します(関連付けられた アニメーション効果)。

4.4. animation-direction プロパティ

animation-direction プロパティは、アニメーションの 再生方向(playback direction)を指定します(関連付けられた アニメーション効果)。

4.5. animation-play-state プロパティ

animation-play-state は、アニメーションを一時停止または再生するために使用されます。

アニメーションが生成された時点を含め、いつでも、 そのアニメーションに対応する animation-play-state の解決値が新たに running になった場合、 実装は アニメーションの再生手順を auto-rewind flag を false に設定して実行しなければなりません。

アニメーションが生成された時点を含め、いつでも、 そのアニメーションに対応する animation-play-state の解決値が新たに paused になった場合、 実装は アニメーションの一時停止手順を 該当アニメーションに対して実行しなければなりません。

上記の要件は、Web Animations API によってアニメーションの再生状態がオーバーライドされている場合(§ 2 アニメーション参照)には適用されません。

4.6. animation-delay プロパティ

animation-delay プロパティは、アニメーションの 開始遅延(start delay)を指定します(関連付けられた アニメーション効果)。

4.7. animation-fill-mode プロパティ

animation-fill-mode プロパティは、アニメーションの フィルモード(fill mode)を指定します(関連付けられた アニメーション効果)。

4.8. animation-composition プロパティ

animation-composition プロパティは、複数のアニメーションが同じプロパティに同時に影響を与える場合に使用される 合成操作(composite operation)を定義します。

名前: animation-composition
値: <single-animation-composition>#
初期値: replace
適用対象: 全要素
継承: no
パーセンテージ: N/A
算出値: リスト(各項目は指定されたキーワード)
正規順序: 文法どおり
アニメーション型: アニメーション不可

<single-animation-composition> = replace | add | accumulate

animation-composition の値は、Web Animations で定義されている composite operation の該当値の意味を持ちます。 詳しくは [WEB-ANIMATIONS] を参照してください。

キーフレーム内で指定した場合、animation-composition は、 そのキーフレームで指定された各プロパティについて 次のキーフレームでそのプロパティが指定されるまで使用される合成操作を定義します。

例えば、次のスタイルシートは scale プロパティを対象とした 2つの異なるアニメーションを定義しています。
@keyframes heartbeat {
  from {
    scale: 1;
    animation-timing-function: ease-out;
  }
  30% {
    scale: 1.3;
  }
}
.heartbeat {
  animation: heartbeat 0.3s 2s infinite;
}

@keyframes throb {
  50% {
    scale: 1.8;
  }
}
.icon:mouseover {
  animation: throb 0.4s add;
}

これら2つのアニメーションが同じ要素に適用された場合、通常は1つのアニメーションのみが適用されますが、 2つ目のアニメーションに addanimation-composition として指定することで、 両方のアニメーションの結果が合成されます。

CSSトランジション [CSS3-TRANSITIONS] は合成順序が低いため、 以下の例のように animation-composition を利用して CSSアニメーションと下層トランジションを組み合わせることも可能です。

.icon {
  filter: blur(20px);
  transition: filter 0.5s;
}
.icon:hover {
  filter: blur(0px);
  animation: brightness-pulse 3s infinite add;
}

@keyframes brightness-pulse {
  0% {
    scale: 1.1;
    filter: brightness(130%);
  }
  10% {
    scale: 1;
    filter: brightness(100%);
  }
}

これらの例の図を作成し、妥当性を検証すること。

4.9. animation-timeline プロパティ

animation-timeline プロパティは、アニメーションで使用される タイムライン を定義します。

注: この仕様ではアニメーションタイムラインを指定する構文は導入されていません。タイムラインの指定は Scroll-linked Animations [SCROLL-ANIMATIONS] など他の仕様によって行われます。

名前: animation-timeline
値: <single-animation-timeline>#
初期値: auto
適用対象: 全要素
継承: no
パーセンテージ: N/A
算出値: リスト(各項目は大文字・小文字区別のCSS識別子か、キーワード noneauto
正規順序: 文法どおり
アニメーション型: アニメーション不可
<single-animation-timeline> = auto | none | <custom-ident> | <scroll()> | <view()>

animation-timeline プロパティは animation-nameanimation-duration のように、複数の値を持つことができ、それぞれが要素上の対応する アニメーションに追加の挙動を与えます。タイムラインとアニメーションの対応はこちらで説明されています。

各値は型 <single-animation-timeline> であり、次のような効果があります:

auto

アニメーションの タイムラインDocumentTimeline、つまり デフォルト文書タイムライン になります。

none

アニメーションは タイムライン に関連付けられません。

<custom-ident>

この要素でスコープ内に名前付き スクロール進捗タイムライン または ビュープログレスタイムライン があれば、Scroll-driven Animations § 4.2 名前付きタイムラインのスコープおよび検索 に従い参照されたタイムラインを使用します。

それ以外の場合、アニメーションは タイムライン に関連付けられません。

<scroll()>

指定した scroll() 関数により示される スクロール進捗タイムライン を使用します。 詳細は Scroll-driven Animations § 2.2.1 scroll() 記法 を参照。

<view()>

指定した view() 関数により示される ビュープログレスタイムライン を使用します。 詳細は Scroll-driven Animations § 3.3.1 view() 記法 を参照。

animation-name でタイムラインを選択しやすくするべき。animation-timeline が指定されていない場合に animation-name をタイムライン選択に利用できれば、よくあるアニメーションはキー名を1つ使うだけでタイムライン・キーフレーム両方を指定でき、シンプルかつ使いやすくなります。animation-timeline プロパティは必要に応じてキーフレームとタイムラインを個別に指定できる追加制御を提供します。

複数の animation-* プロパティが同時に設定された場合、animation-timeline が最初に更新されます。つまり例えば animation-play-state の変更は、同時に適用された animation-timeline に対して適用されます。

4.10. animation ショートハンドプロパティ

animation ショートハンドプロパティの構文は以下の通りです:

<single-animation> = <'animation-duration'> || <easing-function> || <'animation-delay'> || <single-animation-iteration-count> || <single-animation-direction> || <single-animation-fill-mode> || <single-animation-play-state> || [ none | <keyframes-name> ] || <single-animation-timeline>

5. アニメーションイベント

5.1. イベントの発行

注: これはCSS Animations Level 1 [CSS3-ANIMATIONS] よりも一般的なイベント発行の説明であり、Web Animations API [WEB-ANIMATIONS] を用いたアニメーションのシークや逆再生の可能性も考慮しています。

CSSアニメーションイベントの target は、アニメーションの所有要素です。 所有要素 がない場合、CSSアニメーションイベントは発行されません (ただしWeb Animationsで定義されている アニメーション再生イベントは対応する CSSAnimation オブジェクトで発行されます)。

どのイベントを発行するか判定するために、Web Animationsモデルで定義されている フェーズを使用します。これらの定義は アニメーション効果に適用されますが、イベント発行の目的ではCSSアニメーションは関連付けられた 効果と同じフェーズとみなします。 例えば、CSSアニメーションの before phase は、その 関連効果before phase である場合です。

関連付けられた 効果 を持たないCSSアニメーションは、idle phasecurrent timeunresolved の場合)、 before phasecurrent time が0未満の場合)、それ以外は after phase とみなされます。

同様に、CSSアニメーションの start delayactive durationcurrent iterationiteration startiteration duration への参照は、アニメーションの関連効果の対応するプロパティを指します。

各イベントの elapsedTime の計算には、以下の定義を使用します:

新しい アニメーションフレーム が確立され、アニメーションが pending play taskpending pause task を持たない場合、 発行するイベントは新しい アニメーションフレーム の確立前後のフェーズを比較して決定します:

変化 発行されるイベント 経過時間 (ms)
idle または beforeactive animationstart interval start
idle または beforeafter ٭ animationstart interval start
animationend interval end
activebefore animationend interval start
activeactive かつアニメーションの current iteration関連効果)が前のアニメーションフレームから変化した場合 animationiteration (下記参照)
activeafter animationend interval end
afteractive animationstart interval end
afterbefore ٭ animationstart interval end
animationend interval start
not idle かつ not afteridle animationcancel キャンセル時点のアニメーションのアクティブ時間fill mode both で計算)

٭ 状態変化で複数イベントが列挙されている場合、記載順に連続してすべてのイベントが発行されます。

animationiteration イベントの経過時間は以下のように定義されます:

  1. previous current iteration を前のアニメーションフレームの current iteration とする。

  2. previous current iterationcurrent iteration より大きければ iteration boundarycurrent iteration + 1 とし、それ以外は current iteration とする。

  3. 経過時間は、 (iteration boundary - iteration start) × iteration duration) の評価結果です。

上記の表や手順で定義された 経過時間 はミリ秒単位なので、 elapsedTime メンバーに割り当てる前に AnimationEvent の秒単位値にするため、1,000で割る必要があります。

6. DOMインターフェース

6.1. CSSAnimationインターフェース

[Exposed=Window]
interface CSSAnimation : Animation {
  readonly attribute CSSOMString animationName;
};
animationName, CSSOMString, 読み取り専用

アニメーション作成時点で関連効果(associated effect)を定義する一致するキーフレーム規則を検索するためのキーです。 この値は、このオブジェクトを生成した animation-name プロパティの値です。

6.2. 保留中のスタイル変更への要件

様々な操作により、要素のプロパティの算出値が影響を受けることがあります。ユーザーエージェントは最適化のため、必要になるまでこれらの値の再計算を遅延させる場合があります。 しかし、この仕様で定義されたプログラミングインターフェースに含まれる全ての操作、そしてWeb Animations [WEB-ANIMATIONS]で定義された、オブジェクトやアニメーション状態を返す可能性のある操作は、保留中の算出値への変更が完全に処理された結果と一貫性のある結果を生成しなければなりません。

例として、以下のコード断片では、elem の指定スタイルが最初に更新された際、ユーザーエージェントはanimationプロパティの算出値の再計算を遅延する場合があります。

しかし、getAnimations() メソッド(Web Animationsで規定)が elem に対して呼び出されると、本仕様で定義される CSSAnimation オブジェクトを返すことができます。 したがって、このセクションの要件により、ユーザーエージェントは elemanimation プロパティの更新値を計算し、 要求された CSSAnimation オブジェクトを返す前に生成しなければなりません。

elem.style.animation = 'fadeOut 1s';
elem.getAnimations()[0].pause();

同様に、playState の取得も保留中のスタイル変更に依存する場合があります。

elem.style.animation = 'fadeOut 1s paused';
const anim = elem.getAnimations()[0];
elem.style.animationPlayState = 'running';
console.log(anim.playState); // 'running' であるべき。

7. プライバシーに関する考慮事項

本仕様について報告されたプライバシー上の懸念はありません。

8. セキュリティに関する考慮事項

本仕様について報告されたセキュリティ上の懸念はありません。

9. 変更点

9.1. 最近の変更

2023年3月2日付 作業草案 以降の変更点は以下の通りです:

9.2. CSS Animations, Level 1 からの変更点

適合性

文書の規約

適合性要件は、記述的断定と RFC 2119 用語の組み合わせで表現されます。正規部分で使われている “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” というキーワードは、RFC 2119 の定義通りに解釈されます。 ただし、可読性のため、この仕様ではそれらの単語はすべて大文字では記載されていません。

この仕様の全テキストは、明示的に非正規と記された部分、例、注記を除き正規です。 [RFC2119]

この仕様の例は「例えば」という語で始まるか、または class="example" を用いて正規テキストと区別されます。

これは説明的な例です。

説明的な注記は “Note” で始まり、 class="note" で正規テキストと区別されます。

注: これは説明的な注記です。

勧告は強調された正規セクションとして特別な注意を促すためのスタイルで、 <strong class="advisement"> で他の正規テキストと区別されます。例: UAはアクセシブルな代替手段を提供しなければならない。

適合クラス

この仕様への適合性は、3つの適合クラスで定義されます:

スタイルシート
CSS スタイルシート
レンダラー
UA。スタイルシートの意味を解釈し、それを使用する文書をレンダリングするユーザーエージェント。
オーサリングツール
UA。スタイルシートを書くユーザーエージェント。

スタイルシートは、このモジュールで定義された構文を使う全ての文が、汎用CSS文法と本モジュール内で定義される各機能の個別文法に従って有効であれば、本仕様に適合します。

レンダラーは、スタイルシートを適切な仕様に従って解釈することに加え、本仕様で定義される全ての機能を正しくパースし、文書を適切にレンダリングすることで本仕様に適合します。ただし、デバイスの制約によりUAが文書を正しくレンダリングできない場合でも、UAは非適合とはみなされません。(例: UAはモノクロモニター上で色をレンダリングする必要はありません。)

オーサリングツールは、汎用CSS文法および本モジュールの各機能の個別文法に従って構文的に正しいスタイルシートを作成し、本モジュールで定義されるスタイルシートの他の適合要件も満たす場合、本仕様に適合します。

部分的な実装

著者が将来互換性のあるパース規則を利用してフォールバック値を割り当てられるように、CSSレンダラーは 必ず、利用可能なレベルのサポートがない at-rule, プロパティ, プロパティ値, キーワード, その他の構文要素を無効として(適切に無視)扱わなければなりません。特に、ユーザーエージェントは決してサポートされていない構成値だけを無視し、1つの複数値プロパティ宣言でサポートされている値だけを反映してはなりません。いずれかの値が無効(サポートされていない値は必ず無効)とみなされる場合、CSSは宣言全体を無視することを要求します。

不安定・独自機能の実装

将来安定版CSS機能との衝突を避けるため、CSSWGは ベストプラクティス に従って、不安定機能や 独自拡張のCSS実装を推奨します。

非実験的な実装

仕様が候補勧告(Candidate Recommendation)段階に達したら、非実験的な実装が可能となり、実装者は仕様どおりに正しく実装できるCRレベルの機能について、プレフィックスなしでリリースすべきです。

CSSの相互運用性を確立・維持するため、CSS作業グループは非実験的なCSSレンダラーに対し、CSSの機能をプレフィックスなしでリリースする前に、実装報告書(必要に応じてその実装報告書に使われたテストケースも)をW3Cに提出するよう依頼します。W3Cに提出されたテストケースはCSS作業グループによるレビュー・修正の対象となります。

テストケース・実装報告書の提出方法など詳細はCSS作業グループのウェブサイト https://www.w3.org/Style/CSS/Test/ を参照してください。 質問は public-css-testsuite@w3.org メーリングリストに送ってください。

索引

本仕様で定義された用語

参照によって定義された用語

参考文献

標準参照文献

[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2022年1月13日. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CASCADE-6]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 6. 2023年3月21日. WD. URL: https://www.w3.org/TR/css-cascade-6/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 3. 2023年3月30日. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-EASING-1]
Brian Birtles; Dean Jackson; Matt Rakow. CSS Easing Functions Level 1. 2023年2月13日. CR. URL: https://www.w3.org/TR/css-easing-1/
[CSS-PAGE-FLOATS-3]
Johannes Wilm. CSS Page Floats. 2015年9月15日. WD. URL: https://www.w3.org/TR/css-page-floats-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2023年4月6日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS21]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS21/
[CSS3-ANIMATIONS]
David Baron; et al. CSS Animations Level 1. 2023年3月2日. WD. URL: https://www.w3.org/TR/css-animations-1/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 2021年8月26日. WD. URL: https://www.w3.org/TR/cssom-1/
[DOM]
Anne van Kesteren. DOM Standard. リビングスタンダード. URL: https://dom.spec.whatwg.org/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SCROLL-ANIMATIONS-1]
Brian Birtles; et al. Scroll-driven Animations. 2023年4月28日. WD. URL: https://www.w3.org/TR/scroll-animations-1/
[WEB-ANIMATIONS]
Brian Birtles; et al. Web Animations. 2022年9月8日. WD. URL: https://www.w3.org/TR/web-animations-1/
[WEB-ANIMATIONS-2]
Brian Birtles; Robert Flack. Web Animations Level 2. 2023年2月21日. WD. URL: https://www.w3.org/TR/web-animations-2/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. リビングスタンダード. URL: https://webidl.spec.whatwg.org/

参考情報

[CSS-CASCADE-4]
Elika Etemad; Tab Atkins Jr.. CSS Cascading and Inheritance Level 4. 2022年1月13日. CR. URL: https://www.w3.org/TR/css-cascade-4/
[CSS-LOGICAL-1]
Rossen Atanassov; Elika Etemad. CSS Logical Properties and Values Level 1. 2018年8月27日. WD. URL: https://www.w3.org/TR/css-logical-1/
[CSS-MASKING-1]
Dirk Schulze; Brian Birtles; Tab Atkins Jr.. CSS Masking Module Level 1. 2021年8月5日. CR. URL: https://www.w3.org/TR/css-masking-1/
[CSS-TRANSFORMS-2]
Tab Atkins Jr.; et al. CSS Transforms Module Level 2. 2021年11月9日. WD. URL: https://www.w3.org/TR/css-transforms-2/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 2019年7月30日. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS3-TRANSITIONS]
David Baron; et al. CSS Transitions. 2018年10月11日. WD. URL: https://www.w3.org/TR/css-transitions-1/
[SCROLL-ANIMATIONS]
Scroll-linked Animations. cg-draft. URL: https://wicg.github.io/scroll-animations/

プロパティ索引

名前 初期値 適用対象 継承 パーセンテージ アニメーション型 正規順序 算出値
animation-composition <single-animation-composition># replace 全要素 no N/A アニメーション不可 文法どおり リスト(各項目は指定されたキーワード)
animation-duration [ auto | <time [0s,∞]> ]# auto 全要素 no N/A アニメーション不可 文法どおり リスト(各項目は時間またはキーワード auto)
animation-timeline <single-animation-timeline># auto 全要素 no N/A アニメーション不可 文法どおり リスト(各項目は大文字・小文字区別のcss識別子または キーワード none, auto)

IDL索引

[Exposed=Window]
interface CSSAnimation : Animation {
  readonly attribute CSSOMString animationName;
};

課題索引

これはトランジションで定義された挙動と異なります。おそらく、まずトランジション、次にアニメーション、最後にグローバルアニメーションリストでソートすべきです。理由は、開発者ツール等が孤立したアニメーションやトランジションを保持して再生する場合、合成順序を大体維持できるようにするためです。
本仕様で導入された算出キーフレームのソートに関する具体的要件は、Web Animations § 5.3.3 計算済みキーフレームの計算 に統合すべきです。 使用キーフレームに関する具体的要件も、Web Animations § 5.3.4 キーフレーム効果の値に統合すべきです。 これらキーフレーム集合の区別についての説明は、注記として分離して記載するべきです。
これらの例の図を作成し、妥当性を検証してください。
animation-name で、animation-timeline が指定されていない場合にタイムラインを選択しやすくしてください。animation-name をタイムライン選択に使えるようにすると、よくあるアニメーションはキーフレームとタイムライン両方に同じ名前を使うだけで済み、シンプルかつ使いやすくなります。animation-timeline プロパティは、必要に応じてキーフレームとタイムラインを個別に指定できる追加の制御を提供します。