スクロール駆動アニメーション

W3C作業草案,

この文書の詳細情報
このバージョン:
https://www.w3.org/TR/2023/WD-scroll-animations-1-20230606/
最新公開バージョン:
https://www.w3.org/TR/scroll-animations-1/
編集者草案:
https://drafts.csswg.org/scroll-animations-1/
履歴:
https://www.w3.org/standards/history/scroll-animations-1
フィードバック:
CSSWG課題リポジトリ
仕様内インライン
編集者:
(招待専門家)
(Mozilla)
(Apple)
(Microsoft)
Elika J. Etemad / fantasai (招待専門家)
Robert Flack (Google)
前編集者:
(Google)
Mantaroh Yoshinaga
(Google)
この仕様への編集提案:
GitHub エディター

概要

スクロールコンテナのスクロールオフセットに紐付けてアニメーションを作成するためのAPIとマークアップを定義します。

CSSは、構造化文書(HTMLやXMLなど)の画面表示や印刷などの描画を記述するための言語です。

この文書のステータス

このセクションは、本書が公開された時点でのステータスを説明します。最新のW3C出版物と本技術報告書の最新版は W3C技術報告書インデックス https://www.w3.org/TR/で確認できます。

この文書は CSS作業グループにより勧告 トラックに従って作業草案として公開されました。 作業草案として公開されたことは、W3Cおよびそのメンバーによる承認を意味しません。

この文書はドラフトであり、 今後更新、置き換え、または他の文書により廃止される可能性があります。 この文書を進行中の作業以外のものとして引用するのは不適切です。

ご意見はGitHubでissueを提出(推奨)してください。その際、タイトルに仕様コード“scroll-animations”を含めてください。例: “[scroll-animations] …コメント概要…”。すべてのissueやコメントはアーカイブされています。あるいは、(アーカイブ済み)の公開メーリングリストwww-style@w3.orgにご送信いただくことも可能です。

この文書は、2021年11月2日W3Cプロセス文書によって管理されています。

この文書は、W3C特許ポリシーのもとで運営されているグループによって作成されました。 W3Cは、グループが作成する成果物に関してなされた公開特許開示リストを管理しています。 このページには特許開示方法の案内も記載されています。特許に関して実際に知識があり、その特許が必須クレームを含むと考える人物は、W3C特許ポリシー第6節に従って情報公開する必要があります。

1. はじめに

この仕様書は、 スクロールコンテナのスクロール進行度に基づいて アニメーションの進行を制御するための仕組みを定義します。 これらのスクロール駆動アニメーションは、 時計時間ではなくスクロール位置に基づいたタイムラインを利用します。 本モジュールはWeb Animations APIに基づく命令型APIと、 CSS Animationsに基づく宣言型APIの両方を提供します。[WEB-ANIMATIONS-1]

スクロール駆動タイムラインには2種類あります:

注: スクロール駆動アニメーションは、進行がスクロール位置に連動するものであり、 スクロールトリガーアニメーション(スクロール位置によって開始されるが進行は時間で制御されるもの)とは異なります。

1.1. 他の仕様との関係

Web Animations [WEB-ANIMATIONS-1]は、 Webプラットフォーム上のアニメーションの抽象的な概念モデルを定義しており、 モデル要素としてアニメーションやそのタイムライン、 関連するプログラミングインターフェースなどが含まれます。 本仕様はWeb Animationsモデルを拡張し、 スクロール駆動タイムラインを定義し、 それらがアニメーションの進行を制御して スクロール駆動アニメーションを作成できるようにします。

本仕様はこれらの概念を操作するプログラミングインターフェースと、 CSS Animations [CSS-ANIMATIONS-1]にこれらの概念を適用するCSSプロパティの両方を導入します。 CSSプロパティの挙動がプログラミングインターフェースで記述されている場合でも、 ユーザーエージェントがスクリプトをサポートしていなくても、 下層のプログラミングインターフェースが存在するかのようにCSS機能を実装することでこの仕様に準拠できます。

CSSのほとんどの操作(セレクターの一致を除く)同様、 本仕様の機能はフラット化要素ツリー上で動作します。

1.2. 非同期スクロールとの関係

一部のユーザーエージェントは、レイアウトやスクリプトとは非同期でスクロールをサポートしています。 本仕様はそのようなアーキテクチャとの互換性を意図しています。

具体的には、本仕様ではスクロール駆動効果を 効果サンプル毎にスクリプトを実行する必要のない方法で記述できます。 非同期スクロールをサポートするユーザーエージェントは、これらの効果のサンプリングも非同期で行うことができます(必須ではありません)。

1.3. 値の定義

本仕様はCSSプロパティ定義の慣例[CSS2])と、 値定義構文[CSS-VALUES-3])に従います。 本仕様で定義されていない値型はCSS Values & Units [CSS-VALUES-3]で定義されています。 他のCSSモジュールとの組み合わせにより、これらの値型の定義が拡張される場合もあります。

各プロパティ定義に記載された値に加え、 本仕様で定義されるすべてのプロパティは CSS全域キーワードもプロパティ値として受け入れます。 可読性のため、明示的な記載は省略されています。

2. スクロール進行タイムライン

スクロール進行タイムラインは、 特定の軸に沿ったスクロールコンテナの スクロール位置の進行に結び付けられるタイムラインです。 最もスクロール位置が始端の場合が進行度0%、最も終端の場合が進行度100%です。

スクロール進行タイムラインanimation-timelineで匿名的にscroll() 関数型記法で参照できますし、 scroll-timelineプロパティで宣言した後は名前で参照することもできます(§ 4.2 名前付きタイムラインのスコープと検索)。 Web Animations APIでは、匿名的にScrollTimelineオブジェクトで表現できます。

2.1. スクロール進行タイムラインの進行度計算

あるスクロール進行タイムラインの進行度(現在時刻)は次のように計算されます:スクロールオフセット ÷ (スクロール可能オーバーフローサイズスクロールコンテナサイズ)

0%位置と100%位置が一致する場合 (すなわち現在時刻の式の分母がゼロの場合)、 そのタイムラインは非アクティブとなります。

ページメディアでは、 ドキュメントビューポートを参照するスクロール進行タイムライン非アクティブとなります。

2.2. 匿名スクロール進行タイムライン

2.2.1. scroll()記法

scroll() 関数型記法は <single-animation-timeline>値として animation-timelineで使用でき、 スクロール進行タイムラインを指定します。 構文は以下の通りです。

<scroll()> = scroll( [ <scroller> || <axis> ]? )
<axis> = block | inline | x | y
<scroller> = root | nearest | self

デフォルトでは、scroll()は最も近い先祖のブロック軸スクロールコンテナを参照します。 引数により以下のように参照先が変更できます:

block
ブロック軸上の スクロールコンテナの進行度を利用します。(デフォルト)
inline
インライン軸上の スクロールコンテナの進行度を利用します。
x
水平軸上の スクロールコンテナの進行度を利用します。
y
垂直軸上の スクロールコンテナの進行度を利用します。
nearest
最も近い先祖のスクロールコンテナを参照します。(デフォルト)
root
ドキュメントビューポートをスクロールコンテナとみなします。
self
要素自身の主ボックススクロールコンテナとみなします。 主ボックススクロールコンテナでない場合、 スクロール進行タイムライン非アクティブとなります。

注: 進行度はスクロール原点を基準にしており、 書字モードによって反転する場合があります。 これはxy指定時も同様です。

ルート要素への参照はドキュメントビューポートに伝播し、 (これはスクロールコンテナとして機能します)。

scroll()の各使用はWeb Animations API上で ScrollTimelineインスタンスに対応します。 複数要素が同じスクロールコンテナを同じ引数で参照していても、 それぞれ独立したインスタンスとなります。

2.2.2. ScrollTimeline インターフェース

enum ScrollAxis {
  "block",
  "inline",
  "x",
  "y"
};

dictionary ScrollTimelineOptions {
  Element? source;
  ScrollAxis axis = "block";
};

[Exposed=Window]
interface ScrollTimeline : AnimationTimeline {
  constructor(optional ScrollTimelineOptions options = {});
  readonly attribute Element? source;
  readonly attribute ScrollAxis axis;
};

ScrollTimelineは、AnimationTimelineの一種であり、スクロール進行タイムラインを表します。 Animationのコンストラクターやanimate()メソッドに渡すことで、アニメーションをスクロール進行タイムラインに関連付けることができます。

sourceElement、読み取り専用、nullable

このタイムラインの進行を制御するスクロールコンテナ要素。

axisScrollAxis、読み取り専用

タイムラインの進行を制御するスクロールの軸。 上記の<axis>の値定義を参照。

継承属性:

currentTimeAnimationTimelineから継承)

スクロールコンテナのスクロール進行度(パーセンテージCSSUnitValue)を表します。 0%はスクロール位置の始端(スクロールコンテナの書字モード)を意味します。 タイムラインが非アクティブの場合はnullとなります。

通常0%はスクロールコンテナの初期スクロール位置を表しますが、 コンテンツ分布次第でそうならない場合もあります。 CSS Box Alignment 3 § 5.3 Overflow and Scroll Positions参照。これでよいでしょうか?

currentTime が負や100%以上になる場合の注記を追加してください。

ScrollTimeline(options)

以下の手順で新しいScrollTimeline オブジェクトを作成します:

  1. timelineを新しいScrollTimeline オブジェクトとする。

  2. timelinesource を以下の値に設定する:

    もしoptionssourceメンバーが存在し、nullでなければ

    optionssourceメンバー。

    それ以外の場合

    そのDocument に関連付けられたscrollingElementWindow現在のグローバルオブジェクトである場合)。

  3. timelineaxis プロパティを、optionsの該当値に設定する。

source が、主ボックスを持たないか、スクロールコンテナでない要素の場合、 またはスクロール可能オーバーフローがない場合、 ScrollTimeline非アクティブとなります。

ScrollTimelineduration は100%です。

sourcecurrentTime の値は、いずれかが要求または更新されたときに計算されます。

2.3. 名前付きスクロール進行タイムライン

スクロール進行タイムラインスクロールコンテナ自身に定義することもでき、 名前のスコープ内の要素から名前で参照できます (§ 4.2 名前付きタイムラインのスコープと検索参照)。

このような名前付きスクロール進行タイムラインは、 協調値リストscroll-timelineのロングハンド)で宣言されます。 これは協調リストプロパティ群を形成し、 scroll-timeline-name協調リスト基底プロパティにします。 CSS Values 4 § A Coordinating List-Valued Properties参照。

2.3.1. スクロール進行タイムラインの命名:scroll-timeline-nameプロパティ

名前: scroll-timeline-name
値: none | <dashed-ident>#
初期値: none
対象: 全要素
継承: no
パーセンテージ: n/a
算出値: キーワードnoneまたはCSS識別子のリスト
正規順序: 文法通り
アニメーションタイプ: アニメーション不可

この要素に関連付けられる名前付きスクロール進行タイムラインの名前を指定します。

2.3.2. スクロール進行タイムラインの軸:scroll-timeline-axisプロパティ

名前: scroll-timeline-axis
値: [ block | inline | x | y ]#
初期値: block
対象: 全要素
継承: no
パーセンテージ: n/a
算出値: 指定されたキーワードのリスト
正規順序: 文法通り
アニメーションタイプ: アニメーション不可

このスクロールコンテナで定義される名前付きスクロール進行タイムラインの軸を指定します。 このボックスがスクロールコンテナでない場合、 該当する名前付きスクロール進行タイムライン非アクティブとなります。

値はscroll()の定義通りです。

2.3.3. スクロールタイムラインのショートハンド:scroll-timelineショートハンド

名前: scroll-timeline
値: [ <'scroll-timeline-name'> <'scroll-timeline-axis'>? ]#
初期値: 個別プロパティ参照
対象: 全要素
継承: no
パーセンテージ: 個別プロパティ参照
算出値: 個別プロパティ参照
アニメーションタイプ: アニメーション不可
正規順序: 文法通り

このプロパティはショートハンドで、scroll-timeline-namescroll-timeline-axisをまとめて設定します。

3. ビュー進行タイムライン

多くの場合、特定のボックス (ビュー進行対象) がスクロール進行タイムライン上で スクロールポート内に表示されている間に アニメーションを開始・終了したい場合があります。 ビュー進行タイムラインは、 そのボックスの主ボックスが最も近い先祖のスクロールポート (正確には該当するビュー進行可視範囲)と交差しているスクロール位置にスコープされた スクロール進行タイムラインの区間です。 その区間の始端スクロール位置が0%、終端スクロール位置が100%の進行度を表します。 § 3.2 ビュー進行タイムラインの進行度計算を参照してください。

注: 0%および100%のスクロール位置は常に到達可能とは限りません。 例えばボックスがスクロール可能オーバーフロー矩形の始端に配置されている場合、 32%未満の進行度までスクロールできないこともあります。

ビュー進行タイムラインview() 関数型記法で匿名参照することも、 view-timelineプロパティで宣言した後に名前で参照することもできます (§ 4.2 名前付きタイムラインのスコープと検索参照)。 Web Animations APIでは、匿名的にViewTimeline オブジェクトで表現できます。

3.1. ビュー進行タイムラインの範囲

ビュー進行タイムラインは以下の名前付きタイムライン範囲を定義します:

cover
ビュー進行タイムラインの全範囲を表します:
contain
主ボックス可視範囲内で完全に含まれるか、または完全に覆う間の範囲を表します。
entry
主ボックス可視範囲へ入る間の範囲を表します。
  • 0%はcover範囲の0%と同義です。

  • 100%はcontain範囲の0%と同義です。

exit
主ボックス可視範囲から出る間の範囲を表します。
  • 0%はcontain範囲の100%と同義です。

  • 100%はcover範囲の100%と同義です。

entry-crossing
主ボックス終端ボーダーエッジを 横切る間の範囲を表します。
exit-crossing
主ボックス開始ボーダーエッジを 横切る間の範囲を表します。

図を挿入してください。

いずれの場合も、書字モードは、開始・終端側を判定する際に関連するスクロールコンテナの書字モードを使用します。変形は無視されますが、 相対配置絶対配置は考慮されます。

注: sticky配置ボックスの場合、0%・100%進行度の条件が単一のスクロール位置ではなく範囲で満たされることがあります。 それぞれの範囲は、最初または最後の該当位置を使うべきかを示します。

[CSS-POSITION-3] [CSS-TRANSFORMS-1]

3.2. ビュー進行タイムラインの進行度計算

現在時刻(進行度)は、ビュー進行タイムラインにおいて次の式で計算されます:distance ÷ range。ここで:

0%位置と100%位置が一致する場合(つまり現在時刻式の分母がゼロの場合)、タイムラインは非アクティブとなります。

ページメディアでは、ドキュメントビューポートを参照するビュー進行タイムライン非アクティブとなります。

3.3. 匿名ビュー進行タイムライン

3.3.1. view()記法

view() 関数型記法は <single-animation-timeline>値として animation-timelineで使用でき、 最も近い先祖のスクロールコンテナを参照する ビュー進行タイムラインを指定します。 構文は以下の通りです。

<view()> = view( [ <axis> || <'view-timeline-inset'> ]? )

デフォルトでは、view()ブロック軸を参照します。 scroll()同様、明示的な<axis>値を指定して変更できます。

オプションの<'view-timeline-inset'>値は、ビュー進行可視範囲の調整を行います。 詳細はview-timeline-insetを参照してください。

view()の各使用はWeb Animations API上で ViewTimelineインスタンスに対応します。 複数要素が同じ引数で同じ要素を参照していても、それぞれ独立したインスタンスとなります。

3.3.2. ViewTimeline インターフェース

dictionary ViewTimelineOptions {
  Element subject;
  ScrollAxis axis = "block";
  (DOMString or sequence<(CSSNumericValue or CSSKeywordValue)>) inset = "auto";
};

[Exposed=Window]
interface ViewTimeline : ScrollTimeline {
  constructor(optional ViewTimelineOptions options = {});
  readonly attribute Element subject;
  readonly attribute CSSNumericValue startOffset;
  readonly attribute CSSNumericValue endOffset;
};

ViewTimelineは、AnimationTimelineの一種であり、ビュー進行タイムラインを指定します。 Animationのコンストラクターやanimate()メソッドに渡すことで、アニメーションをビュー進行タイムラインに関連付けることができます。

subject, Element, 読み取り専用

このタイムラインの進行を定義する主ボックスのスクロールポート(scrollport)内での可視性を持つ要素。

startOffset, CSSNumericValue, 読み取り専用

ビュー進行タイムラインの開始(進行度0%)スクロール位置を px単位の長さオフセットとして スクロール原点から表します。 タイムラインが非アクティブの場合はnullとなります。

endOffset, CSSNumericValue, 読み取り専用

ビュー進行タイムラインの終了(進行度100%)スクロール位置を px単位の長さオフセットとして スクロール原点から表します。 タイムラインが非アクティブの場合はnullとなります。

注: startOffset および endOffset の値はスクロール原点基準であり、 物理的な左上隅基準ではありません。 書字モードによっては、 スクロールコンテナscrollLeftscrollTop と一致しない場合があります。 例えば水平軸で右から左(rtl書字モードの場合など。

継承属性:

sourceScrollTimelineから継承)

subjectの 最も近い先祖で、主ボックス(principal box)がスクロールコンテナ(scroll container)を確立する要素。 そのスクロール位置がタイムラインの進行を駆動します。

axisScrollTimelineから継承)

タイムラインの進行を駆動するスクロール軸を指定します。 上記<axis>参照。

currentTimeAnimationTimelineから継承)

ビュー進行タイムラインの現在進行度を パーセンテージCSSUnitValueで表します。 その位置でのスクロールコンテナのスクロール進行度です。 タイムラインが非アクティブの場合はnullとなります。

ViewTimeline(options)

以下の手順で新しいViewTimeline オブジェクトを作成します:

  1. timelineを新しいViewTimeline オブジェクトとする。

  2. timelinesubject および axis プロパティを、optionsの該当値に設定する。

  3. timelinesource を、subjectの最も近い先祖の スクロールコンテナ要素に設定する。

  4. もしinsetDOMString値が与えられた場合は <'view-timeline-inset'>値としてパースする。 シーケンスが与えられた場合、最初の値が開始インセット、2番目の値が終了インセットとなる。 値が1つだけの場合は複製する。 0個または3個以上の場合、あるいは CSSKeywordValuevalueが"auto"以外の場合は TypeErrorを投げる。

    これらのインセットはViewTimelineビュー進行可視範囲を定義します。

source またはsubjectが 主ボックス(principal box)を持たない要素、 あるいは最も近い先祖のスクロールコンテナスクロール可能オーバーフローがない場合(またはそのような先祖自体が存在しない場合、例:印刷メディア)、 ViewTimeline非アクティブとなります。

subjectsourcecurrentTime はいずれかが要求または更新されたときに計算されます。

3.4. 名前付きビュー進行タイムライン

ビュー進行タイムラインは 宣言的にも定義でき、名前のスコープ内の要素から名前で参照できます (§ 4.2 名前付きタイムラインのスコープと検索参照)。

このような名前付きビュー進行タイムラインは、 協調値リストview-timeline-*プロパティ)で宣言されます。 これは協調リストプロパティ群を形成し、 view-timeline-name協調リスト基底プロパティにします。 CSS Values 4 § A Coordinating List-Valued Properties参照。

3.4.1. ビュー進行タイムラインの命名:view-timeline-name プロパティ

名前: view-timeline-name
値: none | <dashed-ident>#
初期値: none
対象: 全要素
継承: no
パーセンテージ: n/a
算出値: キーワードnoneまたはCSS識別子のリスト
正規順序: 文法通り
アニメーションタイプ: アニメーション不可

この要素に関連付けられる名前付きビュー進行タイムラインの名前を指定します。

3.4.2. ビュー進行タイムラインの軸:view-timeline-axis プロパティ

名前: view-timeline-axis
値: [ block | inline | x | y ]#
初期値: block
対象: 全要素
継承: no
パーセンテージ: n/a
算出値: 指定されたキーワードのリスト
正規順序: 文法通り
アニメーションタイプ: アニメーション不可

この要素の主ボックス(principal box)に由来する名前付きビュー進行タイムラインの軸を指定します。

値はview()の定義通りです。

3.4.3. ビュー進行タイムラインのインセット:view-timeline-insetプロパティ

名前: view-timeline-inset
値: [ [ auto | <length-percentage> ]{1,2} ]#
初期値: auto
対象: 全要素
継承: no
パーセンテージ: 該当スクロールポートの対応次元に対する相対値
算出値: 開始・終了インセットそれぞれをautoキーワードまたは算出済み<length-percentage>値で表す二値ペアのリスト
正規順序: 文法通り
アニメーションタイプ: 算出値型による

該当するスクロールポートの 境界判定時に、ボックスが表示範囲内かどうか決定する際のインセット(正値)やアウトセット(負値)調整を指定します。 最初の値は該当軸の開始インセットを、 2番目の値は終了インセットを表します。 2番目の値が省略された場合、最初の値が使われます。 この結果、スクロールポートの範囲が ビュー進行可視範囲となります。

auto
scroll-paddingの値を利用します。
<length-percentage>
scroll-padding同様に、スクロールポート対応エッジから内側へのオフセットを定義します。

3.4.4. ビュータイムラインのショートハンド:view-timeline ショートハンド

名前: view-timeline
値: [ <'view-timeline-name'> <'view-timeline-axis'>? ]#
初期値: 個別プロパティ参照
対象: 全要素
継承: 個別プロパティ参照
パーセンテージ: 個別プロパティ参照
算出値: 個別プロパティ参照
アニメーションタイプ: 個別プロパティ参照
正規順序: 文法通り

このプロパティはショートハンドであり、view-timeline-nameview-timeline-axisを一度に設定します。 view-timeline-insetは設定しません。

view-timeline-insetもリセットするべきでしょうか?

4. スクロール駆動タイムラインへのアニメーションの付与

アニメーションはスクロール駆動タイムラインに、CSSの場合はscroll-timelineプロパティ、 Web Animations APIの場合はAnimationTimeline パラメータで付与できます。 アニメーションのアクティブ区間を さらに特定のタイムライン範囲に制限することも可能です (タイムライン範囲へのアニメーション付与参照)。

時間ベースのディレイ(animation-delay) はスクロール駆動アニメーションには適用されません。 スクロール駆動アニメーションは距離ベースです。

4.1. 有限タイムライン計算

時間駆動タイムラインと異なり、スクロール駆動タイムラインは有限であり、 スクロール駆動アニメーションは常に有限の付与範囲に付与されます(animation-rangeによってさらに制限される場合あり。付録A: タイムライン範囲参照)。 アニメーションの

繰り返し回数(animation-iteration-count) はこの有限範囲の制限内で設定されます。 指定されたdurationがautoの場合、 残りの範囲をiteration countanimation-iteration-count)で割って 使用値durationを算出します。

注: アニメーションが無限のiteration countの場合、 各繰り返しdurationおよび結果としてのアクティブdurationはゼロになります。

アニメーション内に絶対位置指定キーフレーム (タイムライン上の特定地点に固定されたもの、例:名前付きタイムライン範囲キーフレームセレクター@keyframesで使用) が含まれる場合、これらのキーフレーム位置を0%・100%に対して相対的に算出する際は iteration countを1とみなします。 その後、アニメーション全体を繰り返しdurationに合わせてスケーリングし、繰り返し毎に繰り返します。

注: 絶対位置キーフレームと繰り返し回数>1の組み合わせでどのようなユースケースがあるかは不明です。 この仕様では少なくとも定義済みの挙動となります。 (代替案としては、絶対位置キーフレームを「flow外」として残りのキーフレームを繰り返す、なども考えられるが不自然かもしれません。) 編集者はこのケースの現実的なユースケースがあれば知りたいです。

4.2. 名前付きタイムラインのスコープと検索

名前付きスクロール進行タイムラインビュー進行タイムラインは 以下から参照できます:

注: timeline-scopeプロパティを使うことで、 祖先要素にタイムライン名を宣言し、そのスコープをその要素のサブツリーより広げることもできます。

複数要素が同じタイムライン名を宣言している場合、該当タイムラインはツリー順で最も近い要素で宣言されたものになります。 同一要素上で名前が競合した場合、命名プロパティ (scroll-timeline-nameview-timeline-name)で後に宣言された名前が優先され、 スクロール進行タイムラインビュー進行タイムラインよりも優先されます。

timeline-scopeを使うことで、 要素は兄弟・従兄弟・子孫などに結びつけられたタイムラインも参照できます。 例えば、以下はアニメーション要素が後続兄弟要素で定義されたスクロール進行タイムラインに結び付けられる例です。
<style>
  @keyframes anim {
    from { color: red; }
    to { color: green; }
  }

  .root {
    /* 'scroller'タイムラインのスコープを全子孫に拡張 */
    timeline-scope: scroller;
  }

  .root .animation {
    animation: anim;
    /* 'scroller'タイムラインを参照し、'anim'の進行を駆動 */
    animation-timeline: scroller;
  }

  .root .animation + .scroller {
    /* 'scroller'タイムライン名にスクロール進行タイムラインを付与 */
    scroll-timeline: scroller;
  }
</style>
&hellip;
<section class="root">
  <div class="animation">Animating Box</div>
  <div class="scroller">Scrollable Box</div>
</section>

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

スクロール駆動アニメーションは、 Web Animations § 4.4.18 アニメーションイベントCSS Animations 1 § 4 アニメーションイベント、 およびCSS Animations 2 § 4.1 イベント発火で記述されている、 通常の時間駆動アニメーションと同じアニメーションイベントをすべて発火します。

注: スクロールを逆方向にした場合、 animationstartイベントはアクティブ区間終端で発火し、 animationendイベントはアクティブ区間の始端で発火します。 ただし、finishイベントは終了プレイ状態へ入ることが条件なので、 順方向スクロール時のみ発火します。

5. フレーム計算詳細

5.1. HTML処理モデル:イベントループ

スクロールによってアニメーション進行を駆動できることは、 スクロールオフセットの変更がアニメーションの効果を更新し、 その結果さらにスクロールオフセットが変更されるというレイアウトサイクルの可能性を生じさせます。

このようなレイアウトサイクルを防ぐため、 スクロール進行タイムラインを持つアニメーションは、 HTML処理モデルのイベントループのステップ7.10で、 アニメーション更新とイベント発火のステップ1として現在時刻を一度だけ更新します。

ステップ7.14.1では、 作成されたスクロール進行タイムラインビュー進行タイムライン古いタイムライン集合にまとめられます。 ステップ7.14後、タイムラインの名前付きタイムライン範囲が変更されていれば、 これらのタイムラインは古いタイムライン集合に追加されます。 古いタイムラインがあれば、現在時刻と関連範囲を更新し、 古いタイムライン集合はクリアされ、 スタイル再計算とレイアウト更新の追加ステップが実行されます。

注: プログラムでサイズ変更される要素を考慮するため、 ResizeObserver の発火後にレイアウト変更をチェックします。

注: 古いタイムラインは最初のスタイルとレイアウト計算時のみ集計されるため、 直接的に追加のスタイル再計算が1回だけ発生します。 他のAPIが追加更新を必要とする場合も同じステップ内でチェックし、同時に更新してください。

注: この追加のスタイル・レイアウト更新がなければ、 初期古いタイムラインはそのフレーム中ずっと古いままとなり (つまり現在時刻を持たない)、 そのタイムラインにリンクされたアニメーションはそのフレームで効果値を出力しないため、 レンダリングで初期の「フラッシュ」が生じる可能性があります。

注: このセクションは getComputedStyle() などによる強制スタイル・レイアウト計算には影響しません。 つまり、初期古いタイムラインはそのままAPIから見えます。

最終的なスタイル・レイアウト更新が timeline-scope(スコープ参照)や スクロール進行タイムラインビュー進行タイムラインの 時刻またはスコープに変化をもたらす場合、 それらは次回レンダリング更新時まで再サンプリングされません。

このセクションのどの記述も、スクロールがレイアウトやスクリプトをブロックすることを要求するものではありません。 ユーザーエージェントが通常、スクロールが発生したもののレイアウトやスクリプトの影響が完全に反映されていないフレームを合成する場合 (例:scrollイベントリスナーがまだ実行されていない場合)、 スクロール駆動アニメーションのサンプリングも、その合成フレームでは行わない選択ができます。 その場合、描画されたスクロールオフセットとスクロール駆動アニメーションの状態は合成フレーム内で不一致となることがあります。

6. プライバシーの考慮事項

本仕様の機能に関して既知のプライバシーへの影響はありません。

7. セキュリティの考慮事項

本仕様の機能に関して既知のセキュリティへの影響はありません。

付録A: タイムライン範囲

このセクションはCSS-ANIMATIONS-2およびWEB-ANIMATIONS-2に移すべきです。

この付録では名前付きタイムライン範囲アニメーション付与範囲の概念を CSS Animationsおよび Web Animationsに導入します。

名前付きタイムライン範囲

名前付きタイムライン範囲は、 アニメーションタイムラインの名前付き区間です。 区間の開始はその範囲を0%進行度で表し、 区間の終端は100%進行度で表します。 1つのタイムラインには複数の名前付きタイムライン範囲が関連付けられる場合があり、 これらの範囲が重複することもあります。 例えば、ビュー進行タイムラインcontain範囲は cover範囲と重複します。 名前付きタイムライン範囲は、 <timeline-range-name>値型で表され、 これは定義済みの名前付きタイムライン範囲のいずれかを表すCSS識別子です。

注: 本仕様では、名前付きタイムライン範囲[SCROLL-ANIMATIONS-1]などの仕様で定義されている必要があります。 将来的なレベルでは、著者が独自の名前付きタイムライン範囲を宣言できるAPIが導入される可能性があります。

名前付きタイムライン範囲キーフレームセレクター

名前付きタイムライン範囲の名称とパーセンテージは、 名前付きタイムライン範囲内の特定進行度へキーフレームを付与するために利用できます。 CSSの@keyframes規則は次のように拡張されます:

<keyframe-selector> = from | to | <percentage [0,100]> | <timeline-range-name> <percentage>

ここで<timeline-range-name>は 選択した定義済み名前付きタイムライン範囲を表すCSS識別子であり、 その後ろの<percentage>はその名前付きタイムライン範囲の開始~終了間の進行度割合を表します。

キーフレームは指定したタイムラインの位置に付与されます。 タイムラインに該当する名前付きタイムライン範囲がない場合、 その名前付きタイムライン範囲上のキーフレームは無視されます。 この付与点がアニメーションのアクティブ区間外の場合もあり、 その場合は自動生成のfrom(0%)およびto(100%)キーフレームは、 そのプロパティに0%以前または100%以上のキーフレームがなければ生成されます。

タイムライン範囲へのアニメーション付与

一連のアニメーションキーフレームは アニメーション付与範囲に基づいて付与でき、 アニメーションのアクティブ区間を そのタイムライン範囲に制限できます(animation-rangeプロパティ)。 ディレイ(animation-delay参照)はこの制限範囲内で設定されるため、 autodurationや 無限繰り返しの利用可能時間がさらに減少します。

注: animation-range付与範囲を広げることも絞ることもできます。

付与範囲外に配置されたフレームは必要に応じて補間に使われますが、 アクティブ区間外なのでアニメーション本体からは除外され、 実質的にアニメーションは付与範囲の末尾で切り捨てられます。

range start┐             ╺┉┉active interval┉┉╸           ┌range end
┄┄┄┄┄┄┄┄┄┄┄├─────────────╊━━━━━━━━━━━━━━━━━━━╉───────────┤┄┄┄┄┄┄┄┄
           ╶┄start delay┄╴                   ╶┄end delay┄╴
                         ╶┄┄┄┄┄ duration┄┄┄┄┄╴

animation-rangeプロパティは、 リセット専用サブプロパティであり、 animationショートハンドです。

時間駆動アニメーションへの適用も定義すること。

アニメーションのタイムライン範囲指定:animation-rangeショートハンド

名前: animation-range
値: [ <'animation-range-start'> <'animation-range-end'>? ]#
初期値: 個別プロパティ参照
対象: 個別プロパティ参照
継承: 個別プロパティ参照
パーセンテージ: 個別プロパティ参照
算出値: 個別プロパティ参照
アニメーションタイプ: 個別プロパティ参照
正規順序: 文法通り

animation-rangeプロパティは、 ショートハンドであり、 animation-range-startanimation-range-endを一括設定し、 アニメーションを指定したアニメーション付与範囲に関連付けます。

もし<'animation-range-end'>が省略され、 <'animation-range-start'><timeline-range-name>成分が含まれている場合、 animation-range-endは 同じ<timeline-range-name>100%に設定されます。 それ以外で省略されたロングハンド初期値となります。

以下の宣言例は、animation-rangeショートハンド宣言と、 それに相当するanimation-range-startanimation-range-end宣言です:
animation-range: entry 10% exit 90%;
animation-range-start: entry 10%;
animation-range-end: exit 90%;

animation-range: entry;
animation-range-start: entry 0%;
animation-range-end: entry 100%;

animation-range: entry exit;
animation-range-start: entry 0%;
animation-range-end: exit 100%;

animation-range: 10%;
animation-range-start: 10%;
animation-range-end: normal;

animation-range: 10% 90%;
animation-range-start: 10%;
animation-range-end: 90%;

animation-range: entry 10% exit;
animation-range-start: entry 10%;
animation-range-end: exit 100%;

animation-range: 10% exit 90%;
animation-range-start: 10%;
animation-range-end: exit 90%;

animation-range: entry 10% 90%;
animation-range-start: entry 10%;
animation-range-end: 90%;

ここで省略値の扱いはどうするのが最適か? [Issue #8438]

アニメーションのタイムライン範囲開始指定:animation-range-startプロパティ

名前: animation-range-start
値: [ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]#
初期値: normal
対象: 全要素
継承: no
パーセンテージ: 指定された名前付きタイムライン範囲があればそれに、なければタイムライン全体に対する相対値
算出値: リスト。各アイテムはnormalキーワードまたはタイムライン範囲+進行度パーセンテージ
正規順序: 文法通り
アニメーションタイプ: アニメーション不可

アニメーションの付与範囲の開始位置を指定し、 アニメーションの開始時刻(すなわち繰り返し回数1の時に0%進行度にマッピングされるキーフレームの付与位置)をずらします。

値の意味は以下の通りです:

normal
アニメーションの付与範囲開始は関連タイムラインの開始となり、 アニメーションのアクティブ区間は通常通り決定されます。
<length-percentage>
アニメーション付与範囲は タイムラインの開始から指定位置で開始します。
<timeline-range-name> <length-percentage>?
アニメーション付与範囲は 指定された名前付きタイムライン範囲の開始から指定位置で開始します。 <length-percentage>が省略された場合は0%となります。

アニメーションのタイムライン範囲終了指定:animation-range-endプロパティ

名前: animation-range-end
値: [ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]#
初期値: normal
対象: 全要素
継承: no
パーセンテージ: 指定された名前付きタイムライン範囲があればそれに、なければタイムライン全体に対する相対値
算出値: リスト。各アイテムはnormalキーワードまたはタイムライン範囲+進行度パーセンテージ
正規順序: 文法通り
アニメーションタイプ: アニメーション不可

アニメーションの付与範囲の終了位置を指定し、 アニメーションの終了時刻(すなわち繰り返し回数1の時に100%進行度にマッピングされるキーフレームの付与位置)をずらす・ またはアニメーションのアクティブ区間を切り詰めます。

値の意味は以下の通りです:

normal
アニメーションの付与範囲の終了は関連タイムラインの終端となり、 アニメーションのアクティブ区間は通常通り決定されます。
<length-percentage>
アニメーション付与範囲は タイムラインの開始から指定位置で終了します。
<timeline-range-name> <length-percentage>?
アニメーション付与範囲は 指定された名前付きタイムライン範囲の開始から指定位置で終了します。 <length-percentage>が省略された場合は100%となります。

タイムライン範囲進行度の取得:getCurrentTime()メソッド

名前付き範囲の進行度は、AnimationTimeline オブジェクト上のgetCurrentTime() メソッドで公開されます:

dictionary AnimationTimeOptions {
  DOMString? range;
};

[Exposed=Window]
partial interface AnimationTimeline {
  CSSNumericValue? getCurrentTime(optional AnimationTimeOptions options = {});
};
CSSNumericValue? getCurrentTime(optional AnimationCurrentTimeOptions = {})
現在時刻の表現を次の通り返します:
range が指定されていない場合:
currentTime の値をthis上で返しますが、 ミリ秒値はdoubleではなく CSSUnitValue(単位ms)として返します。
range が指定され有効な名前付きタイムライン範囲の場合:
その範囲内の進行度progress(パーセンテージ値)を取得し、

新しい単位値progress, "percent")を作成して返します。

もし名前付きタイムライン範囲の開始・終了が一致する場合は、 その点以前または同一の時刻は負の∞、それ以降は正の∞を返します。

range が指定されたが有効な名前付きタイムライン範囲でない場合:
nullを返します。

このメソッドはcurrentTimeと関係しますが同一ではありません。名称を変えるべき? [Issue #8201]

このメソッドはrange名指定時、ScrollTimelineの範囲に対してパーセンテージを返します。 時間ベースタイムラインの場合、range名指定時はその範囲のパーセンテージ進行度、または時間進行度を返すべき?

付録B: タイムライン名スコープ

このセクションはCSS-ANIMATIONS-2に移すべきです。

この付録では、祖先要素でタイムライン名のスコープを宣言できるtimeline-scopeプロパティを紹介します。

名前付きタイムラインのスコープ宣言:timeline-scopeプロパティ

名前: timeline-scope
値: none | <dashed-ident>#
初期値: none
対象: 全要素
継承: no
パーセンテージ: n/a
算出値: noneキーワードまたはCSS識別子のリスト
正規順序: 文法通り
アニメーションタイプ: アニメーション不可

このプロパティは指定されたタイムライン名のスコープをこの要素のサブツリー全体に拡張します。 これにより、名前付きタイムライン (名前付きスクロール進行タイムライン名前付きビュー進行タイムラインなど)が タイムライン定義要素のサブツリー外(兄弟・従兄弟・祖先など)からも参照可能になります。 また、指定名の子孫タイムラインはこのサブツリー外から参照できなくなり、 祖先タイムラインはこのサブツリー内から参照できなくなります。

この遮断効果について議論中です。 [Issue #8915]

値の意味は以下の通りです:

none
タイムライン名のスコープに変更なし。
<dashed-ident>
子孫で定義された一致する名前付きタイムライン(その子孫が明示的にtimeline-scopeを宣言していない場合)をこの要素と全子孫でスコープ内とする。

該当タイムラインが存在しない、または複数存在する場合は、その名前の非アクティブタイムラインを宣言する。

注: このプロパティは、同じ名前を宣言した子孫要素のサブツリー内のタイムライン名検索には影響しません。 名前付きタイムラインのスコープ宣言:timeline-scopeプロパティ参照。

8. 変更点

前回(2023年4月28日)の作業草案からの変更点:

また、以前の変更点も参照してください。

適合性

文書慣例

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

本仕様書のすべてのテキストは、明示的に非規範部・例・注記と記された部分を除き、規範的です。[RFC2119]

本仕様の例は「for example」という語で導入されるか、class="example"で規範テキストから区別されます。例:

これは情報提供用の例です。

情報提供用の注記は「Note」で始まり、class="note"で規範テキストと区別されます。例:

注:これは情報提供用の注記です。

勧告は規範的なセクションで、特別な注意を促すようにスタイルされ、<strong class="advisement">で区別されます。例: UAはアクセシブルな代替手段を必ず提供しなければならない。

適合クラス

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

スタイルシート
CSS スタイルシート
レンダラー
UA。スタイルシートの意味論を解釈し、それを使う文書を描画します。
オーサリングツール
UA。スタイルシートを書き出します。

スタイルシートが本仕様に適合するには、本モジュールで定義された構文を使うすべての文が、汎用CSS文法および各機能の個別文法に従い有効である必要があります。

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

オーサリングツールが本仕様に適合するには、汎用CSS文法および本モジュールの各機能の個別文法に合致した構文的に正しいスタイルシートを書き出し、本モジュールに記載されたスタイルシートのその他の適合要件もすべて満たす必要があります。

部分実装

著者が将来互換性のあるパース規則を活用してフォールバック値を割り当てられるよう、CSSレンダラーは、利用可能なレベルのサポートがない@ルール、プロパティ、値、キーワードその他の構文を無効として扱い、必要に応じて無視しなければなりません。特に、UAは未サポートの構成値だけを無視して、マルチ値プロパティ宣言内のサポート値だけを適用してはならない:いずれかの値が無効(未サポートの場合)なら、CSSは宣言全体を無視することを要求します。

不安定および独自機能の実装

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

非実験的実装

仕様がCandidate Recommendation段階に達すると、非実験的実装が可能となり、実装者は仕様通りに正しく実装できたCRレベルの機能については接頭辞なしでリリースすることが推奨されます。

CSSの相互運用性を確立・維持するため、CSS作業グループは非実験的CSSレンダラーに対し、非接頭辞実装の前に実装報告書(必要ならそのテストケース)をW3Cに提出するよう要請します。提出されたテストケースはCSS作業グループによるレビュー・修正が行われる場合があります。

テストケース・実装報告書の提出方法の詳細は、CSS作業グループWebサイト(https://www.w3.org/Style/CSS/Test/)を参照してください。お問い合わせはpublic-css-testsuite@w3.orgまで。

索引

本仕様で定義される用語

参照による定義語

参考文献

規範的参照文献

[CSS-ALIGN-3]
Elika Etemad; Tab Atkins Jr.. CSS Box Alignment Module Level 3. 2023年2月17日. WD. URL: https://www.w3.org/TR/css-align-3/
[CSS-ANIMATIONS-1]
David Baron; 他. CSS Animations Level 1. 2023年3月2日. WD. URL: https://www.w3.org/TR/css-animations-1/
[CSS-ANIMATIONS-2]
David Baron; Brian Birtles. CSS Animations Level 2. 2023年3月2日. WD. URL: https://www.w3.org/TR/css-animations-2/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2022年11月3日. WD. URL: https://www.w3.org/TR/css-box-4/
[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-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-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2023年3月29日. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 3. 2023年4月3日. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-SCOPING-1]
Tab Atkins Jr.; Elika Etemad. CSS Scoping Module Level 1. 2014年4月3日. WD. URL: https://www.w3.org/TR/css-scoping-1/
[CSS-SCROLL-SNAP-1]
Matt Rakow; 他. CSS Scroll Snap Module Level 1. 2021年3月11日. CR. URL: https://www.w3.org/TR/css-scroll-snap-1/
[CSS-SHAPES-2]
CSS Shapes Module Level 2 URL: https://drafts.csswg.org/css-shapes-2/
[CSS-TYPED-OM-1]
Shane Stephens; Tab Atkins Jr.; Naina Raisinghani. CSS Typed OM Level 1. 2018年4月10日. WD. URL: https://www.w3.org/TR/css-typed-om-1/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2022年12月1日. CR. URL: https://www.w3.org/TR/css-values-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/
[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/
[CSS2]
Bert Bos; 他. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS21/
[CSSOM-VIEW-1]
Simon Pieters. CSSOM View Module. 2016年3月17日. WD. URL: https://www.w3.org/TR/cssom-view-1/
[DOM]
Anne van Kesteren. DOM標準. 現行標準. URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; 他. HTML標準. 現行標準. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 標準. 現行標準. URL: https://infra.spec.whatwg.org/
[MEDIAQUERIES-5]
Dean Jackson; 他. Media Queries Level 5. 2021年12月18日. WD. URL: https://www.w3.org/TR/mediaqueries-5/
[RFC2119]
S. Bradner. RFCにおける要求レベルを示すキーワード. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEB-ANIMATIONS-1]
Brian Birtles; 他. 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標準. 現行標準. URL: https://webidl.spec.whatwg.org/

参考参照文献

[CSS-TRANSFORMS-1]
Simon Fraser; 他. CSS Transforms Module Level 1. 2019年2月14日. CR. URL: https://www.w3.org/TR/css-transforms-1/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 2021年8月26日. WD. URL: https://www.w3.org/TR/cssom-1/
[RESIZE-OBSERVER-1]
Aleks Totic; Greg Whitworth. Resize Observer. 2020年2月11日. WD. URL: https://www.w3.org/TR/resize-observer-1/
[SCROLL-ANIMATIONS-1]
Brian Birtles; 他. Scroll-driven Animations. 2023年4月28日. WD. URL: https://www.w3.org/TR/scroll-animations-1/

プロパティ索引

名前 初期値 対象 継承 パーセンテージ アニメーションタイプ 正規順序 算出値
animation-range [ <'animation-range-start'> <'animation-range-end'>? ]# 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 文法通り 個別プロパティ参照
animation-range-end [ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]# normal 全要素 no 指定された名前付きタイムライン範囲があればそれに、なければタイムライン全体に対する相対値 アニメーション不可 文法通り リスト。各アイテムはnormalキーワードまたはタイムライン範囲+進行度パーセンテージ
animation-range-start [ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]# normal 全要素 no 指定された名前付きタイムライン範囲があればそれに、なければタイムライン全体に対する相対値 アニメーション不可 文法通り リスト。各アイテムはnormalキーワードまたはタイムライン範囲+進行度パーセンテージ
scroll-timeline [ <'scroll-timeline-name'> <'scroll-timeline-axis'>? ]# 個別プロパティ参照 全要素 no 個別プロパティ参照 アニメーション不可 文法通り 個別プロパティ参照
scroll-timeline-axis [ block | inline | x | y ]# block 全要素 no n/a アニメーション不可 文法通り 指定されたキーワードのリスト
scroll-timeline-name none | <dashed-ident># none 全要素 no n/a アニメーション不可 文法通り noneキーワードまたはCSS識別子のリスト
timeline-scope none | <dashed-ident># none 全要素 no n/a アニメーション不可 文法通り noneキーワードまたはCSS識別子のリスト
view-timeline [ <'view-timeline-name'> <'view-timeline-axis'>? ]# 個別プロパティ参照 全要素 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 文法通り 個別プロパティ参照
view-timeline-axis [ block | inline | x | y ]# block 全要素 no n/a アニメーション不可 文法通り 指定されたキーワードのリスト
view-timeline-inset [ [ auto | <length-percentage> ]{1,2} ]# auto 全要素 no 該当スクロールポートの対応次元に対する相対値 算出値型による 文法通り 開始・終了インセットそれぞれをautoキーワードまたは算出済み<length-percentage>値で表す二値ペアのリスト
view-timeline-name none | <dashed-ident># none 全要素 no n/a アニメーション不可 文法通り noneキーワードまたはCSS識別子のリスト

IDL索引

enum ScrollAxis {
  "block",
  "inline",
  "x",
  "y"
};

dictionary ScrollTimelineOptions {
  Element? source;
  ScrollAxis axis = "block";
};

[Exposed=Window]
interface ScrollTimeline : AnimationTimeline {
  constructor(optional ScrollTimelineOptions options = {});
  readonly attribute Element? source;
  readonly attribute ScrollAxis axis;
};

dictionary ViewTimelineOptions {
  Element subject;
  ScrollAxis axis = "block";
  (DOMString or sequence<(CSSNumericValue or CSSKeywordValue)>) inset = "auto";
};

[Exposed=Window]
interface ViewTimeline : ScrollTimeline {
  constructor(optional ViewTimelineOptions options = {});
  readonly attribute Element subject;
  readonly attribute CSSNumericValue startOffset;
  readonly attribute CSSNumericValue endOffset;
};

dictionary AnimationTimeOptions {
  DOMString? range;
};

[Exposed=Window]
partial interface AnimationTimeline {
  CSSNumericValue? getCurrentTime(optional AnimationTimeOptions options = {});
};

課題索引

0%は通常スクロールコンテナの初期スクロール位置を表しますが、 コンテンツ分布によってはそうならない場合もあります。 CSS Box Alignment 3 § 5.3 オーバーフローとスクロール位置参照。 これが望んだ挙動でしょうか?
currentTime が負または100%超になる場合について注記を追加してください。
図を挿入してください。
view-timeline-insetもリセットすべきでしょうか?
このセクションはCSS-ANIMATIONS-2とWEB-ANIMATIONS-2へ移すべきです。
時間駆動アニメーションへの適用も定義してください。
ここで省略値の扱いはどうするのが最適でしょうか? [Issue #8438]
このメソッドはcurrentTime と関連しますが同一ではありません。名称を変更すべきでしょうか? [Issue #8201]
このメソッドはrange名指定時、ScrollTimelineの範囲に対してパーセンテージを返します。 時間ベースタイムラインの場合、range名指定時はその範囲のパーセンテージ進行度か、時間進行度か?
このセクションはCSS-ANIMATIONS-2へ移すべきです。
この遮断効果について議論中です。 [Issue #8915]