1. 序論
◎非規範的この仕様は、 ある~DOM~API, それに結付けられる~CSS特能を導入する。 それは、 `~view遷移@ ( `view transition^en )と呼ばれる[ `文書$を成す ある状態から異なる状態へ~animateされる視覚的な遷移 ]を作成することを開発者に許容する。 ◎ This specification introduces a DOM API and associated CSS features that allow developers to create animated visual transitions, called view transitions between different states of a document.
1.1. ~DOM更新と視覚的な遷移の分離-法
伝統的に, 2 つの文書~状態の間で視覚的な遷移を作成することには、 ~DOMにおいて両~状態が同時に在るような期間が要求されていた。 事実,それは、 通例的には,両~状態を表現し得る特有な~DOM構造を作成することを孕んでいた。 例えば,ある要素が容器から容器へ “移動する” 場合、 要素は,当の遷移を成す期間において[ どちらかの容器 または それらの先祖~要素【の限界域】で切取られるのを避ける ]ため[ 両~容器の外側に存在する必要がある ]ことが多い。 ◎ Traditionally, creating a visual transition between two document states required a period where both states were present in the DOM at the same time. In fact, it usually involved creating a specific DOM structure that could represent both states. For example, if one element was “moving” between containers, that element often needed to exist outside of either container for the period of the transition, to avoid clipping from either container or their ancestor elements.
この余分な途中-状態は、 ~UXと~accessibilityの課題になることが多い — ~DOMを成す構造が,純粋に視覚的な効果~用に譲歩させられるので。 ◎ This extra in-between state often resulted in UX and accessibility issues, as the structure of the DOM was compromised for a purely-visual effect.
`~view遷移$は、 次を許容することにより,この厄介な途中-状態を避ける: ~DOMを 2 つの状態の間で瞬時に切替えてから、 別の層において 2 つの状態の間で[ 旧-状態を成す静的な視覚的な捕捉, 新-状態を成す~liveな捕捉 ]を利用して,~custom化~可能な視覚的な遷移を遂行することにより。 これらの捕捉は、 `疑似要素$たちが成す~treeとして表現される (詳細は、 `§ ~view遷移~用の疑似要素@#view-transition-pseudos$にて) — それは、[ 旧-, 新- ]両~視覚的な状態が共存するようにして,[ ~size, 位置 ]を旧-から新-へ~animateしている間に[ ~cross-fadeするなどの効果 ]を許容する。 ◎ View Transitions avoid this troublesome in-between state by allowing the DOM to switch between states instantaneously, then performing a customizable visual transition between the two states in another layer, using a static visual capture of the old state, and a live capture of the new state. These captures are represented as a tree of pseudo-elements (detailed in § 3.2 View Transition Pseudo-elements), where the old visual state co-exists with the new state, allowing effects such as cross-fading while animating from the old to new size and position.
1.2. ~view遷移の~custom化
`Document$I の `startViewTransition()$m は、 既定では,~page全般な`~view遷移$を作成する — それは、 2 つの~DOM状態の間で~cross-fadeすることからなる。 開発者は、 `view-transition-name$p ~CSS~propを利用して, どの要素が独立に捕捉されるかも選べる — それは、 要素が~pageを成す残りとは独立に~animateされることを許容する。 遷移-中な状態 (そこでは、旧-, 新- 両~視覚的な捕捉が存在する) は,疑似要素たちとして表現されるので、 開発者は,馴染みな特能 — `~CSS~animation@~CSSANIM$cite, `~Web~animation@~WANIM$cite など — を利用して各~遷移を~custom化できる。 ◎ By default, document.startViewTransition() creates a view transition consisting of a page-wide cross-fade between the two DOM states. Developers can also choose which elements are captured independently using the view-transition-name CSS property, allowing these to be animated independently of the rest of the page. Since the transitional state (where both old and new visual captures exist) is represented as pseudo-elements, developers can customize each transition using familiar features such as CSS Animations and Web Animations.
1.3. ~view遷移の~lifecycle
成功裡な`~view遷移$は、 順に,次に挙げる相を経ていく: ◎ A successful view transition goes through the following phases:
-
開発者は、
document.`startViewTransition$m(`updateCallback$V)
を~callする — それは、 ある `ViewTransition$I %~view遷移 を返す。 ◎ Developer calls document.startViewTransition(updateCallback), which returns a ViewTransition, viewTransition. - 現在の状態が “旧-” 状態として捕捉される。 ◎ Current state captured as the “old” state.
- 描画は静止される。 ◎ Rendering paused.
- 開発者から `updateCallback$V 関数が供された場合、 それが~callされる — それが,文書~状態を更新する。 ◎ Developer’s updateCallback function, if provided, is called, which updates the document state.
- %~view遷移 の `updateCallbackDone$m が充足される。 ◎ viewTransition.updateCallbackDone fulfills.
- 現在の状態が “新-” 状態 として捕捉される。 ◎ Current state captured as the “new” state.
- 遷移~疑似要素たちが作成される。 これらが成す構造の概観は、 `§ ~view遷移~用の疑似要素@#view-transition-pseudos$ を見よ。 ◎ Transition pseudo-elements created. See § 3.2 View Transition Pseudo-elements for an overview of this structure.
- 描画は静止されなくなり,遷移~疑似要素が露呈される。 ◎ Rendering unpaused, revealing the transition pseudo-elements.
- %~view遷移 の `ready$m が充足される。 ◎ viewTransition.ready fulfills.
- 完遂するまで,疑似要素たちを~animateする。 ◎ Pseudo-elements animate until finished.
- 遷移~疑似要素たちが除去される。 ◎ Transition pseudo-elements removed.
- %~view遷移 の `finished$m が充足される。 ◎ viewTransition.finished fulfills.
1.4. 増補としての遷移
`~view遷移^cite ~APIの設計においては、[ ~animateされる遷移は、 下層の文書~状態~変化に対する視覚的な`増補^emである ]ことが要点を成す。 すなわち、 誤った環境設定や機器~拘束などに因り[ 視覚的な遷移を作成することに失敗して、 遷移~animationは起こり得ないことが事前に判明した場合 ]でも,開発者の `ViewTransitionUpdateCallback$I は常に~callされる。 ◎ A key part of the View Transition API design is that an animated transition is a visual enhancement to an underlying document state change. That means a failure to create a visual transition, which can happen due to misconfiguration or device constraints, will not prevent the developer’s ViewTransitionUpdateCallback being called, even if it’s known in advance that the transition animations cannot happen.
例えば,開発者が`~view遷移~lifecycle@#lifecycle$の開始~時に `skipTransition()$m を~callした場合、 ~animateされる遷移に関係している段 — `~view遷移~tree$を作成するなど — は起こらなくなる。 しかしながら, `ViewTransitionUpdateCallback$I は依然として~callされる — 飛ばされるのは、 下層の状態~変更ではなく,視覚的な遷移に限られる。 ◎ For example, if the developer calls skipTransition() at the start of the view transition lifecycle, the steps relating to the animated transition, such as creating the view transition tree, will not happen. However, the ViewTransitionUpdateCallback will still be called. It’s only the visual transition that’s skipped, not the underlying state change.
注記: ~DOM変更も飛ばされるべきである場合、 別の特能により取扱われる必要がある。 `NavigateEvent$I の `signal$m は、 【!https://wicg.github.io/navigation-api/#navigateevent】 【!https://wicg.github.io/navigation-api/#ref-for-dom-navigateevent-signal①】 そのような特能の開発者が これを取扱うためにも利用できる例である。 ◎ Note: If the DOM change should also be skipped, then that needs to be handled by another feature. navigateEvent.signal is an example of a feature developers could use to handle this.
`~view遷移^cite ~APIは、[ `updateCallback$V を介して,~DOMを非同期的に変更する ]ことを許容するが,~DOM変更を[ 遷移~自身に必要な~schedule法 ]を超えて[ ~queueする/~scheduleする ]ことは担当しない。 非同期的な~DOM変更には、 同時並行に起こり得るものもあれば (例:それらが独立な~componentの中で起きている場合),[ 他を~queueする/先立つ変更を中止する ]必要があるものもある。 これは、 当の~appを より全体的に捉える[ 特能/~framework ]に委ねるのが最善である。 ◎ Although the View Transition API allows DOM changes to be asynchronous via the ViewTransitionUpdateCallback, the API is not responsible for queuing or otherwise scheduling DOM changes beyond any scheduling needed for the transition itself. Some asynchronous DOM changes can happen concurrently (e.g if they’re happening within independent components), whereas others need to queue, or abort an earlier change. This is best left to a feature or framework that has a more holistic view of the application.
1.5. 描画~model
`~view遷移^cite ~APIは、 ~UAが生成した疑似要素を利用して, 所与の要素が描画される状態を【画像として】再現することにより働く。 [ 要素, その子孫 ]に適用される[ 要素の描画を成す側面 ] — 例えば[ `filter$p や `opacity$p 様な視覚的な効果/ `overflow$p や `clip-path$p による切取り ] — は、 その`画像を捕捉する$中で画像を生成するときに適用される。 ◎ View Transition works by replicating an element’s rendered state using UA generated pseudo-elements. Aspects of the element’s rendering which apply to the element itself or its descendants, for example visual effects like filter or opacity and clipping from overflow or clip-path, are applied when generating its image in Capture the image.
しかしながら,そのように生成される画像には、 `mix-blend-mode$p の様な[ 要素が埋込まれたとき,それをどう描くかを定義する~prop ]は適用できない。 そのような~propは、 当の要素に対応している `view-transition-group()$pe 疑似要素 — 当の要素に等価な~boxを生成するよう意味された疑似要素 — に適用される。 ◎ However, properties like mix-blend-mode which define how the element draws when it is embedded can’t be applied to its image. Such properties are applied to the element’s corresponding ::view-transition-group() pseudo-element, which is meant to generate a box equivalent to the element.
`view-transition-group()$pe に対応している要素が “新-” 状態~内に在る場合、 ~browserは、 “新-” 状態~内にある~DOM要素との同期cを保つよう, 各~propを `view-transition-group()^pe へ複製する。 `view-transition-group()^pe に対応している要素が “旧-”, “新-” 両~状態~内に在って, 複製された~propは補間-可能な場合、 ~browserは,[ 当の~propを滑らかに~animateするための既定の~animation ]も設定しておくことになる。 ◎ If the ::view-transition-group() has a corresponding element in the "new" states, the browser keeps the properties copied over to the ::view-transition-group() in sync with the DOM element in the "new" state. If the ::view-transition-group() has a corresponding both in the "old" and "new" state, and the property being copied is interpolatable, the browser also sets up a default animation to animate the property smoothly.
1.6. 例
次の様な~patternを利用して,内容を更新する~pageがあったとする: ◎ Taking a page that already updates its content using a pattern like this:
function spaNavigate(%data) { updateTheDOMSomehow(%data); }
それには、 次の様に`~view遷移$を追加することもできる: ◎ A view transition could be added like this:
function spaNavigate(%data) { /* この~APIを~supportしない~browser用の~fallback: ◎ Fallback for browsers that don't support this API: */ if (!document.startViewTransition) { updateTheDOMSomehow(%data); return; } /* 遷移を伴わせる: ◎ With a transition: */ document.startViewTransition(() => updateTheDOMSomehow(%data)); }
結果は、 素早く~cross-fadeする,既定の遷移になる: ◎ This results in the default transition of a quick cross-fade:
この~cross-fadeは、 `疑似要素たちが成す~tree@#view-transition-pseudos$上の~CSS~animationを利用して達成される。 なので、 ~CSSを利用して~custom化できる。 例えば: ◎ The cross-fade is achieved using CSS animations on a tree of pseudo-elements, so customizations can be made using CSS. For example:
::view-transition-old(root), ::view-transition-new(root) { animation-duration: 5s; }
その結果、 より遅く遷移するようになる: ◎ This results in a slower transition:
上の例に引き続き、 ~motionを追加できる: ◎ Building on the previous example, motion can be added:
@keyframes fade-in { from { opacity: 0; } } @keyframes fade-out { to { opacity: 0; } } @keyframes slide-from-right { from { transform: translateX(30px); } } @keyframes slide-to-left { to { transform: translateX(-30px); } } ::view-transition-old(root) { animation: 90ms cubic-bezier(0.4, 0, 1, 1) both fade-out, 300ms cubic-bezier(0.4, 0, 0.2, 1) both slide-to-left; } ::view-transition-new(root) { animation: 210ms cubic-bezier(0, 0, 0.2, 1) 90ms both fade-in, 300ms cubic-bezier(0.4, 0, 0.2, 1) both slide-from-right; }
その結果は: ◎ Here’s the result:
上の例に引き続き、 当の遷移~用に, ~headerと~headerの中の~textに自前の `view-transition-group()$pe を与えれる: ◎ Building on the previous example, the header and text within the header can be given their own ::view-transition-group()s for the transition:
.main-header {
view-transition-name: main-header;
}
.main-header-text {
view-transition-name: main-header-text;
/*
要素の~sizeを一貫させる
— ~textは変わらないと見做して:
◎
Give the element a consistent size, assuming identical text:
*/
width: fit-content;
}
既定では、 これら各~groupの[ ~size,位置 ]は、 視覚的な状態が~cross-fadeする間に, “旧-” 状態から “新-” 状態へ遷移することになる: ◎ By default, these groups will transition size and position from their “old” to “new” state, while their visual states cross-fade:
上の例に引き続き、 一部の~pageには,~sidebarがあるとする: ◎ Building on the previous example, let’s say some pages have a sidebar:
この事例では、 ~sidebarが[ “旧-”, “新-” ]両~状態~内にある場合は, ~sidebarは静的にした方が全体の見かけは良くなる。 他の場合,~sidebarは[ 内/外 ]へ~animateするべきである。 ◎ In this case, things would look better if the sidebar was static if it was in both the “old” and “new” states. Otherwise, it should animate in or out.
`only-child$ps 疑似類を利用すれば、 これらの状態~用に特定的に~animationを作成できる: ◎ The :only-child pseudo-class can be used to create animations specifically for these states:
.sidebar { view-transition-name: sidebar; } @keyframes slide-to-right { to { transform: translateX(30px); } } /* ~sidebarが内へ来る遷移 ◎ Entry transition */ ::view-transition-new(sidebar):only-child { animation: 300ms cubic-bezier(0, 0, 0.2, 1) both fade-in, 300ms cubic-bezier(0.4, 0, 0.2, 1) both slide-from-right; } /* ~sidebarが外へ出る遷移 ◎ Exit transition */ ::view-transition-old(sidebar):only-child { animation: 150ms cubic-bezier(0.4, 0, 1, 1) both fade-out, 300ms cubic-bezier(0.4, 0, 0.2, 1) both slide-to-right; }
既定の~animationは、[ ~sidebarに “旧-”, “新-” 両~状態がある事例 ]用には正しくなる。 ◎ For cases where the sidebar has both an “old” and “new” state, the default animation is correct.
上の例から~~改めて、 利用者の~cursorを中心に “新-” 状態が円形に広がることが求まれたとする。 これは、 ~CSSだけでは行えない。 ◎ Not building from previous examples this time, let’s say we wanted to create a circular reveal from the user’s cursor. This can’t be done with CSS alone.
まず,~CSSにおいては、[ “旧-” 状態, “新-” 状態 ]用の層を — 既定の混色-法を伴わず,既定の~cross-fade~animationを防止する下で — 重ねることを許容する: ◎ Firstly, in the CSS, allow the “old” and “new” states to layer on top of one another without the default blending, and prevent the default cross-fade animation:
::view-transition-image-pair(root) { isolation: auto; } ::view-transition-old(root), ::view-transition-new(root) { animation: none; mix-blend-mode: normal; }
~JS~codeは: ◎ Then, the JavaScript:
/* 最後の~click~eventを格納する ◎ Store the last click event */ let %lastClick; addEventListener('click', %event => (%lastClick = %event)); function spaNavigate(%data) { /* この~APIを~supportしない~browser用の~fallback: ◎ Fallback for browsers that don't support this API: */ if (!document.startViewTransition) { updateTheDOMSomehow(%data); return; } /* ~click位置を取得する — できない場合、~screenの真中に~fall-backする: ◎ Get the click position, or fallback to the middle of the screen */ const %x = %lastClick?.clientX ?? window.innerWidth / 2; const %y = %lastClick?.clientY ?? window.innerHeight / 2; /* 最も遠い隅までの距離を取得する: ◎ Get the distance to the furthest corner */ const %endRadius = Math.hypot( Math.max(%x, innerWidth - %x), Math.max(%y, innerHeight - %y) ); /* 遷移を作成する: ◎ Create a transition: */ const %transition = document.startViewTransition(() => { updateTheDOMSomehow(%data); }); /* 疑似要素たちが作成されるまで待機する: ◎ Wait for the pseudo-elements to be created: */ %transition.ready.then(() => { /* 根の新たな~viewを~animateする: ◎ Animate the root's new view */ document.documentElement.animate( { clipPath: [ ``^`circle^(0 at ${%x}px ${%y}px)``^, ``^`circle^(${%endRadius}px at ${%x}px ${%y}px)``^, ], }, { duration: 500, easing: 'ease-in', /* どの疑似要素を~animateするか指定する: ◎ Specify which pseudo-element to animate */ pseudoElement: '::view-transition-new(root)', } ); }); }
その結果は: ◎ And here’s the result:
2. ~CSS~prop
2.1. 個別に遷移している下位treeの~tag付け: `view-transition-name^p ~prop
◎名 `view-transition-name@p ◎値 `none$v | `custom-ident$t ◎初 `none^v ◎適 すべての要素 ◎継 されない ◎百 受容しない ◎算 指定されたとおり ◎順 文法に従う ◎ア 離散的 ◎表終注記: `view-transition-name$p は`離散的$に~animate可能であるが、 ~animateしても,稼働中な~view遷移には影響しない。 そうではなく、[ 時間~越しに/`時列線$に基づいて ]変化し得る仕方で,その値を設定する仕方を与える。 例えば、 `~scroll駆動な~animation$に基づいて `view-transition-name$p を変更することに利用できよう。 ◎ Note: though view-transition-name is discretely animatable, animating it doesn’t affect the running view transition. Rather, it’s a way to set its value in a way that can change over time or based on a timeline. An example for using this would be to change the view-transition-name based on scroll-driven animations.
`view-transition-name$p ~propは、 `~view遷移~内に捕捉され@#captured-in-a-view-transition$た要素に対し, 指定された `~view遷移~名@ の下で[ `~view遷移~tree$内で独立に追跡する ]ために, “~tag” を付与する。 捕捉された要素は、 当の~pageを成す残りとは独立に~animateされる。 ◎ The view-transition-name property “tags” an element for capture in a view transition, tracking it independently in the view transition tree under the specified view transition name. An element so captured is animated independently of the rest of the page.
- `none@v
- `要素$は、 ~view遷移において独立に関与することはない。 ◎ The element will not participate independently in a view transition.
- `custom-ident$t
- `要素$は、 ~view遷移において, 指定された`~view遷移~名$を伴う[ 旧-/新- ]`要素$として独立に関与する。 ◎ The element participates independently in a view transition—as either an old or new element—with the specified view transition name.
-
各`~view遷移~名$は、 `~tree視野な名前$である。 ◎ Each view transition name is a tree-scoped name.
注記: 現時点では,文書~視野な~view遷移に限り~supportされるので、 当の文書に結付けられた~view遷移~名に限り尊重される。 ◎ Note: Since currently only document-scoped view transitions are supported, only view transition names that are associated with the document are respected.
- この `custom-ident$t においては、 値[ `none^v, `auto^v ]は除外される。 ◎ The values none and auto are excluded from <custom-ident> here.
- 注記: この名前が一意でない場合 (すなわち、 同じ `~view遷移~名$が複数の要素に同時に指定された場合)、 `~view遷移$は中止されることになる。 ◎ Note: If this name is not unique (i.e. if two elements simultaneously specify the same view transition name) then the view transition will abort.
注記: この~APIの目的においては、[ 旧-状態~内にある要素, 新-状態~内にある別の要素 ]に同じ`~view遷移~名$ `foo^v が付与された場合、 それらは[ 同じ要素の異なる視覚-状態を表現している ]ものとして扱われ,`~view遷移~tree$内で~pairにされることになる。 それらの要素が同じ~objを指すことは必要yでないので,これは紛らわしくもなり得るが、 それらを[ 同じ概念的な~page実体を成す,視覚的な状態 ]であると見なすことは、 ~modelとして有用になる。 ◎ Note: For the purposes of this API, if one element has view transition name foo in the old state, and another element has view transition name foo in the new state, they are treated as representing different visual state of the same element, and will be paired in the view transition tree. This may be confusing, since the elements themselves are not necessarily referring to the same object, but it is a useful model to consider them to be visual states of the same conceptual page entity.
要素の`首要~box$が[ `断片化され$る/ `飛ばさ@:~CSSCONTAIN#skips-its-contents$れる/ `描画され$ない ]場合、 この~propによる効果は無い。 正確な詳細は `§ ~algo@#algorithms$ を見よ。 ◎ If the element’s principal box is fragmented, skipped, or not rendered, this property has no effect. See § 7 Algorithms for exact details.
所与の %要素【!`Element$I】 の `文書~視野な~view遷移~名@ を取得するときは: ◎ To get the document-scoped view transition name for an Element element:
- %視野~付き~view遷移~名 ~LET %要素 の `view-transition-name$p の`算出d値$ ◎ Let scopedViewTransitionName be the computed value of view-transition-name for element.
- ~RET [ 次が満たされるならば %視野~付き~view遷移~名 / ~ELSE_ `none$v ] ⇒ [ %視野~付き~view遷移~名 ~NEQ `none$v ]~AND[ %視野~付き~view遷移~名 は %要素 の`~node文書$に結付けられている 【~shadow~treeではなく,~node文書に結付けられた`~tree視野な名前$である】 ] ◎ If scopedViewTransitionName is associated with element’s node document, then return scopedViewTransitionName. ◎ Otherwise, return none.
2.1.1. 描画の集成
`要素$は、 ~OR↓を満たす間は… ◎ Elements\
- `ある~view遷移~内に捕捉されたか$el ~EQ ~T ◎ captured in a view transition during a view transition\
- `view-transition-name$p の`算出d値$ ~NEQ `none$v ◎ or whose view-transition-name computed value is not none\
…間は: ◎ (at any time):
- `積層~文脈$を形成する。 ◎ Form a stacking context.
- `~3D変形において平坦~化される@~TRANSFORM2#grouping-property-values$。 ◎ Are flattened in 3D transforms.
- `後景~根@https://drafts.fxtf.org/filter-effects-2/#backdrop-root$を形成する。 ◎ Form a backdrop root.
3. 疑似要素
3.1. 疑似要素~tree
注記: これは、 疑似要素たちが成す~tree用の一般な定義である。 他の特能にもこの挙動が必要になった場合、 これらの定義は `css-pseudo-4$r へ移動されることになる。 ◎ Note: This is a general definition for trees of pseudo-elements. If other features need this behavior, these definitions will be moved to [css-pseudo-4].
`疑似要素~根@ とは、 `疑似要素~tree$における`根$を指す,`~treeに留まる疑似要素$である。 ◎ A pseudo-element root is a type of tree-abiding pseudo-element that is the root in\
`疑似要素~tree@ とは、 `~treeに留まる疑似要素$たちが成す`~tree$である。 ◎ a tree of tree-abiding pseudo-elements, known as the pseudo-element tree.
`疑似要素~tree$は、 その`子孫$たちの文書~順序を定義する。 ◎ The pseudo-element tree defines the document order of its descendant tree-abiding pseudo-elements.
`疑似要素$ %要素 が ある`疑似要素~tree$に`関与-$しているときは、 %要素 の`親$が %要素 の`出自の疑似要素$になる。 ◎ When a pseudo-element participates in a pseudo-element tree, its originating pseudo-element is its parent.
`疑似要素~根$のある`子孫$ %疑似要素 に自身以外に`同胞$は無い場合、 `only-child$ps は, %疑似要素 に合致する。 ◎ If a descendant pseudo of a pseudo-element root has no other siblings, then :only-child matches that pseudo.
注記: このことは、 `::view-transition-new(ident):only-child^css が `view-transition-new(ident)^pe を選択するのは、 親である `view-transition-image-pair(ident)^pe の`子$は 1 つしかない — すなわち,`同胞$である `view-transition-old(ident)^pe は無い — 場合に限られることを意味する。 ◎ Note: This means that ::view-transition-new(ident):only-child will only select ::view-transition-new(ident) if the parent ::view-transition-image-pair(ident) contains a single child. As in, there is no sibling ::view-transition-old(ident).
3.2. ~view遷移~用の疑似要素
`~view遷移$の視覚-化は、 `疑似要素~tree$として表現される — それは、 `~view遷移~tree@ と呼ばれ,以下に定義される `~view遷移~疑似要素@ たちから構成される。 この~treeは,`遷移~疑似要素たちを設定しておく$間に築かれ、[ `根~要素$を`出自の要素$とする `view-transition$pe 疑似要素 ]が,その根になる。 `~view遷移~疑似要素$を成すすべては、[ それらの`最終的な出自の要素$である,`文書~要素$【すなわち根~要素】 ]から【相対的に】選択される。 ◎ The visualization of a view transition is represented as a pseudo-element tree called the view transition tree composed of the view transition pseudo-elements defined below. This tree is built during the setup transition pseudo-elements step, and is rooted under a ::view-transition pseudo-element originating from the root element. All of the view transition pseudo-elements are selected from their ultimate originating element, the document element.
`~view遷移~tree$は、 ~accessibility~treeには公開されない。 ◎ The view transition tree is not exposed to the accessibility tree.
例えば, `view-transition-group()$pe 疑似要素は、 `:root::view-transition-group()^css のように, 根~要素~選択子 `root$ps に直に付される — 親である `view-transition$pe 疑似要素に付されるのではなく。 ◎ For example, the ::view-transition-group() pseudo-element is attached to the root element selector directly, as in :root::view-transition-group(); it is not attached to its parent, the ::view-transition pseudo-element.
注記: ~UAは、 文書の “旧-”, “新-” 両~状態を捕捉したなら, 次の様な疑似要素たちが成す構造を作成する: ◎ Once the user-agent has captured both the “old” and “new” states of the document, it creates a structure of pseudo-elements like the following:
::view-transition ├─ ::view-transition-group(%name) │ └─ ::view-transition-image-pair(%name) │ ├─ ::view-transition-old(%name) │ └─ ::view-transition-new(%name) └─ …他の~groupたち…
`view-transition-name$p を伴う各~要素は、 別々に捕捉され, 各~一意な `view-transition-name$p 用に `view-transition-group()$pe が作成される。 ◎ Each element with a view-transition-name is captured separately, and a ::view-transition-group() is created for each unique view-transition-name.
`文書~要素$には、 `~UA~stylesheet@#ua-styles$内で, `view-transition-name$p として `root^v が便利~用に与えられる。 ◎ For convenience, the document element is given the view-transition-name "root" in the user-agent style sheet.
[ “旧-” / “新-” ]状態~内に捕捉が無い事例では、[ `view-transition-old()$pe / `view-transition-new()$pe ]も無い。 ◎ Either ::view-transition-old() or ::view-transition-new() are absent in cases where the capture does not have an “old” or “new” state.
生成された各~疑似要素に対しては、 ~CSSにより,その[ 外観/挙動 ]を~custom化でき, ~animationを追加できる。 これは、 遷移に対する全部的な~custom化を可能化する。 ◎ Each of the pseudo-elements generated can be targeted by CSS in order to customize its appearance, behavior and/or add animations. This enables full customization of the transition.
3.2.1. 有名~view遷移~疑似要素
`~view遷移~疑似要素$のうちいくつかは、 `有名~view遷移~疑似要素@ でもある — それは、 `~treeに留まる疑似要素$であり, ある`~view遷移~名$が結付けられる。 ◎ Several of the view transition pseudo-elements are named view transition pseudo-elements, which are functional tree-abiding view transition pseudo-elements associated with a view transition name.\
`選択子$としての`~view遷移~疑似要素$は、 `関数形~疑似要素$であり, その構文は次の~patternに従う 【すなわち,名前を成す %pseudo は可変】: ◎ These pseudo-elements take a <pt-name-selector> as their argument, and their syntax follows the pattern:
::view-transition-%pseudo(`pt-name-selector$t)
引数 `pt-name-selector$t は、 ある`~view遷移~名$を選択する。 その構文は、 次で定義される: ◎ where <pt-name-selector> selects a view transition name, and has the following syntax definition:
`pt-name-selector@t = '*' | `custom-ident$t
`選択子$としての`有名~view遷移~疑似要素$は、 対応している`疑似要素$ 【すなわち,`~view遷移~tree$内に生成される同じ名前の疑似要素】 のうち, `pt-name-selector$t に応じて ⇒# `*^v ならば どれにも合致する。 `custom-ident$t ならば,それと同じ`~view遷移~名$を伴うものに限り合致する。 ◎ A named view transition pseudo-element selector only matches a corresponding pseudo-element if its <pt-name-selector> matches that pseudo-element’s view transition name, i.e. if it is either * or a matching <custom-ident>.
注記: `~view遷移~疑似要素$の`~view遷移~名$は、 その作成を誘発した `view-transition-name$p の値に設定される。 ◎ Note: The view transition name of a view transition pseudo-element is set to the view-transition-name that triggered its creation.
`選択子$としての`有名~view遷移~疑似要素$の`詳細度$は、 その引数に応じて ⇒# `custom-ident$t をとる場合,`型~選択子$と等価【(0, 0, 1)】になるとする。 `*^v をとる場合, 0 【(0, 0, 0)】になるとする。 ◎ The specificity of a named view transition pseudo-element selector with a <custom-ident> argument is equivalent to a type selector. The specificity of a named view transition pseudo-element selector with a * argument is zero.
3.2.2. ~view遷移~tree根: `view-transition^pe 疑似要素
`view-transition@pe `疑似要素$は: ◎ The ::view-transition pseudo-element\
- `~treeに留まる疑似要素$である。 ◎ is a tree-abiding pseudo-element\
- `疑似要素~根$である。 ◎ that is also a pseudo-element root.\
- その`出自の要素$は、 当の文書の`文書~要素$である。 ◎ Its originating element is the document’s document element,\
- その`包含塊$は、 `~snapshot包含塊$である。 ◎ and its containing block is the snapshot containing block.
注記: この要素は、 すべての `view-transition-group()$pe 疑似要素の`親$として~serveする。 ◎ Note: This element serves as the parent of all ::view-transition-group() pseudo-elements.
3.2.3. ~view遷移~有名~下位tree根: `view-transition-group()^pe 疑似要素
`view-transition-group()@pe `疑似要素$は: ◎ The ::view-transition-group() pseudo-element\
- `有名~view遷移~疑似要素$である。 ◎ is a named view transition pseudo-element\
- 引数に合致している有名`~view遷移$の捕捉を表現する。 ◎ that represents a matching named view transition capture.\
- 各`~view遷移~名$用に `view-transition$pe `疑似要素$の`子$として生成される。 ◎ A ::view-transition-group() pseudo-element is generated for each view transition name as a child of the ::view-transition pseudo-element,\
- 対応している `view-transition-image-pair()$pe を包含する。 ◎ and contains a corresponding ::view-transition-image-pair().
注記: この要素は、 初期~時は, “旧-” 要素は[ 在るならば それ/ 無いならば “新-” 要素 ]の[ ~size, 位置 ]を映出す。 ◎ This element initially mirrors the size and position of the “old” element, or the “new” element if there isn’t an “old” element.
要素~用に “旧-”, “新-” 両~状態が在る場合、 `動的な~view遷移~stylesheet$doc内の~styleは,この疑似要素の[ `width$p, `height$p ]を[ 旧-要素の`~border~box$の~size ]から[ 新-要素の`~border~box$の~size ]へ~animateする。 ◎ If there’s both an “old” and “new” state, styles in the dynamic view transition style sheet animate this pseudo-element’s width and height from the size of the old element’s border box to that of the new element’s border box.
要素の `transform$p は、 旧-要素の~screen空間~変形から 新-要素の~screen空間~変形へ~animateされる。 ◎ Also the element’s transform is animated from the old element’s screen space transform to the new element’s screen space transform.
この~styleは、 ~animateされる~propたちの値が遷移が始まる時点に決定されてから, 動的に生成される。 ◎ This style is generated dynamically since the values of animated properties are determined at the time that the transition begins.
3.2.4. ~view遷移~画像~pair隔離: `view-transition-image-pair()^pe 疑似要素
`view-transition-image-pair()@pe `疑似要素$は: ◎ The ::view-transition-image-pair() pseudo-element\
- `有名~view遷移~疑似要素$である。 ◎ is a named view transition pseudo-element\
- 対応している[ 旧-, 新- ]`~view遷移$の捕捉が成す~pairを表現する。 ◎ that represents a pair of corresponding old/new view transition captures.\
- 対応している `view-transition-group()$pe 疑似要素の`子$である ◎ This pseudo-element is a child of the corresponding ::view-transition-group() pseudo-element and\
- 対応している[ `view-transition-old()$pe / `view-transition-new()$pe ]疑似要素を(挙げられた順序で)包含する。 ◎ contains a corresponding ::view-transition-old() pseudo-element and/or a corresponding ::view-transition-new() pseudo-element (in that order).
注記:
この要素は、
各~子~用に
`isolation$p: `isolate^v
を供するために存在する。
この要素は、
各 `view-transition-group()$pe の`子$として,常に在る。
この隔離( `isolation^en )は、
当の画像~pairが[
他の視覚的な出力に影響することなく,
通常でない混色-~mode
【 `normal^v 以外の `blend-mode$t 】
で混色される
]ことを許容する。
◎
This element exists to provide isolation: isolate for its children, and is always present as a child of each ::view-transition-group(). This isolation allows the image pair to be blended with non-normal blend modes without affecting other visual outputs.
3.2.5. ~view遷移の旧-状態~画像: `view-transition-old()^pe 疑似要素
`view-transition-old()@pe `疑似要素$は、 空な`有名~view遷移~疑似要素$であり, “旧-” 状態を成す視覚的~snapshotを`置換d要素$として表現する — 表現する “旧-” 状態が無い場合、 それは,省略される。 各 `view-transition-old()$pe 疑似要素には、 その`子$として, 対応する `view-transition-image-pair()$pe 疑似要素が在る。 ◎ The ::view-transition-old() pseudo-element is an empty named view transition pseudo-element that represents a visual snapshot of the “old” state as a replaced element; it is omitted if there’s no “old” state to represent. Each ::view-transition-old() pseudo-element is a child of the corresponding ::view-transition-image-pair() pseudo-element.
注記: `only-child$ps を[ この要素が `view-transition-image-pair()$pe 内の唯一の要素である事例 ]で合致する選択子として利用できる。 ◎ :only-child can be used to match cases where this element is the only element in the ::view-transition-image-pair().
この要素の外観は、 `object-*^p ~propにより,他の置換d要素と同じ仕方で操作できる。 ◎ The appearance of this element can be manipulated with object-* properties in the same way that other replaced elements can be.
注記: 画像の[ 内容, `生来な寸法$ ]は ⇒# `画像を捕捉する$ときに捕捉される。 `遷移~疑似要素たちを設定しておく$ときに設定される。 ◎ Note: The content and natural dimensions of the image are captured in capture the image, and set in setup transition pseudo-elements.
注記: これらの疑似要素を~animateするための~styleは、 `動的な~view遷移~stylesheet$docに追加される。 詳細は、[ `遷移~疑似要素たちを設定しておく$/ `疑似要素~styleを更新する$ ]にて。 ◎ Note: Additional styles in the dynamic view transition style sheet added to animate these pseudo-elements are detailed in setup transition pseudo-elements and update pseudo-element styles.
3.2.6. ~view遷移の新-状態~画像: `view-transition-new()^pe 疑似要素
`view-transition-new()@pe `疑似要素$は、 ( `view-transition-old()$pe 疑似要素と相似的に) 空な`有名~view遷移~疑似要素$であり, “新-” 状態を成す視覚的~snapshotを`置換d要素$として表現する — 表現する “新-” 状態が無い場合、 各 `view-transition-new()$pe 疑似要素には、 その`子$として対応する `view-transition-image-pair()$pe 疑似要素が在る。 ◎ The ::view-transition-new() pseudo-element (like the analogous ::view-transition-old() pseudo-element) is an empty named view transition pseudo-element that represents a visual snapshot of the “new” state as a replaced element; it is omitted if there’s no “new” state to represent. Each ::view-transition-new() pseudo-element is a child of the corresponding ::view-transition-image-pair() pseudo-element.
注記: 画像の[ 内容, `生来な寸法$ ]は ⇒# `画像を捕捉する$ときに捕捉される。 `遷移~疑似要素たちを設定しておく$ときに設定される。 `疑似要素~styleを更新する$ときに更新される。 ◎ Note: The content and natural dimensions of the image are captured in capture the image, then set and updated in setup transition pseudo-elements and update pseudo-element styles.
4. ~view遷移の~layout
`~view遷移~疑似要素$は、[ `初期~包含塊$ではなく`~snapshot包含塊$から出自する ]こと,および[ 当の文書を成す残りより上にある`~view遷移~層$ ]内に塗られることを除けば、 通常の要素と同様に, ~styleされ, ~lay-outされ, 描画される。 ◎ The view transition pseudo-elements are styled, laid out, and rendered like normal elements, except that they originate in the snapshot containing block rather than the initial containing block and are painted in the view transition layer above the rest of the document.
4.1. ~snapshot包含塊
`~snapshot包含塊@ は、[ ~UIwindowを成す~page内容を表示するようになり得るもの ]が成す すべての区画を覆う矩形であり, (したがって[ 根~scrollbarや `対話的~widget@https://drafts.csswg.org/css-viewport/#interactive-widget$ ]に関わらず一貫する)。 これにより、 `文書~要素$の[ `旧-画像$cE, `新-要素$cE ]が一貫する見込みが高くなる。 ◎ The snapshot containing block is a rectangle that covers all areas of the window that could potentially display page content (and is therefore consistent regardless of root scrollbars or interactive widgets). This makes it likely to be consistent for the document element's old image and new element.
`子~navigable$の中の`~snapshot包含塊$は、 当の~navigableの`表示域$に`~scrollbar側溝$(もしあれば)を併せた領域になる。 ◎ Within a child navigable, the snapshot containing block is the union of the navigable’s viewport with any scrollbar gutters.
`~snapshot包含塊の原点@ は、 `~snapshot包含塊$の左上~隅を指す。 ◎ The snapshot containing block origin refers to the top-left corner of the snapshot containing block.
`~snapshot包含塊の~size@ は、 `~snapshot包含塊$の[ 横幅, 縦幅 ]を順に与える, 2 個の実数が成す`~tuple$。 ◎ The snapshot containing block size refers to the width and height of the snapshot containing block as a tuple of two numbers.
`~snapshot包含塊$は、[ `view-transition$pe, その各~子孫 ]用の[ `絶対~位置決め包含塊$, `固定d位置決め包含塊$ ]を与えるものと見なされる。 ◎ The snapshot containing block is considered to be an absolute positioning containing block and a fixed positioning containing block for ::view-transition and its descendants.
4.2. ~view遷移における塗ng順序
この仕様は、 `CSS2$r `§ 積層~文脈の詳しい記述@~CSS22/zindex.html#elaborate-stacking-contexts$ にて確立される塗ng順序の終端に, 新たな積層~層として`~view遷移~層$を導入する。 ◎ This specification introduces a new stacking layer, the view transition layer, to the end of the painting order established in CSS2§E Elaborate Description of Stacking Contexts. [CSS2]
`view-transition$pe 疑似要素は、 `~view遷移~層@ と呼ばれる新たな積層~文脈を生成する。 それは、 文書を成す他のすべての内容(`上端~層$内に描画される内容も含む)より後に塗られる — そのような内容に適用された~filterその他の効果があれば,それらより後に。 (それは、 そのような効果の~subjectにならない — 効果は、[[ `view-transition-old()$pe, `view-transition-new()$pe ]疑似要素を成す描画される内容 ]に影響する所までに限られる。) ◎ The ::view-transition pseudo-element generates a new stacking context, called the view transition layer, which paints after all other content of the document (including any content rendered in the top layer), after any filters and effects that are applied to such content. (It is not subject to such filters or effects, except insofar as they affect the rendered contents of the ::view-transition-old() and ::view-transition-new() pseudo-elements.)
注記: この特能の意図は、 ~pageを成す内容を,上端~層~内の要素を含めて捕捉-可能にすることにある。 それを成遂げるため、 `~view遷移~層$は,捕捉された積層~文脈の一部を成し得ない — そうすると循環依存になるので。 したがって、 `~view遷移~層$は,他のすべての内容の同胞になる。 ◎ Note: The intent of the feature is to be able to capture the contents of the page, which includes the top layer elements. In order to accomplish that, the view transition layer cannot be a part of the captured stacking contexts, since that results in a circular dependency. Therefore, the view transition layer is a sibling of all other content.
[ `文書$ %文書 にて`作動中な~view遷移$docの`相$vT ~EQ `~animate中$i ]の間は、[ %文書 内の要素のうち`~view遷移~内に捕捉され@#captured-in-a-view-transition$たもの ]により生成される~box,および その`要素~内容$は、 `遷移~根~疑似要素$vTの`広義-子孫$を除いて ⇒# 塗られない(要素の `visibility$p は `hidden^v であったかのように)/ 接触判定に応答しない(要素の `pointer-events$p は `none^v であったかのように) ◎ When a Document's active view transition's phase is "animating", the boxes generated by any element in that Document with captured in a view transition and its element contents, except transition root pseudo-element's inclusive descendants, are not painted (as if they had visibility: hidden) and do not respond to hit-testing (as if they had pointer-events: none).
注記: 遷移に関与している要素は、 その~DOM内での所在における塗ngを飛ばす必要がある — それらの画像は、 代わりに,対応している `view-transition-new()$pe 疑似要素~内に塗られるので。 類似に,接触判定も飛ばされる — 要素の~DOM内での所在は、 その内容が描画される所には対応しないので。 しかしながら、 これらの要素が[ 支援技術/~accessibility~tree ]により どう~accessされるかは変化しない。 ◎ Note: Elements participating in a transition need to skip painting in their DOM location because their image is painted in the corresponding ::view-transition-new() pseudo-element instead. Similarly, hit-testing is skipped because the element’s DOM location does not correspond to where its contents are rendered. However, there is no change in how these elements are accessed by assistive technologies or the accessibility tree.
5.~UA~stylesheet
`大域的な~view遷移~UA~stylesheet@ は、 `~UA出自$に属する~stylesheetであり,次の規則を包含する: ◎ The global view transition user agent style sheet is a user-agent origin style sheet containing the following rules:
:root { view-transition-name: root; } :root::view-transition { position: fixed; inset: 0; } :root::view-transition-group(*) { position: absolute; top: 0; left: 0; animation-duration: 0.25s; animation-fill-mode: both; } :root::view-transition-image-pair(*) { position: absolute; inset: 0; animation-duration: inherit; animation-fill-mode: inherit; animation-delay: inherit; } :root::view-transition-old(*), :root::view-transition-new(*) { position: absolute; inset-block-start: 0; inline-size: 100%; block-size: auto; animation-duration: inherit; animation-fill-mode: inherit; animation-delay: inherit; } /* 既定の~cross-fade遷移 ◎ Default cross-fade transition */ @keyframes -ua-view-transition-fade-out { to { opacity: 0; } } @keyframes -ua-view-transition-fade-in { from { opacity: 0; } } /* 【新-, 旧-】2 つの画像が在るとき,それらを混色するための~keyframe ◎ Keyframes for blending when there are 2 images */ @keyframes -ua-mix-blend-mode-plus-lighter { from { mix-blend-mode: plus-lighter } to { mix-blend-mode: plus-lighter } }
説明的な要約 ◎ Explanatory Summary
この~UA~stylesheetは、 次に挙げるものを行う: ◎ This UA style sheet does several things:
- `view-transition$pe を`~snapshot包含塊$全体を覆うように~lay-outする — 各~子である `view-transition-group()^pe【!:view-transition-group()】を, それに相対的に~lay-outできるよう。 ◎ Lay out ::view-transition to cover the entire snapshot containing block so that each :view-transition-group() child can lay out relative to it.
- `根~要素$に既定の`~view遷移~名$を与える — それが独立に選択されることを許容するため。 ◎ Give the root element a default view transition name, to allow it to be independently selected.
- `view-transition-image-pair()$pe 疑似要素による~layoutに対する干渉を抑制する — ほとんどの目的において、 作者が[ `view-transition-old()$pe / `view-transition-new()$pe ]を本質的に `view-transition-group()$pe の直な子として扱えるよう。 ◎ Reduce layout interference from the ::view-transition-image-pair() pseudo-element so that authors can essentially treat ::view-transition-old() and ::view-transition-new() as direct children of ::view-transition-group() for most purposes.
- ~treeを通して,~animation計時を継承する — 既定では、 `view-transition-group()$pe に設定された~animation計時が, すべての子孫の~animation計時を規定することになるよう。 ◎ Inherit animation timing through the tree so that by default, the animation timing set on a ::view-transition-group() will dictate the animation timing of all its descendants.
- 要素の各~捕捉[ `view-transition-old()$pe, `view-transition-new()$pe ]を~styleする — それらを補間するに伴い, `view-transition-group()$pe に設定された[ ~size, 位置 ]に合致するよう (アリな限り,それらの縦横比を~~保ちながら)。 これらの要素の~sizingは[ 論理-~prop, 物理-~prop ]による座標どうしの対応付けに依存するので、 `動的な~view遷移~stylesheet$docは, ~DOM要素たちから関連な~styleを複製する。 ◎ Style the element captures ::view-transition-old() and ::view-transition-new() to match the size and position set on ::view-transition-group() (insofar as possible without breaking their aspect ratios) as it interpolates between them. Since the sizing of these elements depends on the mapping between logical and physical coordinates, dynamic view transition style sheet copies relevant styles from the DOM elements.
- 各 `view-transition-group()$pe 用に, 既定の[ 0.25 秒間の~cross-fade~animation ]を設定しておく。 ◎ Set up a default quarter-second cross-fade animation for each ::view-transition-group().
追加的な~styleは、 `~view遷移$の間に,`動的な~view遷移~stylesheet$docを通して`~UA出自$に動的に追加される。 ◎ Additional styles are dynamically added to the user-agent origin during a view transition through the dynamic view transition style sheet.
6. ~API
6.1. `Document^I に対する追加
partial interface `Document$I { `ViewTransition$I `startViewTransition$m(optional `ViewTransitionUpdateCallback$I %updateCallback); }; callback `ViewTransitionUpdateCallback@I = `Promise$<`any$> ();
- `viewTransition$V【!ViewTransition】 = document【!Document】.`startViewTransition$m(`updateCallback$V)
- 新たな`~view遷移$を開始する (`文書$に既存の`作動中な~view遷移$docがある場合、 それを取消した上で)。 ◎ Starts a new view transition (canceling the document’s existing active view transition, if any).
- `updateCallback$V は、 供された場合は,非同期的に — 当の文書の現在の状態が捕捉されたなら — ~callされる。 その後, `updateCallback$V が返した~promiseが充足されるとき、 当の文書の新-状態が捕捉され,遷移が起動される。 ◎ updateCallback, if provided, is called asynchronously, once the current state of the document is captured. Then, when the promise returned by updateCallback fulfills, the new state of the document is captured and the transition is initiated.
- `updateCallback$V は、 供された場合は,遷移が起こり得ない場合でも (例:重複な `view-transition-name^p 値に因り), `常に^em ~callされることに注意。 遷移は,状態~変更~周りの増補なので、 遷移を作成することに失敗しても, 【 `updateCallback$V による】状態~変更は決して防止されない。 この原則についての詳細は、 `§ 増補としての遷移@#transitions-as-enhancements$ を見よ。 ◎ Note that updateCallback, if provided, is always called, even if the transition cannot happen (e.g. due to duplicate view-transition-name values). The transition is an enhancement around the state change, so a failure to create a transition never prevents the state change. See § 1.4 Transitions as an enhancement for more details on this principle.
- `updateCallback$V が返した~promiseが却下された場合、 遷移は飛ばされる。 ◎ If the promise returned by updateCallback rejects, the transition is skipped.
6.1.1. `startViewTransition()^m ~method手続き
`startViewTransition(updateCallback)@m `~method手続き$は: ◎ The method steps for startViewTransition(updateCallback) are as follows:
- %遷移 ~LET `新たな~obj$( `ViewTransition$I, コレに`関連な~realm$ ) ◎ Let transition be a new ViewTransition object in this’s relevant Realm.
- ~IF[ %updateCallback ~NEQ ε ] ⇒ %遷移 の`更新~callback$vT ~SET %updateCallback ◎ If updateCallback is provided, set transition’s update callback to updateCallback.
- %文書 ~LET コレに`関連な大域~obj$に`結付けられた文書$ ◎ Let document be this’s relevant global object’s associated document.
- ~IF[ %文書 の`可視性~状態$doc ~EQ `hidden^l ] ⇒# `~view遷移を飛ばす$( %遷移, "`InvalidStateError$E" ); ~RET %遷移 ◎ If document’s visibility state is "hidden", then skip transition with an "InvalidStateError" DOMException, and return transition.
-
~IF[ %文書 にて`作動中な~view遷移$doc ~NEQ ~NULL ] ⇒ `~view遷移を飛ばす$( コレ, "`AbortError$E" ) ◎ If document’s active view transition is not null, then skip that view transition with an "AbortError" DOMException in this’s relevant Realm.
注記: これは、 2 つの非同期的な`更新~callback$vT — %文書 にて現在`作動中な~view遷移$doc用のそれ, この %遷移 用のそれ — を同時並行に (したがって、場合によっては逆順に) 走らす結果にもなり得る。 `この特能の設計@#transitions-as-enhancements$により、 これらによる~DOM変更は,開発者が別の[ 特能/~framework ]を利用して正しく~scheduleするものと見做される。 ◎ Note: This can result in two asynchronous update callbacks running concurrently (and therefore possibly out of sequence): one for the document’s current active view transition, and another for this transition. As per the design of this feature, it’s assumed that the developer is using another feature or framework to correctly schedule these DOM changes.
-
%文書 にて`作動中な~view遷移$doc ~SET %遷移 ◎ Set document’s active view transition to transition.
注記: `~view遷移$の処理nは、 `~view遷移を設定しておく$中で, `処理待ち遷移~演算を遂行する$ことを介して継続される【?】。 ◎ Note: The view transition process continues in setup view transition, via perform pending transition operations.
- ~RET %遷移 ◎ Return transition.
6.2. `ViewTransition^I ~interface
[`Exposed$=Window] interface `ViewTransition@I { readonly attribute `Promise$<`undefined$> `updateCallbackDone$m; readonly attribute `Promise$<`undefined$> `ready$m; readonly attribute `Promise$<`undefined$> `finished$m; `undefined$ `skipTransition$m(); };
`ViewTransition$I ~interfaceは、 単独の同一-文書な`~view遷移$ — すなわち、[ 開始~時の文書, 終了~時の文書 ]が同じで,場合によっては文書の~DOM構造に対する変更を伴う遷移 — を表現し,それを制御する。 ◎ The ViewTransition interface represents and controls a single same-document view transition, i.e. a transition where the starting and ending document are the same, possibly with changes to the document’s DOM structure.
- `viewTransition$V.`updateCallbackDone$m
- この~promiseは、 `updateCallback$V が返した~promiseが充足されたとき充足され, 却下されたとき却下される。 ◎ A promise that fulfills when the promise returned by updateCallback fulfills, or rejects when it rejects.
- 注記: `~view遷移^cite ~APIは, ~DOM変更を包装して視覚的な遷移を作成するが、 遷移~animationの[ 成功/失敗 ]について~careすることなく,当の~DOM変更が[ 起きたか否か, いつ起きたか ]を知ることだけ求まれるときもある。 `updateCallbackDone$m は、 そのような利用事例~用にある。 ◎ Note: The View Transition API wraps a DOM change and creates a visual transition. However, sometimes you don’t care about the success/failure of the transition animation, you just want to know if and when the DOM change happens. updateCallbackDone is for that use-case.)
- `viewTransition$V.`ready$m
-
この~promiseは: ◎ ↓
- 遷移~用の疑似要素たちが作成され,~animationが開始しつつあるとき充足する。 ◎ A promise that fulfills once the pseudo-elements for the transition are created, and the animation is about to start.
- 遷移が始まり得ない場合には却下される。 `view-transition-name$p が重複しているなど,誤った環境設定に因り/ `updateCallbackDone$m が却下される~promiseを返した場合など。 ◎ It rejects if the transition cannot begin. This can be due to misconfiguration, such as duplicate 'view-transition-name’s, or if updateCallbackDone returns a rejected promise.
- `ready$m が充足される時点は、 `~view遷移~疑似要素$を `~Web~animation~API@~WANIMapi#extensions-to-the-element-interface$cite で~animateする理想的な機会である。 ◎ The point that ready fulfills is the ideal opportunity to animate the view transition pseudo-elements with the Web Animation API.
- `viewTransition$V.`finished$m
-
この~promiseは: ◎ ↓
- 終了~状態が全部的に可視になり,利用者からヤリトリ-可能になったなら充足される。 ◎ A promise that fulfills once the end state is fully visible and interactive to the user.
-
却下されるのは、 `updateCallback$V が却下される~promiseを返す場合に限られる — それは、 終了~状態が作成されなかったことを指示するので。 ◎ It only rejects if updateCallback returns a rejected promise, as this indicates the end state wasn’t created.
他の場合、[ 遷移が始まるのに失敗したか ( `skipTransition()$m により)飛ばされた ]場合でも, 終了~状態には到達するので充足する。 ◎ Otherwise, if a transition fails to begin, or is skipped (by skipTransition()), the end state is still reached, so finished fulfills.
- `viewTransition$V.`skipTransition$m()
- 遷移が開始されたなら即時に完遂させ,まだなら開始されないようにする。 ◎ Immediately finish the transition, or prevent it starting.
- これにより `updateCallback$V が~callされなくなることは決してない — ~DOM変更は、 遷移とは独立なので。 この原則についての詳細は、 `§ 増補としての遷移@#transitions-as-enhancements$ 見よ。 ◎ This never prevents updateCallback being called, as the DOM change is independent of the transition. See § 1.4 Transitions as an enhancement for more details on this principle.
- `ready$m が解決される前に これが~callされた場合、 `ready$m は却下されることになる。 ◎ If this is called before ready resolves, ready will reject.
- `finished$m が解決される前に これが~callされた場合、 `finished$m は `updateCallbackDone$m が決着するに伴い決着することになる。 ◎ If finished hasn’t resolved, it will fulfill or reject along with updateCallbackDone.
各 `ViewTransition$I %~view遷移 は、 次に挙げるものを有する: ◎ A ViewTransition has the following:
- `有名~要素~群@vT ◎ named elements
- `有順序~map$ — 各~entryの ⇒# ~keyは,`~view遷移~名$を与える。 値は,`捕捉された要素$を与える。 ◎ a map, whose keys are view transition names and whose values are captured elements.\
- 初期~時は,新たな`有順序~map$とする。 ◎ Initially a new map.
- 注記: これは、 `ViewTransition$I に結付けられるので, `~view遷移を~clearする$が~callされたとき片付けられることになる。 ◎ Note: Since this is associated to the ViewTransition, it will be cleaned up when Clear view transition is called.
- `相@vT ◎ phase
- 次に挙げるいずれかをとり, 挙げられた順に(場合によっては,一部を飛ばして)進捗する — 初期~時は `捕捉-待ち$i とする ⇒# `捕捉-待ち@i, `更新~callbackは~call済み@i, `~animate中@i, `済み@i ◎ One of the following ordered phases, initially "pending-capture": • "pending-capture". • "update-callback-called". • "animating". • "done".
- 注記: これらの相は,自動的に進捗するので、 この~APIを利用している開発者【作者】は, ほとんどにおいて どの相にあるか心配する必要はない。 しかしながら,どの手続きが どの相で起こるか — ~snapshotは いつ捕捉され, 疑似要素~DOMは いつ作成されるか, 等々 — を理解することは、 重要になる。 以下に与える各~相を成す記述は、[ 仕様に準拠する実装を生産するために従うべき一義的な手続きが成す集合 ]を実装者~向けに供する意図をもって,アリな限り精確であろうと試行する。 ◎ Note: For the most part, a developer using this API does not need to worry about the different phases, since they progress automatically. It is, however, important to understand what steps happen in each of the phases: when the snapshots are captured, when pseudo-element DOM is created, etc. The description of the phases below tries to be as precise as possible, with an intent to provide an unambiguous set of steps for implementors to follow in order to produce a spec-compliant implementation.
- `更新~callback@vT ◎ update callback
- ~NULL / ある `ViewTransitionUpdateCallback$I ◎ a ViewTransitionUpdateCallback or null.\
- 初期~時は ~NULL とする。 ◎ Initially null.
- `準備済み時の~promise@vT ◎ ready promise
- `~promise$ ◎ a Promise.\
- 初期~時は,次を遂行した結果になるとする ⇒ `新たな~promise$( %~view遷移 に`関連な~realm$ ) ◎ Initially a new promise in this’s relevant Realm.
- `更新~callback済み時の~promise@vT ◎ update callback done promise
- `~promise$ ◎ a Promise.\
- 初期~時は,次を遂行した結果になるとする ⇒ `新たな~promise$( %~view遷移 に`関連な~realm$ ) ◎ Initially a new promise in this’s relevant Realm.
- 注記: [ `準備済み時の~promise$vT, `更新~callback済み時の~promise$vT ]は即時に作成されるので、 却下は — `取扱済みとして~markされ$ない限り, `updateCallbackDone$m などの取得子に~accessされなかった場合でも — `unhandledrejection$et を発火させることになる。 ◎ Note: The ready promise and update callback done promise are immediately created, so rejections will cause unhandledrejections unless they’re handled, even if the getters such as updateCallbackDone are not accessed.
- `完遂-時の~promise@vT ◎ finished promise
- `~promise$ ◎ a Promise.\
-
初期~時は,次を遂行した結果になるとする:
- %~promise ~LET `新たな~promise$( %~view遷移 に`関連な~realm$ )
- `~promiseを取扱済みとして~markする$( %~promise )
- ~RET %~promise
- 注記: `unhandledrejection$et が重複して発火されるのを防止するため、 これは,`取扱済みとして~markされ$る。 この~promiseが却下されるのは、 `更新~callback済み時の~promise$vTが却下されるときに限られるので。 ◎ Note: This is marked as handled to prevent duplicate unhandledrejections, as this promise only ever rejects along with the update callback done promise.
- `遷移~根~疑似要素@vT ◎ transition root pseudo-element
- ある `view-transition$pe ◎ a ::view-transition.\
- 初期~時は新たな `view-transition^pe とする。 ◎ Initially a new ::view-transition.
- `初期~snapshot包含塊~size@vT ◎ initial snapshot containing block size
- ~NULL / [ 横幅, 縦幅 ]を順に与える 2 個の実数が成す`~tuple$ ◎ a tuple of two numbers (width and height), or null.\
- 初期~時は ~NULL とする。 ◎ Initially null.
- 注記: これは、 `~snapshot包含塊の~size$における変化を検出するために利用される — そのような変化が生じた場合、 遷移は`飛ばされ$る。 この挙動の論点は、 `8045$issue にある。 ◎ Note: This is used to detect changes in the snapshot containing block size, which causes the transition to skip. Discussion of this behavior.
6.2.1. `skipTransition()^m ~method手続き
`skipTransition()@m `~method手続き$は: ◎ The method steps for skipTransition() are:
- ~IF[ コレの`相$vT ~NEQ `済み$i ] ⇒ `~view遷移を飛ばす$( コレ, "`AbortError$E" ) ◎ If this's phase is not "done", then skip the view transition for this with an "AbortError" DOMException.
7. ~algo
7.1. ~data構造
7.1.1. `Document$I に対する追加
各 `文書$ %文書 は、 次に挙げるものを追加的に有する: ◎ A Document additionally has:
- `作動中な~view遷移@doc ◎ active view transition
- ~NULL / ある `ViewTransition$I ◎ a ViewTransition or null.\
- 初期~時は ~NULL とする。 ◎ Initially null.
- `~view遷移~用の描画を抑止するか@doc ◎ rendering suppression for view transitions
- 真偽値 ◎ a boolean.\
- 初期~時は ~F とする。 ◎ Initially false.
- ~T をとる間は、 すべての~pointer接触判定は, %文書 の`文書~要素$を~targetにするモノトスル — 他の`要素$をすべて無視して。 ◎ While a Document’s rendering suppression for view transitions is true, all pointer hit testing must target its document element, ignoring all other elements.
- 注記: これは、 `~pointer捕捉@~POINTEREVENTS#dfn-pointer-capture$には影響しない。 ◎ Note: This does not affect pointers that are captured.
- 【 何が “接触判定” を成すかは, いくつかの仕様に言及されているが(`例@~POINTEREVENTS#dfn-hit-test$)、 いずれも正式には定義していない。 】
- `動的な~view遷移~stylesheet@doc ◎ dynamic view transition style sheet
- `~stylesheet@~CSSSNAPSHOT#style-sheet$ ◎ a style sheet.\
- 初期~時は、 `~UA出自$に属する新たな~stylesheetとする — これは、 `大域的な~view遷移~UA~stylesheet$より後に順序されるとする。 ◎ Initially a new style sheet in the user-agent origin, ordered after the global view transition user agent style sheet.
- 注記: これは、 遷移に関係している動的な~styleを保持するために利用される。 ◎ Note: This is used to hold dynamic styles relating to transitions.
- `~view遷移~treeを示すか@doc ◎ show view transition tree
- 真偽値 ◎ A boolean.\
- 初期~時は ~F とする。 ◎ Initially false.
- ~T のときは、 %文書 にて`作動中な~view遷移$docの`遷移~根~疑似要素$vT %根 は、 その`出自の要素$である[ %文書 の`文書~要素$ ]の`子$として描画される。 ◎ When this is true, this's active view transition's transition root pseudo-element renders as a child of this's document element, with this's document element is its originating element.
- 注記: `文書~要素$の中での %根 の位置は問われない — %根 の`包含塊$は,`~snapshot包含塊$になるので。 ◎ Note: The position of the transition root pseudo-element within the document element does not matter, as the transition root pseudo-element's containing block is the snapshot containing block.
7.1.2. 要素に対する追加
各 `要素$は、 `ある~view遷移~内に捕捉されたか@el を有する — それは、 真偽値をとり,初期~時は ~F とする。 ◎ Elements have a captured in a view transition boolean, initially false.
注記: この仕様は、 ~CSSによる `要素@ の定義を利用する — それは、 `疑似要素$も含む†。 ◎ Note: This spec uses CSS’s definition of element, which includes pseudo-elements.
【† これを書いた時点で、 実際に,疑似要素を含むものと明示的に定義している仕様は無い (各~仕様の中で,暗黙的に含んでいる箇所は、 いくつかあるとしても) — 原文が参照している`要素@https://drafts.csswg.org/css2/#element$も, `CSS-DISPLAY-4$r に定義される`要素@~CSSDISP#elements$も, そのように定義されていない。 】【 本物の要素には定義されているが, 疑似要素~用には定義されていない概念(例:`~node文書$)は、 `最終的な出自の要素$に基づくものと解釈することになろう。 】
7.1.3. 捕捉された要素
`捕捉された要素@ は、 `構造体$であり,次に挙げる~itemを伴う: ◎ A captured element is a struct with the following:
- `旧-画像@cE ◎ old image
- ~NULL / ある~2D~bitmap ◎ an 2D bitmap or null.\
- 初期~時は ~NULL とする。 ◎ Initially null.
- `旧-横幅@cE ◎ old width
- `旧-縦幅@cE ◎ old height
- `unrestricted double$c 【有限でない場合( `NaN^jv や `Infinity^jv )の挙動は指定されていない。】 ◎ an unrestricted double,\
- 初期~時は 0 とする。 ◎ initially zero.
- `旧-変形@cE ◎ old transform
- ある `transform-function$t ◎ a <transform-function>,\
- 初期~時は`恒等~変形-関数$とする。 ◎ initially the identity transform function.
- `旧-書字~mode@cE ◎ old writing-mode
- ~NULL / `writing-mode$p 用の値 ◎ Null or a writing-mode,\
- 初期~時は ~NULL とする。 ◎ initially null.
- `旧-方向@cE ◎ old direction
- ~NULL / `direction$p 用の値 ◎ Null or a direction,\
- 初期~時は ~NULL とする。 ◎ initially null.
- `旧-~text方位@cE ◎ old text-orientation
- ~NULL / `text-orientation$p 用の値 ◎ Null or a text-orientation,\
- 初期~時は ~NULL とする。 ◎ initially null.
- `旧-混色~mode@cE ◎ old mix-blend-mode
- ~NULL / `mix-blend-mode$p 用の値 ◎ Null or a mix-blend-mode,\
- 初期~時は ~NULL とする。 ◎ initially null.
- `旧-後景~filter@cE ◎ old backdrop-filter
- ~NULL / `backdrop-filter$p 用の値 ◎ Null or a backdrop-filter,\
- 初期~時は ~NULL とする。 ◎ initially null.
- `旧-色~scheme@cE ◎ old color-scheme
- ~NULL / `color-scheme$p 用の値 ◎ Null or a color-scheme,\
- 初期~時は ~NULL とする。 ◎ initially null.
- `新-要素@cE ◎ new element
- ~NULL / ある`要素$ ◎ an element or null.\
- 初期~時は ~NULL とする。 ◎ Initially null.
各`捕捉された要素$は、 `~style定義~群@cE と総称される,次に挙げる~itemも伴う: ◎ In addition, a captured element has the following style definitions:
- `~group~keyframe群@cE ◎ group keyframes
- ~NULL / ある `CSSKeyframesRule$I ◎ A CSSKeyframesRule or null.\
- 初期~時は ~NULL とする。 ◎ Initially null.
- `~group~animation名~規則@cE ◎ group animation name rule
- ~NULL / ある `CSSStyleRule$I ◎ A CSSStyleRule or null.\
- 初期~時は ~NULL とする。 ◎ Initially null.
- `~group~style規則@cE ◎ group styles rule
- ~NULL / ある `CSSStyleRule$I ◎ A CSSStyleRule or null.\
- 初期~時は ~NULL とする。 ◎ Initially null.
- `画像~pair隔離~規則@cE ◎ image pair isolation rule
- ~NULL / ある `CSSStyleRule$I ◎ A CSSStyleRule or null.\
- 初期~時は ~NULL とする。 ◎ Initially null.
- `画像~animation名~規則@cE ◎ image animation name rule
- ~NULL / ある `CSSStyleRule$I ◎ A CSSStyleRule or null.\
- 初期~時は ~NULL とする。 ◎ Initially null.
注記: これらは、 `文書$の`動的な~view遷移~stylesheet$docを[ 更新するため/ 後でそこから~styleを除去するため ]に利用される。 ◎ Note: These are used to update, and later remove styles from a document's dynamic view transition style sheet.
7.2. 処理待ち遷移~演算を遂行する
注記: この~algoは、 `描画を更新する段@~WAPI#update-the-rendering$ `HTML$r の中から呼出される。 ◎ This algorithm is invoked as a part of update the rendering loop in the html spec.
`処理待ち遷移~演算を遂行する@ ときは、 所与の ( `文書$ %文書 ) に対し,次の手続きを遂行する: ◎ To perform pending transition operations given a Document document, perform the following steps:
- %~view遷移 ~LET %文書 にて`作動中な~view遷移$doc ◎ ↓
-
~IF[ %~view遷移 ~NEQ ~NULL ]: ◎ If document’s active view transition is not null, then:
- ~IF[ %~view遷移 の`相$vT ~EQ `捕捉-待ち$i ] ⇒ `~view遷移を設定しておく$( %~view遷移 ) ◎ If document’s active view transition's phase is "pending-capture", then setup view transition for document’s active view transition.
- ~ELIF[ %~view遷移 の`相$vT ~EQ `~animate中$i ] ⇒ `遷移~frameを取扱う$( %~view遷移 ) ◎ Otherwise, if document’s active view transition's phase is "animating", then handle transition frame for document’s active view transition.
7.3. ~view遷移を設定しておく
`~view遷移を設定しておく@ ときは、 所与の ( `ViewTransition$I %遷移 ) に対し,次の手続きを遂行する: ◎ To setup view transition for a ViewTransition transition, perform the following steps:
注記: この~algoは、 次を順に行う ⇒# 文書を成す現在の状態を捕捉する, 遷移の `ViewTransitionUpdateCallback$I を~callする, 文書を成す新-状態を捕捉する ◎ Note: This algorithm captures the current state of the document, calls the transition’s ViewTransitionUpdateCallback, then captures the new state of the document.
- %文書 ~LET %遷移 に`関連な大域~obj$に`結付けられた文書$ ◎ Let document be transition’s relevant global object’s associated document.
- %成否 ~LET `旧-状態を捕捉する$( %遷移 ) ◎ Capture the old state for transition.
- ~IF[ %成否 ~EQ `失敗^i ] ⇒# `~view遷移を飛ばす$( %遷移, "`InvalidStateError$E" ); ~RET ◎ If failure is returned, then skip the view transition for transition with an "InvalidStateError" DOMException in transition’s relevant Realm, and return.
- %文書 の`~view遷移~用の描画を抑止するか$doc ~SET ~T ◎ Set document’s rendering suppression for view transitions to true.
-
`大域~taskを~queueする$( `~DOM操作~task~source$, %遷移 に`関連な大域~obj$, 次の手続き ) ◎ Queue a global task on the DOM manipulation task source, given transition’s relevant global object,\ ↓ to perform the following steps:
注記: ここで~taskを~queueするのは、[ `画像を捕捉する$ときに読み戻される `texture^en ]は,非同期cである場合もあるからである — ~HTML仕様における描画-手続きは、 それは同期的であったかのように動作するが。 ◎ Note: A task is queued here because the texture read back in capturing the image may be async, although the render steps in the HTML spec act as if it’s synchronous.
手続きは: ◎ ↑
-
~IF[ %遷移 の`相$vT ~EQ `済み$i ] ⇒ ~RET ◎ If transition’s phase is "done", then abort these steps.
注記: これは、 この時点より前に %遷移 が`飛ばされ$た場合に起こる。 ◎ Note: This happens if transition was skipped before this point.
- `更新~callbackを~callする$() ◎ call the update callback.
-
`~view遷移を作動化する@ ときは、 所与の ( `ViewTransition$I %遷移 ) に対し,次の手続きを遂行する: ◎ To activate view transition for a ViewTransition transition, perform the following steps:
-
~IF[ %遷移 の`相$vT ~EQ `済み$i ] ⇒ ~RET ◎ If transition’s phase is "done", then return.
注記: これは、 この時点より前に %遷移 が`飛ばされ$た場合に起こる。 ◎ Note: This happens if transition was skipped before this point.
- `~view遷移~用の描画を抑止するか$doc ~SET ~F ◎ Set rendering suppression for view transitions to false.
- ~IF[ %遷移 の`初期~snapshot包含塊~size$vT ~NEQ `~snapshot包含塊の~size$ ] ⇒# `~view遷移を飛ばす$( %遷移, 【ここに与えるべき引数が指定されていない】 ); ~RET ◎ If transition’s initial snapshot containing block size is not equal to the snapshot containing block size, then skip the view transition for transition, and return.
- %成否 ~LET `新-状態を捕捉する$( %遷移 ) ◎ Capture the new state for transition.
- ~IF[ %成否 ~EQ `失敗^i ] ⇒# `~view遷移を飛ばす$( %遷移, "`InvalidStateError$E" ); ~RET ◎ If failure is returned, then skip the view transition for transition with an "InvalidStateError" DOMException in transition’s relevant Realm, and return.
-
%遷移 の`有名~要素~群$vTの`値~群$mapを成す ~EACH( %捕捉された要素 ) に対し:
- %新-要素 ~LET %捕捉された要素 の`新-要素$cE
- ~IF[ %新-要素 ~EQ ~NULL ] ⇒ ~CONTINUE
- %新-要素 の`ある~view遷移~内に捕捉されたか$el ~SET ~T
- `遷移~疑似要素たちを設定しておく$( %遷移 ) ◎ Setup transition pseudo-elements for transition.
- %成否 ~LET `疑似要素~styleを更新する$( %遷移 ) ◎ Update pseudo-element styles for transition.
-
~IF[ %成否 ~EQ `失敗^i ] ⇒# `~view遷移を飛ばす$( %遷移, "`InvalidStateError$E" ); ~RET ◎ If failure is returned, then skip the view transition for transition with an "InvalidStateError" DOMException in transition’s relevant Realm, and return.
注記: 上の手続きは、[ ~style/~layout ]の間に計算される情報を算出するため, 文書~lifecycle相を走らす【?】ことを要求することになる。 ◎ Note: The above steps will require running document lifecycle phases, to compute information calculated during style/layout.
- %遷移 の`相$vT ~SET `~animate中$i ◎ Set transition’s phase to "animating".
- `~promiseを解決する$( %遷移 の`準備済み時の~promise$vT ) ◎ Resolve transition’s ready promise.
7.3.1. 旧-状態を捕捉する
`旧-状態を捕捉する@ ときは、 所与の ( `ViewTransition$I %遷移 ) に対し: ◎ To capture the old state for ViewTransition transition:
- %文書 ~LET %遷移 に`関連な大域~obj$に`結付けられた文書$ ◎ Let document be transition’s relevant global object’s associated document.
- %有名~要素~群 ~LET %遷移 の`有名~要素~群$vT ◎ Let namedElements be transition’s named elements.
- %捕捉~要素~群 ~LET 新たな`有順序~map$ ◎ Let usedTransitionNames be a new set of strings. ◎ Let captureElements be a new list of elements.
- ~IF[ `~snapshot包含塊の~size$は`実装定義$な最大を超過する ] ⇒ ~RET `失敗^i ◎ If the snapshot containing block size exceeds an implementation-defined maximum, then return failure.
- %遷移 の`初期~snapshot包含塊~size$vT ~SET `~snapshot包含塊の~size$ ◎ Set transition’s initial snapshot containing block size to the snapshot containing block size.
-
~AND↓ を満たす ~EACH( `要素$ %要素 ) に対し…
- `接続されて$いる
- その`~node文書$ ~EQ %文書
- `平坦~tree$における その先祖として`内容を飛ばす$ものは無い
- その`文書~視野な~view遷移~名$ ~NEQ `none$v
- `描画され$る
-
複数個の`~box断片$を有さない
注記: 将来~versionにおいては、 断片化された要素~用にも遷移を可能化するよう求まれるかもしれない。 `8900$issue を見よ。
注記: ここでの`~box断片$は、 複数の`行l~box$にまたがる`行内~box$の断片化も参照rするものではない。 そのような行内は、 遷移に関与し得る。
…に対し,`塗り順序$で:
注記: 塗り順序で反復するのは、[ その順序が【 %捕捉~要素~群 を介して】 %有名~要素~群 に~cacheされる ]ことを確保するためである。 この順序は、 `view-transition-group^pe 疑似要素~用の~DOM順序を定義する — 塗り~stackの下端にある要素が, `view-transition^pe の最初の子である疑似要素を生成するよう。
◎ For each element of every element that is connected, and has a node document equal to document, in paint order: ◎ We iterate in paint order to ensure that this order is cached in namedElements. This defines the DOM order for ::view-transition-group pseudo-elements, such that the element at the bottom of the paint stack generates the first pseudo child of ::view-transition. • If any flat tree ancestor of this element skips its contents, then continue. • If element has more than one box fragment, then continue. • Note: We might want to enable transitions for fragmented elements in future versions. See #8900. • Note: box fragment here does not refer to fragmentation of inline boxes across line boxes. Such inlines can participate in a transition. • Let transitionName be the element’s document-scoped view transition name. • If transitionName is none, or element is not rendered, then continue.- %遷移~名 ~LET %要素 の`文書~視野な~view遷移~名$ ◎ ↑
-
~IF[ %捕捉~要素~群[ %遷移~名 ] ~NEQ ε ]: ◎ If usedTransitionNames contains transitionName, then:
- %捕捉~要素~群 の`値~群$mapを成す ~EACH( %値 ) に対し ⇒ %値 の`ある~view遷移~内に捕捉されたか$el ~SET ~F ◎ For each element in captureElements: • Set element’s captured in a view transition to false.
- ~RET `失敗^i ◎ return failure.
- %要素 の`ある~view遷移~内に捕捉されたか$el ~SET ~T ◎ ↓ Append transitionName to usedTransitionNames. ◎ Set element’s captured in a view transition to true.
- %捕捉~要素~群[ %遷移~名 ] ~SET %要素 ◎ Append element to captureElements.
注記: 以下において,この~algoを別々な~loop内で継続するのは、 この捕捉に関与しているすべての要素に対し[ それらの`ある~view遷移~内に捕捉されたか$elが, 後の段において 【`画像を捕捉する$中で`描画~特性を捕捉する$ときに】 読取られる前に設定される ]ことを確保するためである。 ◎ The algorithm continues in a separate loop to ensure that captured in a view transition is set on all elements participating in this capture before it is read by future steps in the algorithm.
-
%捕捉~要素~群 を成す ~EACH( %遷移~名 → %要素 ) に対し: ◎ For each element in captureElements:
- %捕捉 ~LET 新たな`捕捉された要素$ ◎ Let capture be a new captured element struct.
- %捕捉 の`旧-画像$cE ~SET `画像を捕捉する$( %要素 ) ◎ Set capture’s old image to the result of capturing the image of element.
- %元の矩形 ~LET [ %要素 ~EQ %文書 の`文書~要素$ならば`~snapshot包含塊$/ ~ELSE_ %要素 の`~border~box$ ] ◎ Let originalRect be snapshot containing block if element is the document element, otherwise, the element|'s border box.
- %捕捉 の`旧-横幅$cE ~SET %元の矩形 の `width$m ◎ Set capture’s old width to originalRect’s width.
- %捕捉 の`旧-縦幅$cE ~SET %元の矩形 の `height$m ◎ Set capture’s old height to originalRect’s height.
- %捕捉 の`旧-変形$cE ~SET 次を満たす変形を与える `transform-function$t ⇒ %要素 の`~border~box$を`~snapshot包含塊の原点$から `its^en【?】 現在の視覚的な位置へ対応付けることになる ◎ Set capture’s old transform to a <transform-function> that would map element’s border box from the snapshot containing block origin to its current visual position.
- %捕捉 の`旧-書字~mode$cE ~SET %要素 の `writing-mode$p の`算出d値$ ◎ Set capture’s old writing-mode to the computed value of writing-mode on element.
- %捕捉 の`旧-方向$cE ~SET %要素 の `direction$p の`算出d値$ ◎ Set capture’s old direction to the computed value of direction on element.
- %捕捉 の`旧-~text方位$cE ~SET %要素 の `text-orientation$p の`算出d値$ ◎ Set capture’s old text-orientation to the computed value of text-orientation on element.
- %捕捉 の`旧-混色~mode$cE ~SET %要素 の `mix-blend-mode$p の`算出d値$ ◎ Set capture’s old mix-blend-mode to the computed value of mix-blend-mode on element.
- %捕捉 の`旧-後景~filter$cE ~SET %要素 の `backdrop-filter$p の`算出d値$ ◎ Set capture’s old backdrop-filter to the computed value of backdrop-filter on element.
- %捕捉 の`旧-色~scheme$cE ~SET %要素 の `color-scheme$p の`算出d値$ ◎ Set capture’s old color-scheme to the computed value of color-scheme on element.
- %有名~要素~群[ %遷移~名 ] ~SET %捕捉 ◎ Let transitionName be the computed value of view-transition-name for element. ◎ Set namedElements[transitionName] to capture.
- %捕捉~要素~群 の`値~群$mapを成す ~EACH( %要素 ) に対し ⇒ %要素 の`ある~view遷移~内に捕捉されたか$el ~SET ~F ◎ For each element in captureElements: • Set element’s captured in a view transition to false.
- ~RET `成功^i ◎ ↑↑
7.3.2. 新-状態を捕捉する
`新-状態を捕捉する@ ときは、 所与の ( `ViewTransition$I %遷移 ) に対し: ◎ To capture the new state for ViewTransition transition:
- %文書 ~LET %遷移 に`関連な大域~obj$に`結付けられた文書$ ◎ Let document be transition’s relevant global object’s associated document.
- %有名~要素~群 ~LET %遷移 の`有名~要素~群$vT ◎ Let namedElements be transition’s named elements.
- %遷移~名~群 ~LET 新たな`集合$【! of strings】 ◎ Let usedTransitionNames be a new set of strings.
-
~AND↓ を満たす ~EACH( `要素$ %要素 ) に対し…
- `接続されて$いる
- その`~node文書$ ~EQ %文書
- `平坦~tree$における その先祖として`内容を飛ばす$ものは無い
- その`文書~視野な~view遷移~名$ ~NEQ `none$v
- `描画され$る
- 複数個の`~box断片$を有さない
…に対し,`塗り順序$で:
◎ For each element of every element that is connected, and has a node document equal to document, in paint order: • If any flat tree ancestor of this element skips its contents, then continue. • Let transitionName be element’s document-scoped view transition name. • If transitionName is none, or element is not rendered, then continue. • If element has more than one box fragment, then continue.- %遷移~名 ~LET %要素 の`文書~視野な~view遷移~名$ ◎ ↑
- ~IF[ %遷移~名 ~IN %遷移~名~群 ] ⇒ ~RET `失敗^i ◎ If usedTransitionNames contains transitionName, then return failure.
- %遷移~名~群 に %遷移~名 を`付加する$set ◎ Append transitionName to usedTransitionNames.
-
~IF[ %有名~要素~群[ %遷移~名 ] ~EQ ε ] ⇒ %有名~要素~群[ %遷移~名 ] ~SET 新たな`捕捉された要素$ ◎ If namedElements[transitionName] does not exist, then set namedElements[transitionName] to a new captured element struct.
注記: この構造体を %有名~要素~群【!this ordered map】 の終端に追加するのは意図的である。 これは、 新-~DOM内にしか存在しない名前 【† `view-transition-name$p に当の名前を指定した要素(以下同様)】 (入口~animation)たちは,[ 旧-~DOM内の名前(出口~animation), 両~DOM内の名前(~pairにされた~animation) ]すべての上層にしか塗られないことを含意する【!誤 than → that】。 このような層の重ね方は、 事例によっては~~正しいとは言えないかもしれない。 `8941$issue を見よ。 ◎ Note: We intentionally add this struct to the end of this ordered map. This implies than names which only exist in the new DOM (entry animations) will be painted on top of names only in the old DOM (exit animations) and names in both DOMs (paired animations). This might not be the right layering for all cases. See issue 8941.
- %有名~要素~群[ %遷移~名 ] の`新-要素$cE ~SET %要素 ◎ Set namedElements[transitionName]'s new element to element.
- ~RET `成功^i ◎ ↑↑
7.3.3. 遷移~疑似要素たちを設定しておく
`遷移~疑似要素たちを設定しておく@ ときは、 所与の ( `ViewTransition$I %遷移 ) に対し: ◎ To setup transition pseudo-elements for a ViewTransition transition:
注記: この~algoは、 遷移~用に疑似要素~treeを構築して,それらの初期~styleを生成する。 疑似要素~treeを成す構造は、 より高い~levelでは `§ ~view遷移~用の疑似要素@#view-transition-pseudos$が受持つ。 ◎ Note: This algorithm constructs the pseudo-element tree for the transition, and generates initial styles. The structure of the pseudo-tree is covered at a higher level in § 3.2 View Transition Pseudo-elements.
- %文書 ~LET コレに`関連な大域~obj$に`結付けられた文書$ ◎ Let document be this’s relevant global object’s associated document.
- %文書 の`~view遷移~treeを示すか$doc ~SET ~T ◎ Set document’s show view transition tree to true.
-
%遷移 の`有名~要素~群$vTを成す ~EACH( %遷移~名 → %捕捉された要素 ) に対し: ◎ For each transitionName → capturedElement of transition’s named elements:
- %~group ~LET 新たな `view-transition-group()$pe — その ⇒# `~view遷移~名$ ~SET %遷移~名 ◎ Let group be a new ::view-transition-group(), with its view transition name set to transitionName.
- %遷移 の`遷移~根~疑似要素$vTに【その子として】 %~group を付加する ◎ Append group to transition’s transition root pseudo-element.
- %画像~pair ~LET 新たな `view-transition-image-pair()$pe — その ⇒# `~view遷移~名$ ~SET %遷移~名 ◎ Let imagePair be a new ::view-transition-image-pair(), with its view transition name set to transitionName.
- %~group に【その子として】 %画像~pair を付加する ◎ Append imagePair to group.
-
~IF[ %捕捉された要素 の`旧-画像$cE ~NEQ ~NULL ]: ◎ If capturedElement’s old image is not null, then:
- %旧- ~LET 新たな `view-transition-old()$pe — その ⇒# `~view遷移~名$ ~SET %遷移~名, `置換され$る内容 ~SET %捕捉された要素 の`旧-画像$cE ◎ Let old be a new ::view-transition-old(), with its view transition name set to transitionName, displaying capturedElement’s old image as its replaced content.
- %画像~pair に【その子として】 %旧- を付加する ◎ Append old to imagePair.
-
~IF[ %捕捉された要素 の`新-要素$cE ~NEQ ~NULL ]: ◎ If capturedElement’s new element is not null, then:
-
%新- ~LET 新たな `view-transition-new()$pe — その ⇒# `~view遷移~名$ ~SET %遷移~名 ◎ Let new be a new ::view-transition-new(), with its view transition name set to transitionName.
注記: この疑似要素の~style付けは、 `疑似要素~styleを更新する$ときに取扱われる。 ◎ Note: The styling of this pseudo is handled in update pseudo-element styles.
- %画像~pair に【その子として】 %新- を付加する ◎ Append new to imagePair.
-
-
~IF[ %捕捉された要素 の`旧-画像$cE ~EQ ~NULL ]: ◎ If capturedElement’s old image is null, then:
- ~Assert: %捕捉された要素 の`新-要素$cE ~NEQ ~NULL ◎ Assert: capturedElement’s new element is not null.
- %捕捉された要素 の`画像~animation名~規則$cE ~SET [ 下に与える~CSS ]を表現している新たな `CSSStyleRule$I ◎ Set capturedElement’s image animation name rule to a new CSSStyleRule representing the following CSS,\
- %文書 の`動的な~view遷移~stylesheet$docに[ 下に与える~CSS ]を付加する ◎ and append it to document’s dynamic view transition style sheet:
上で利用される~CSSは: ◎ ↑
:root::view-transition-new(%遷移~名) { animation-name: -ua-view-transition-fade-in; }
注記: この~CSSは、 置換されることになる変数を包含する。 ◎ Note: The above code example contains variables to be replaced.
-
~IF[ %捕捉された要素 の`新-要素$cE ~EQ ~NULL ]: ◎ If capturedElement’s new element is null, then:
- ~Assert: %捕捉された要素 の`旧-画像$cE ~NEQ ~NULL ◎ Assert: capturedElement’s old image is not null.
- %捕捉された要素 の`画像~animation名~規則$cE ~SET [ 下に与える~CSS ]を表現している新たな `CSSStyleRule$I ◎ Set capturedElement’s image animation name rule to a new CSSStyleRule representing the following CSS,\
- %文書 の`動的な~view遷移~stylesheet$docに[ 下に与える~CSS ]を付加する ◎ and append it to document’s dynamic view transition style sheet:
上で利用される~CSSは: ◎ ↑
:root::view-transition-old(%遷移~名) { animation-name: -ua-view-transition-fade-out; }
注記: この~CSSは、 置換されることになる変数を包含する。 ◎ Note: The above code example contains variables to be replaced.
-
~IF[ %捕捉された要素 の`旧-画像$cE ~NEQ ~NULL ]~AND[ `新-要素$cE ~NEQ ~NULL ]: ◎ If both of capturedElement’s old image and new element are not null, then:
- %変形 ~LET %捕捉された要素 の`旧-変形$cE ◎ Let transform be capturedElement’s old transform.
- %横幅 ~LET %捕捉された要素 の`旧-横幅$cE ◎ Let width be capturedElement’s old width.
- %縦幅 ~LET %捕捉された要素 の`旧-縦幅$cE ◎ Let height be capturedElement’s old height.
- %後景~filter ~LET %捕捉された要素 の`旧-後景~filter$cE ◎ Let backdropFilter be capturedElement’s old backdrop-filter.
-
:
- %捕捉された要素 の`~group~keyframe群$cE ~SET [ 下に与える~CSS ]を表現している新たな `CSSKeyframesRule$I ◎ Set capturedElement’s group keyframes to a new CSSKeyframesRule representing the following CSS,\
- %文書 の`動的な~view遷移~stylesheet$docに[ 下に与える~CSS ]を付加する ◎ and append it to document’s dynamic view transition style sheet:
上で利用される~CSSは: ◎ ↑
@keyframes -ua-view-transition-group-anim-%遷移~名 { from { transform: %変形; width: %横幅; height: %縦幅; backdrop-filter: %後景~filter; } }
注記: この~CSSは、 置換されることになる変数を包含する。 ◎ Note: The above code example contains variables to be replaced.
-
:
- %捕捉された要素 の`~group~animation名~規則$cE ~SET [ 下に与える~CSS ]を表現している新たな `CSSStyleRule$I ◎ Set capturedElement’s group animation name rule to a new CSSStyleRule representing the following CSS,\
- %文書 の`動的な~view遷移~stylesheet$docに[ 下に与える~CSS ]を付加する ◎ and append it to document’s dynamic view transition style sheet:
上で利用される~CSSは: ◎ ↑
:root::view-transition-group(%遷移~名) { animation-name: -ua-view-transition-group-anim-%遷移~名; }
注記: この~CSSは、 置換されることになる変数を包含する。 ◎ Note: The above code example contains variables to be replaced.
-
:
- %捕捉された要素 の`画像~pair隔離~規則$cE ~SET [ 下に与える~CSS ]を表現している新たな `CSSStyleRule$I ◎ Set capturedElement’s image pair isolation rule to a new CSSStyleRule representing the following CSS,\
- %文書 の`動的な~view遷移~stylesheet$docに[ 下に与える~CSS ]を付加する ◎ and append it to document’s dynamic view transition style sheet:
上で利用される~CSSは: ◎ ↑
:root::view-transition-image-pair(%遷移~名) { isolation: isolate; }
注記: この~CSSは、 置換されることになる変数を包含する。 ◎ Note: The above code example contains variables to be replaced.
-
:
- %捕捉された要素 の`画像~animation名~規則$cE ~SET [ 下に与える~CSS ]を表現している新たな `CSSStyleRule$I ◎ Set capturedElement’s image animation name rule to a new CSSStyleRule representing the following CSS,\
- %文書 の`動的な~view遷移~stylesheet$docに[ 下に与える~CSS ]を付加する ◎ and append it to document’s dynamic view transition style sheet:
上で利用される~CSSは: ◎ ↑
:root::view-transition-old(%遷移~名) { animation-name: -ua-view-transition-fade-out, -ua-mix-blend-mode-plus-lighter; } :root::view-transition-new(%遷移~名) { animation-name: -ua-view-transition-fade-in, -ua-mix-blend-mode-plus-lighter; }
注記: この~CSSは、 置換されることになる変数を包含する。 ◎ Note: The above code example contains variables to be replaced.
注記: `mix-blend-mode$p 用の値 `plus-lighter$v は、 旧-画像と新-画像において色~値が一致する画素を混色した結果が~~元と同じになり, “正しい” ~cross-fadeを達成することを確保する。 ◎ Note: mix-blend-mode: plus-lighter ensures that the blending of identical pixels from the old and new images results in the same color value as those pixels, and achieves a “correct” cross-fade.
7.4. 更新~callbackを~callする
`更新~callbackを~callする@ ときは、 所与の ( `ViewTransition$I %遷移 ) に対し: ◎ To call the update callback of a ViewTransition transition:
注記: これは、 どの `ViewTransition$I にも起こることが保証される — 当の遷移が`飛ばされ$た場合でも。 その理由は、 `§ 増補としての遷移@#transitions-as-enhancements$ にて論じられる。 ◎ Note: This is guaranteed to happen for every ViewTransition, even if the transition is skipped. The reasons for this are discussed in § 1.4 Transitions as an enhancement.
- ~Assert: %遷移 の`相$vT ~IN { `済み$i, `捕捉-待ち$i【!before "update-callback-called"】 } ◎ Assert: transition’s phase is "done", or before "update-callback-called".
- ~IF[ %遷移 の`相$vT ~NEQ `済み$i ] ⇒ %遷移 の`相$vT ~SET `更新~callbackは~call済み$i ◎ If transition’s phase is not "done", then set transition’s phase to "update-callback-called".
- %~callback~promise ~LET ~NULL ◎ Let callbackPromise be null.
- ~IF[ %遷移 の`更新~callback$vT ~EQ ~NULL ] ⇒ %~callback~promise ~SET `解決される~promise$( `undefined^jv, %遷移 に`関連な~realm$ ) ◎ If transition’s update callback is null, then set callbackPromise to a promise resolved with undefined, in transition’s relevant Realm.
- ~ELSE ⇒ %~callback~promise ~SET `~callback関数を呼出す$( %遷移 の`更新~callback$vT, « » ) ◎ Otherwise, set callbackPromise to the result of invoking transition’s update callback.
-
%充足-手続き ~LET 次を走らす手続き: ◎ Let fulfillSteps be to following steps:
- `~promiseを解決する$( %遷移 の`更新~callback済み時の~promise$vT ) ◎ Resolve transition’s update callback done promise with undefined.
- `~view遷移を作動化する$( %遷移 ) ◎ Activate transition.
-
%却下-手続き ~LET 所与の ( %事由 ) に対し,次を走らす手続き: ◎ Let rejectSteps be the following steps given reason:
- `~promiseを却下する$( %遷移 の`更新~callback済み時の~promise$vT, %事由 ) ◎ Reject transition’s update callback done promise with reason.
-
~IF[ %遷移 の`相$vT ~EQ `済み$i ] ⇒ ~RET ◎ If transition’s phase is "done", then return.
注記: これは、 この時点より前に %遷移 が`飛ばされ$た場合に起こる。 ◎ Note: This happens if transition was skipped before this point.
-
`~promiseを取扱済みとして~markする$( %遷移 の`準備済み時の~promise$vT ) ◎ Mark as handled transition’s ready promise.
注記: %遷移 の`更新~callback済み時の~promise$vTは、 `unhandledrejection$et ~eventを発火することになる。 この段は、 この~eventが重複して発火されるのを避ける。 ◎ Note: transition’s update callback done promise will provide the unhandledrejection. This step avoids a duplicate.
- `~view遷移を飛ばす$( %遷移, ~NULL, %事由 ) ◎ Skip the view transition transition with reason.
- `~promiseに反応する$( %~callback~promise ) — 次を与える下で ⇒# `充足~手続き^i ~SET %充足-手続き, `却下~手続き^i ~SET %却下-手続き ◎ React to callbackPromise with fulfillSteps and rejectSteps.
-
ある制限時間~後に,遷移を飛ばすときは、 ~UAは,次の手続きを`並列的$に遂行してもヨイ: ◎ To skip a transition after a timeout, the user agent may perform the following steps in parallel:
- 実装定義な`所要時間$だけ待機する ◎ Wait for an implementation-defined duration.
-
`大域~taskを~queueする$( `~DOM操作~task~source$, %遷移 に`関連な大域~obj$, 次の手続き ) ◎ Queue a global task on the DOM manipulation task source, given transition’s relevant global object, to perform\
手続きは: ◎ the following steps:
-
~IF[ %遷移 の`相$vT ~EQ `済み$i ] ⇒ ~RET ◎ If transition’s phase is "done", then return.
注記: これは、 この時点より前に %遷移 が`飛ばされ$た場合に起こる。 ◎ Note: This happens if transition was skipped before this point.
- `~view遷移を飛ばす$( %遷移, "`TimeoutError$E" ) ◎ Skip transition with a "TimeoutError" DOMException.
-
7.5. ~view遷移を飛ばす
`~view遷移を飛ばす@ ときは、 所与の ( `ViewTransition$I %遷移, [ 文字列/~NULL ] %例外~名, %事由 (省略時は ε ) ) に対し: ◎ To skip the view transition for ViewTransition transition with reason reason:
-
~IF[ %例外~名 ~NEQ ~NULL ] ⇒ %事由 ~SET %遷移 に`関連な~realm$に属する新たな`例外$ — その ⇒# `名前$eX ~SET %例外~名
【 この段と次の段, および %例外~名 引数は、 ~realmに関する取扱いを集約するための,この訳による追加。 】
- ~Assert: %事由 ~NEQ ε
- %文書 ~LET %遷移 に`関連な大域~obj$に`結付けられた文書$ ◎ Let document be transition’s relevant global object’s associated document.
- ~Assert: %遷移 の`相$vT ~NEQ `済み$i ◎ Assert: transition’s phase is not "done".
-
~IF[ %遷移 の`相$vT ~EQ `捕捉-待ち$i【!before "update-callback-called"】 ] ⇒ `大域~taskを~queueする$( `~DOM操作~task~source$, %遷移 に`関連な大域~obj$, 次の手続き ) ◎ If transition’s phase is before "update-callback-called", then queue a global task on the DOM manipulation task source, given transition’s relevant global object, to call\
手続きは ⇒ `更新~callbackを~callする$( %遷移 ) ◎ the update callback of transition. - `~view遷移~用の描画を抑止するか$doc ~SET ~F ◎ Set rendering suppression for view transitions to false.
- ~IF[ %文書 にて`作動中な~view遷移$doc ~EQ %遷移 ] ⇒ `~view遷移を~clearする$( %遷移 ) ◎ If document’s active view transition is transition, Clear view transition transition.
- %遷移 の`相$vT ~SET `済み$i ◎ Set transition’s phase to "done".
-
`~promiseを却下する$( %遷移 の`準備済み時の~promise$vT, %事由 ) ◎ Reject transition’s ready promise with reason.
注記: ~animationを開始した後に `skipTransition()$m が~callされた場合、 `準備済み時の~promise$vTは,この時点ですでに解決-済みかもしれない。 その事例では、 この段は何もしない。 ◎ Note: The ready promise may already be resolved at this point, if skipTransition() is called after we start animating. In that case, this step is a no-op.
-
%結果 ~LET `~promiseに反応する$( %遷移 の`更新~callback済み時の~promise$vT ) — 次を与える下で: ◎ Resolve transition’s finished promise with the result of reacting to transition’s update callback done promise:
- `充足~手続き^i は ⇒ ~RET `undefined^jv ◎ If the promise was fulfilled, then return undefined.
注記: %遷移 の`更新~callback済み時の~promise$vTの却下は,ここでは明示的に取扱われないので、 %遷移 の`更新~callback済み時の~promise$vTが却下された場合, %遷移 の`完遂-時の~promise$vTが同じ事由で却下されることになる。 ◎ Note: Since the rejection of transition’s update callback done promise isn’t explicitly handled here, if transition’s update callback done promise rejects, then transition’s finished promise will reject with the same reason.
- `~promiseを解決する$( %遷移 の`完遂-時の~promise$vT, %結果 ) ◎ ↑
7.6. ~view遷移の~page可視性~変化-時の手続き
`~view遷移の~page可視性~変化-時の手続き@ は、 所与の ( `文書$ %文書 ) に対し: ◎ The view transition page-visibility change steps given Document document are:
-
`大域~taskを~queueする$( `~DOM操作~task~source$, %文書 に`関連な大域~obj$, 次の手続き ) ◎ Queue a global task on the DOM manipulation task source, given document’s relevant global object, to perform\
手続きは: ◎ the following steps:
- %~view遷移 ~LET %文書 にて`作動中な~view遷移$doc ◎ ↓
- ~IF[ %文書 の`可視性~状態$doc ~EQ `hidden^l ] ⇒ ~IF[ %~view遷移 ~NEQ ~NULL ] ⇒ `~view遷移を飛ばす$( %~view遷移, "`InvalidStateError$E" ) ◎ If document’s visibility state is "hidden", then: • If document’s active view transition is not null, then skip document’s active view transition with an "InvalidStateError" DOMException.
- ~ELSE ⇒ ~Assert: %~view遷移 ~EQ ~NULL ◎ Otherwise, assert: active view transition is null.
注記: これは、 ~HTML仕様から~callされる。 ◎ Note: this is called from the HTML spec.
7.7. 画像を捕捉する
`画像を捕捉する@ ときは、 所与の ( `要素$ %要素 ) に対し,次の手続きを遂行する — これは、 ある画像を返す: ◎ To capture the image given an element element, perform the following steps. They return an image.
- %文書 ~LET %要素 の`~node文書$ 【この段は、以下を明確化するための,この訳による補完。】
-
~IF[ %要素 ~EQ %文書 の`文書~要素$ ]: ◎ If element is the document element, then:
- %~canvas ~LET ~sizeが`~snapshot包含塊$の~sizeに等しい,透明な~canvas ◎ ↓
-
%文書 が成す領域 ( %文書 の[ `~canvas背景$, `上端~層$を成す内容 ]も含む) のうち`~snapshot包含塊$と交差する部分を %~canvas 上に描画する — [ %要素 の`描画~特性を捕捉する$ ]かつ[ 次に挙げる追加的な特性に従う ]下で: ◎ Render the region of document (including its canvas background and any top layer content) that intersects the snapshot containing block, on a transparent canvas the size of the snapshot containing block, following the capture rendering characteristics, and these additional characteristics:
-
%要素 の`~scrollされる~box$の外側にある区画は、 `~layout表示域$を[ 移動する/~resizeする ]ことなく~scrollされたかのように描画するベキである。 これは、[ ~scrollする/~resizeする ]ことに関係する~event — `IntersectionObserver$I など — を誘発しないモノトスル。 ◎ Areas outside element’s scrolling box should be rendered as if they were scrolled to, without moving or resizing the layout viewport. This must not trigger events related to scrolling or resizing, such as IntersectionObservers.
-
~scrollし得ない区画 (~scroll限界域の外にある区画) には、 `~canvas背景$を描画するベキである。 ◎ Areas that cannot be scrolled to (i.e. they are out of scrolling bounds), should render the canvas background.
-
- ~RET 画像としての %~canvas — %~canvas の~sizeが,そのまま画像の`生来な~size$になるとする ◎ Return this canvas as an image. The natural size of the image is equal to the snapshot containing block.
-
~ELSE: ◎ Otherwise:
- %~canvas ~LET 広さ無限な透明な~canvas ◎ ↓
- %要素, %要素 の`子孫$を[ %要素 が %文書 内で現れるときと同じ~size ]で[ %要素 の`描画~特性を捕捉する$ ]下で %~canvas 上に描画する ◎ Render element and its descendants, at the same size it appears in its node document, over an infinite transparent canvas, following the capture rendering characteristics.
-
~RET 画像としての %~canvas の[ %要素 の`~ink~overflow矩形$ ]を含む部位。 この画像の[ `生来な寸法$/原点 ]は、[ %要素 の`首要~box$を成す`~border~box$ ]の[ `~size$になる/ 原点に対応する ]モノトスル — [ 当の画像は、 この`~border~box$の内容を表現する ]かつ[ 捕捉された`~ink~overflow$は、 この限界域の外側で表現される ]ように。 ◎ Return the portion of this canvas that includes element’s ink overflow rectangle as an image. The natural dimensions of this image must be those of its principal border box, and its origin must correspond to that border box's origin, such that the image represents the contents of this border box and any captured ink overflow is represented outside these bounds.
注記: この画像が`生来な~size$で`置換d要素$として描画されるときは、 次のように表示されることになる ⇒# 要素の`首要~box$の[ ~size, 内容 ]を伴う。 捕捉された`~ink~overflow$は要素の`内容~box$を~overflowする。 ◎ Note: When this image is rendered as a replaced element at its natural size, it will display with the size and contents of element’s principal box, with any captured ink overflow overflowing its content box.
7.7.1. 描画~特性を捕捉する
%要素 の `描画~特性を捕捉する@ ときは,次に従うとする: ◎ The capture rendering characteristics are as follows:
-
%要素(および その各~先祖)に適用された変形は無視する。 ◎ If the referenced element has a transform applied to it (or its ancestors), then the transform is ignored.
注記: この変形は、 【!the associated】 `view-transition-group()$pe 疑似要素の `transform$p ~propを利用して, ~snapshotに適用される。 ◎ Note: This transform is applied to the snapshot using the transform property of the associated ::view-transition-group pseudo-element.
- [ %要素, その各~子孫 ]に適用された効果 — `opacity$p や `filter$p など — は、 捕捉に適用する。 %要素 の各~先祖から %要素 に適用された効果は無視する。 ◎ Effects applied on the element and its descendants, such as opacity and filter, are applied to the capture. Effects applied to the element from its ancestors are ignored.
- 実装は、 %要素 の`~ink~overflow矩形$が何らかの`実装定義$な最大を超過する場合には, 描画される内容をそこまでに切取ってもヨイ。 しかしながら、 捕捉される画像には,少なくとも[ %要素 を成す内容のうち`~snapshot包含塊$に交差する部分 ]を含めるベキである。 実装は、 %要素 が[ ~viewの中へ変形される広い`~ink~overflow区画$ ]を伴うときは,それを織り込むときに~raster化の品質を調整してもヨイ。 ◎ Implementations may clip the rendered contents if the ink overflow rectangle exceeds some implementation-defined maximum. However, the captured image should include, at the very least, the contents of element that intersect with the snapshot containing block. Implementations may adjust the rasterization quality to account for elements with a large ink overflow area that are transformed into view.
-
実装は、 %要素 の`~ink~overflow矩形$が`~snapshot包含塊$と交差しない場合には, ~raster化の品質を調整してもヨイ。 %要素 が結局は可視になった場合でも,利用者~体験は壊れないよう、 捕捉された画像は,少なくとも[ 透明な画素ではなく, %要素 の内容が成す何らかの低-品質な表現 ]を含むベキである。 ◎ Implementations may also adjust the rasterization quality for elements whose ink overflow rectangle does not intersect with the snapshot containing block. To avoid a broken experience if the element ends up becoming visible, the captured image should include, at the very least, some low-quality representation of the contents rather than transparent pixels.
注記: これは、 %要素 が表示域から離れていて,まったく可視ならないかもしれない場合でも、[ 作者の意図に十分~近い視覚的~効果 ]を保守しつつ[ 資源の利用度, ~raster化の処理能 ]における効率を高めることを許容する。 ◎ Note: This allows efficiency in resource usage and rasterization performance for elements that are away from the viewport and might not become visible at all, while maintaining a visual effect close enough to the author’s intent.
-
~AND↓ を満たす各~要素【!`Element$I】(`疑似要素$も含む) %子孫 の塗ngを飛ばす:
- %子孫 は %要素 の`~shadowも含めた子孫$である
- %子孫 の`ある~view遷移~内に捕捉されたか$el ~EQ ~T
注記: これが必要yあるのは、 該当する子孫は、 自前の~snapshotを生成して,独立に[ 表示され,~animateされる ]ことになるからである。 ◎ Note: This is necessary since the descendant will generate its own snapshot which will be displayed and animated independently.
7.8. 遷移~frameを取扱う
`遷移~frameを取扱う@ ときは、 所与の ( `ViewTransition$I %遷移 ) に対し: ◎ To handle transition frame given a ViewTransition transition:
- %文書 ~LET %遷移 に`関連な大域~obj$に`結付けられた文書$ ◎ Let document be transition’s relevant global object’s associated document.
- %作動中な~animationはあるか ~LET ~F ◎ Let hasActiveAnimations be a boolean, initially false.
-
%遷移 の`遷移~根~疑似要素$vTの`広義-子孫$を成す ~EACH( %要素 ) に対し: ◎ For each element of transition’s transition root pseudo-element's inclusive descendants:
-
~IF[ ~AND↓ を満たす`~animation$ %A は在る ]…
- %A の`時列線$An ~EQ %文書 に結付けられた`文書~時列線$
- %A に`結付けられた効果$ ~NEQ ~NULL
- %A に`結付けられた効果$の`効果~target$ ~EQ %要素
-
~OR↓ :
- %A の`再生-状態$ ~IN { `静止中$i, `稼働中$i }
- %文書 の`処理待ち~animation~event~queue$内に次を満たす %~event が在る ⇒ %~event の`対応する~event~target$ ~EQ %A
…ならば ⇒# %作動中な~animationはあるか ~SET ~T; ~BREAK
◎ For each animation whose timeline is a document timeline associated with document, and contains at least one associated effect whose effect target is element, set hasActiveAnimations to true if any of the following conditions is true: • animation’s play state is paused or running. • document’s pending animation event queue has any events associated with animation.
-
-
~IF[ %作動中な~animationはあるか ~EQ ~F ]: ◎ If hasActiveAnimations is false:
- %遷移 の`相$vT ~SET `済み$i ◎ Set transition’s phase to "done".
- `~view遷移を~clearする$( %遷移 ) ◎ Clear view transition transition.
- `~promiseを解決する$( %遷移 の`完遂-時の~promise$vT ) ◎ Resolve transition’s finished promise.
- ~RET ◎ Return.
- ~IF[ %遷移 の`初期~snapshot包含塊~size$vT ~NEQ `~snapshot包含塊の~size$ ] ⇒# `~view遷移を飛ばす$( %遷移, "`InvalidStateError$E" ); ~RET ◎ If transition’s initial snapshot containing block size is not equal to the snapshot containing block size, then skip the view transition for transition with an "InvalidStateError" DOMException in transition’s relevant Realm, and return.
- %成否 ~LET `疑似要素~styleを更新する$( %遷移 ) ◎ Update pseudo-element styles for transition.
-
~IF[ %成否 ~EQ `失敗^i ] ⇒# `~view遷移を飛ばす$( %遷移, "`InvalidStateError$E" ); ~RET ◎ If failure is returned, then skip the view transition for transition with an "InvalidStateError" DOMException in transition’s relevant Realm, and return.
注記: 上は、[ `incoming^en 要素【新-状態~内の要素】の[ ~size/位置 ]における変化が新たな~keyframeを生成させることになる ]ことを含意する。 これは、 視覚的な `jump^en 【不連続な~animation】をもたらし得る。 滑らかに `retarget^en する【変化~後の状態を反映するよう更新する】こともできたが, その複階性を正当化する利用事例は,まだ無い。 詳細は `7813$issue を見よ。 ◎ Note: The above implies that a change in incoming element’s size or position will cause a new keyframe to be generated. This can cause a visual jump. We could retarget smoothly but don’t have a use-case to justify the complexity. See issue 7813 for details.
7.9. 疑似要素~styleを更新する
`疑似要素~styleを更新する@ ときは、 所与の ( `ViewTransition$I %遷移 ) に対し: ◎ To update pseudo-element styles for a ViewTransition transition:
-
%遷移 の`有名~要素~群$vTを成す ~EACH( %遷移~名 → %捕捉された要素 ) に対し: ◎ For each transitionName → capturedElement of transition’s named elements:
- %新-要素 ~LET %捕捉された要素 の`新-要素$cE ◎ ↓
- ⇒# %横幅 ~LET ~NULL, %縦幅 ~LET ~NULL, %変形 ~LET ~NULL, %書字~mode ~LET ~NULL, %方向 ~LET ~NULL, %~text方位 ~LET ~NULL, %混色~mode ~LET ~NULL, %後景~filter ~LET ~NULL, %色~scheme ~LET ~NULL ◎ Let width, height, transform, writingMode, direction, textOrientation, mixBlendMode, backdropFilter and colorScheme be null.
-
~IF[ %新-要素 ~EQ ~NULL ]: ◎ If capturedElement’s new element is null, then:
- %横幅 ~SET %捕捉された要素 の`旧-横幅$cE ◎ Set width to capturedElement’s old width.
- %縦幅 ~SET %捕捉された要素 の`旧-縦幅$cE ◎ Set height to capturedElement’s old height.
- %変形 ~SET %捕捉された要素 の`旧-変形$cE ◎ Set transform to capturedElement’s old transform.
- %書字~mode ~SET %捕捉された要素 の`旧-書字~mode$cE ◎ Set writingMode to capturedElement’s old writing-mode.
- %方向 ~SET %捕捉された要素 の`旧-方向$cE ◎ Set direction to capturedElement’s old direction.
- %~text方位 ~SET %捕捉された要素 の`旧-~text方位$cE ◎ Set textOrientation to capturedElement’s old text-orientation.
- %混色~mode ~SET %捕捉された要素 の`旧-混色~mode$cE ◎ Set mixBlendMode to capturedElement’s old mix-blend-mode.
- %後景~filter ~SET %捕捉された要素 の`旧-後景~filter$cE ◎ Set backdropFilter to capturedElement’s old backdrop-filter.
- %色~scheme ~SET %捕捉された要素 の`旧-色~scheme$cE ◎ Set colorScheme to capturedElement’s old color-scheme.
-
~ELSE: ◎ Otherwise:
-
~IF[ ~OR↓ ]… ◎ Return failure if any of the following conditions is true:
- `平坦~tree$における %新-要素 の先祖として`内容を飛ばす$ものがある ◎ capturedElement’s new element has a flat tree ancestor that skips its contents.
- %新-要素 は`描画され$ない ◎ capturedElement’s new element is not rendered.
- %新-要素 は複数個の`~box断片$を有する ◎ capturedElement has more than one box fragment.
…ならば ⇒ ~RET `失敗^i ◎ ↑
注記: 他の描画~拘束は、[ %新-要素 の`ある~view遷移~内に捕捉されたか$el ]を介して施行される。 ◎ Note: Other rendering constraints are enforced via capturedElement’s new element being captured in a view transition.
- %新-矩形 ~LET %新-要素 に応じて ⇒# `文書~要素$であるならば`~snapshot包含塊$/ ~ELSE_ %新-要素 の`~border~box$ ◎ Let newRect be snapshot containing block if capturedElement is the document element, otherwise, capturedElement’s border box.
- %横幅 ~SET %新-矩形 の現在の横幅 ◎ Set width to the current width of newRect.
- %縦幅 ~SET %新-矩形 の現在の縦幅 ◎ Set height to the current height of newRect.
- %変形 ~SET 次を満たす変形を与える `transform-function$t ⇒ %新-矩形 を`~snapshot包含塊の原点$から `its^en【 %新-矩形 の?】 現在の視覚的な位置へ対応付けることになる ◎ Set transform to a transform that would map newRect from the snapshot containing block origin to its current visual position.
- %書字~mode ~SET %新-要素 の `writing-mode$p の`算出d値$ ◎ Set writingMode to the computed value of writing-mode on capturedElement’s new element.
- %方向 ~SET %新-要素 の `direction$p の`算出d値$ ◎ Set direction to the computed value of direction on capturedElement’s new element.
- %~text方位 ~SET %新-要素 の `text-orientation$p の`算出d値$ ◎ Set textOrientation to the computed value of text-orientation on capturedElement’s new element.
- %混色~mode ~SET %新-要素 の`mix-blend-mode$p の`算出d値$ ◎ Set mixBlendMode to the computed value of mix-blend-mode on capturedElement’s new element.
- %後景~filter ~SET %新-要素 の `backdrop-filter$p の`算出d値$ ◎ Set backdropFilter to the computed value of backdrop-filter on capturedElement’s new element.
- %色~scheme ~SET %新-要素 の `color-scheme$p の`算出d値$ ◎ Set colorScheme to the computed value of color-scheme on capturedElement’s new element.
-
-
:
-
~IF[ %捕捉された要素 の`~group~style規則$cE ~EQ ~NULL ]:
- %遷移 に`関連な大域~obj$に`結付けられた文書$の`動的な~view遷移~stylesheet$docに[ 下に与える~CSS ]を付加する ◎ If capturedElement’s group styles rule is null, then set capturedElement’s group styles rule to a new CSSStyleRule representing the following CSS,\
- %捕捉された要素 の`~group~style規則$cE ~SET [ 下に与える~CSS ]を表現している新たな `CSSStyleRule$I ◎ and append it to transition’s relevant global object’s associated document's dynamic view transition style sheet.
- ~ELSE ⇒ %捕捉された要素 の`~group~style規則$cEを[ 下に与える~CSS ]に合致するよう更新する ◎ Otherwise, update capturedElement’s group styles rule to match the following CSS:
上で利用される~CSSは: ◎ ↑
:root::view-transition-group(%遷移~名) { width: %横幅; height: %縦幅; transform: %変形; writing-mode: %書字~mode; direction: %方向; text-orientation: %~text方位; mix-blend-mode: %混色~mode; backdrop-filter: %後景~filter; color-scheme: %色~scheme; }
注記: 上の~code例は、 置換されることになる変数を包含する。 ◎ Note: The above code example contains variables to be replaced.
-
-
~IF[ %新-要素 ~NEQ ~NULL ]: ◎ If capturedElement’s new element is not null, then:
- %新- ~LET 【新たな?】 `view-transition-new()$pe — その ⇒ `~view遷移~名$ ~SET %遷移~名 ◎ Let new be the ::view-transition-new() with the view transition name transitionName.
- %新- の`置換され$る内容 ~SET `画像を捕捉する$( %新-要素 ) ◎ Set new’s replaced element content to the result of capturing the image of capturedElement’s new element.
- ~RET `成功^i ◎ ↑↑
この~algoは、[ `~UA出自$に属する ある~styleによる効果 ]が[ ある~web~APIにより観測し得る場合 ]には,該当する~styleたちを更新するために実行するモノトスル。 ◎ This algorithm must be executed to update styles in user-agent origin if its effects can be observed by a web API.
注記:
そのような~web~APIの例
⇒
window.getComputedStyle(document.documentElement, `::view-transition^l)
◎
Note: An example of such a web API is window.getComputedStyle(document.documentElement, "::view-transition").
7.10. ~view遷移を~clearする
`~view遷移を~clearする@ ときは、 所与の ( `ViewTransition$I %遷移 ) に対し: ◎ To clear view transition of a ViewTransition transition:
- %文書 ~LET %遷移 に`関連な大域~obj$に`結付けられた文書$ ◎ Let document be transition’s relevant global object’s associated document.
- ~Assert: %文書 にて`作動中な~view遷移$doc ~EQ %遷移 ◎ Assert: document’s active view transition is transition.
-
%遷移 の`有名~要素~群$vTの`値~群$mapを成す ~EACH( %捕捉された要素 ) に対し: ◎ For each capturedElement of transition’s named elements' values:
- ~IF[ %捕捉された要素 の`新-要素$cE ~NEQ ~NULL ] ⇒ %捕捉された要素 の`新-要素$cEの`ある~view遷移~内に捕捉されたか$el ~SET ~F ◎ If capturedElement’s new element is not null, then set capturedElement’s new element's captured in a view transition to false.
- %捕捉された要素 の`~style定義~群$cE【を成す~itemたちを表現する~list】を成す ~EACH( %~style ) に対し ⇒ ~IF[ %~style ~NEQ ~NULL ]~AND[ %~style は %文書 の`動的な~view遷移~stylesheet$doc内にある ] ⇒ %文書 の`動的な~view遷移~stylesheet$docから %~style を除去する ◎ For each style of capturedElement’s style definitions: • If style is not null, and style is in document’s dynamic view transition style sheet, then remove style from document’s dynamic view transition style sheet.
- %文書 の`~view遷移~treeを示すか$doc ~SET ~F ◎ Set document’s show view transition tree to false.
- %文書 にて`作動中な~view遷移$doc ~SET ~NULL ◎ Set document’s active view transition to null.
~privacyの考慮点
この仕様が導入する新たな~privacyの考慮点は無い。 ◎ This specification introduces no new privacy considerations.
~securityの考慮点
`画像を捕捉する$~algoを利用して生成される画像は、[ 非同一-生成元に属する~data (当の`文書$が非同一-生成元に属する資源を埋込んでいる場合)/ 訪問~済み~linkの様な敏感な情報 ]も包含し得る。 実装は、[ そのような~dataには,当の`文書$は~accessし得ない ]ことを確保するモノトスル。 これは、 実現可能なはずである — そのような~accessは、 当の`文書$の既定の描画においても,すでに防止されるべきなので。 ◎ The images generated using capture the image algorithm could contain cross-origin data (if the Document is embedding cross-origin resources) or sensitive information like visited links. The implementations must ensure this data can not be accessed by the Document. This should be feasible since access to this data should already be prevented in the default rendering of the Document.
変更点
◎非規範的- `2023年 5月 30日 作業草案@~TR/2023/WD-css-view-transitions-1-20230530/$ からの変更点 ◎ Changes from 2023-05-30 Working Draft
- ~keyframeを利用して, ~cross-fadeの間に `plus-lighter$v 混色-法を追加するようにした。 ( `8924$issue ) ◎ Use a keyframe to add plus-lighter blending during cross-fade. See issue 8924.
- `view-transition-group^pe へ複製される~propたちが成す~listに `mix-blend-mode^p を追加した。 ( `8962$issue ) ◎ Add mix-blend-mode to list of properties copied over to the ::view-transition-group. See issue 8962.
- `view-transition-group^pe へ複製される~propたちが成す~listに `text-orientation^p を追加した。 ( `8230$issue ) ◎ Add text-orientation to list of properties copied over to the ::view-transition-group. See issue 8230.
- `旧-状態を捕捉する$ ~algoを~~再構成した — `ある~view遷移~内に捕捉されたか$elを その値が後で読取られる前に適正に設定するよう。 ◎ Refactor the old capture algorithm to properly set captured in a view transition before reading the value.
- `startViewTransition()$m の~parameterを ~NULL 可能でなくした。 ( `9460$issue ) ◎ Make the startViewTransition() parameter non-nullable. See issue 9460.
- `~view遷移$に関与している要素は、 ~accessibility~treeに公開されるものとした。 ( `9365$issue ) ◎ Elements participating in a view transition are exposed to accessibility tree. See issue 9365.
- `~view遷移~tree$は、 ~accessibility~treeには公開されないものとした。 ( `9365$issue ) ◎ The view transition tree is not exposed to accessibility tree. See issue 9365.
- 後景~filterは、 変形や~sizeと類似に~animateするものとした。 ( `9358$issue ) ◎ Animate back-drop filter similar to transform/size. See issue 9358.
- ~DOM要素から `color-scheme$p を `view-transition-group()$pe へ複製するようにした。 ( `9276$issue ) ◎ Copy color-scheme from DOM element to ::view-transition-group(). See issue 9276.
- `文書$の`~view遷移を自動で飛ばすか^doc【この用語は今や廃された】を公開して,[ 外方への非同一-文書~遷移が~program的な~view遷移に先行する ]ことを許容するようにした。 ( `9512$issue ) ◎ Expose auto-skip view transition for a Document, to allow having outbound cross-document transitions preceed programmatic view transiitons. see issue 9512.
- なぜ `view-transition-name$p が~animate可能になるべきかについて,注記を追加した。 ◎ Add a note about why view-transition-name should be animatable.
- `view-transition-name$p 用の値 `auto^v は、 無効な値になるべきとした。 ( `9639$issue ) ◎ view-transition-name: auto should be an invalid value. See issue 9639.
- 入口~animation用の塗り順序を説明する注記を追加した。 ( `9672$issue ) ◎ Add note to explain paint order for entry animations. See issue 9672.
- `有名~要素~群$vTがどう片付けられるかを説明する注記を追加した。 ( `9669$issue ) ◎ Add note to explain how the named elements are cleaned up. See issue 9669.
- 時機 — とりわけ `updateCallbackDone$m のそれを — を明確化するよう,~algoを~~再構成した。 ( `9762$issue ) ◎ Refactor algorithm to clarify timing, especially of `updateCallbackDone. See issue 9762.
-
~UA~stylesheet内の[
`view-transition-image-pair()^pe /
`view-transition-old()^pe /
`view-transition-new()^pe
]用の規則に
`animation-delay^p: `inherit^v
を追加した。 ( `9817$issue ) ◎ Add animation-delay inherit to UA stylesheet rules for (::view-transition) -image-pair, -old, and -new. See issue 9817. - 文書が非可視なときは ~animationを自動で飛ばすようにした。 ( `9543$issue ) ◎ Auto-skip animation when document is hidden. See issue 9543.
- ~level 1 仕様を~cleanに保つため、 非同一-文書な~view遷移への参照を除去した。 ( `9886$issue ) ◎ Remove references to cross-document view-transitions, to keep the L1 spec clean. See Issue 9886.
- ~pageが非可視になったときに作動中な遷移を飛ばすための~algoを~exportした。 ( `9543$issue ) ◎ Export an algorithm to skip the active transition when the page is hidden. See issue 9543.
- 文書~要素~用の新たな状態を捕捉するときに`~snapshot包含塊$を利用するようにした。 ( `10177$issue ) ◎ Use snapshot containing block when capturing new state for document element. See issue #10177.
-
`ViewTransitionUpdateCallback$I【!updateDOMCallback】 ~promiseを配送するための~algoを修正した。
【 “~promiseを配送する” のような用法は定義されていない。 この項目が追加された少し前の更新による[ `更新~callback済み時の~promise$vT を解決する時機( `10302$issue ) ]を指すように思われる。 】
◎ Fix algorithm for dispatching updateDOMCallback promise. - ~view遷移~名の視野を`~tree文脈$も合致するものに限るようにした。 ( `10145$issue ) ◎ Scope view transition names to matching tree context. See issue 10145.
- 要素の代わりに名前【`~tree視野な名前$】と照合するよう視野-法を修正した。 ( `10145$issue ) ◎ Fix scoping to match name instead of element. See issue 10145.
- 表示域から外れた要素の描画~特性に関する注記を追加した。 ( `8282$issue ) ◎ Add a rendering characteristics note about out-of-viewport elements. See issue 8282.
- 【`更新~callbackを~callする$において、】 %遷移 の`相$vT を設定してから %遷移 の`更新~callback$vTを呼出すよう,順序を入れ替えた。 ( `10822$issue ) ◎ Swap the order of invoking the update callback and setting the phase. See issue 10822.
- `2022年 5月 25日 作業草案@~TR/2023/WD-css-view-transitions-1-20230525/$ からの変更点 ◎ Changes from 2022-05-25 Working Draft
- `view-transition-new()$pe 用の~UA~stylesheetにおける誤記を修正した。 ( `pull #8879@https://github.com/w3c/csswg-drafts/pull/8879$ ) ◎ Fix typo in ::view-transition-new user agent style sheet. See PR.
- `2022年 11月 24日 作業草案@~TR/2022/WD-css-view-transitions-1-20221124/$ からの変更点 ◎ Changes from 2022-11-24 Working Draft
- ~pointer~event【の~target】は、 描画が抑止されるときは,文書~要素に解決されるようにした。 ( `7797$issue ) ◎ Pointer events resolve to the documentElement when rendering is suppressed. See issue 7797.
- 遷移に関与している要素に対し,描画~拘束を追加した。 ( `8139$issue, `7882$issue ) ◎ Add rendering constraints to elements participating in a transition. See issue 8139 and issue 7882.
- ~HTMLに特有なものを~UA~stylesheetから除去した — ~SVG`文書$においても `ViewTransition$I を~supportするため。 ◎ Remove html specifics from UA stylesheet to support ViewTransitions on SVG Documents.
- `updateDOMCallback^I を `ViewTransitionUpdateCallback$I に改称した。 ( `8144$issue ) ◎ Rename updateDOMCallback to ViewTransitionUpdateCallback. See issue 8144.
- ~snapshot表示域を`~snapshot包含塊$に改称した。 ◎ Rename snapshot viewport to snapshot containing block.
- 表示域~sizeが変化した場合、 遷移を飛ばすようにした。 ( `8045$issue ) ◎ Skip the transition if viewport size changes. See issue 8045.
- `only-child$ps 用の~supportを追加した。 ( `8057$issue ) ◎ Add support for :only-child. See issue 8057.
- `疑似要素~根$の下で疑似要素たちが成す~treeの概念を追加した。 ( `8113$issue ) ◎ Add concept of a tree of pseudo-elements under pseudo-element root. See issue 8113.
- 遷移を飛ばすときは、 `ViewTransitionUpdateCallback$I は, 同期的にではなく自前の~task内で~callされるようにした。 ( `7904$issue ◎ When skipping a transition, the ViewTransitionUpdateCallback is called in own task rather than synchronously. See issue 7904
- 画像を捕捉するときは、 少なくとも表示域に入る部分は捕捉されるベキである — 必要なら縮小して。 ( `8561$issue ) ◎ When capturing images, at least the in-viewport part of the image should be captured, downscale if needed. See issue 8561.
- 捕捉された画像に対する`~ink~overflow$の適用-法を`実装定義$にして、 画像の`生来な~size$には影響しないようにした。 ( `8597$issue ) ◎ Applying the ink overflow to the captured image is implementation defined, and doesn’t affect the image’s natural size. See issue 8597.
- 断片化された要素は、 ~view遷移には関与しないようにした。 ( `8339$issue ) ◎ Fragmented elements don’t participate in view transitions. See issue 8339.
- “~snapshot根” を “~snapshot包含塊” に改称した。 それを子孫~用の[ `絶対~位置決め包含塊$, `固定d位置決め包含塊$ ]になるようにした。 ( `8505$issue ) ◎ Rename "snapshot root" to "snapshot containing block", and make it an absolute positioning containing block and a fixed positioning containing block for its descendants. See issue 8505.
- `2022年 10月 25日 最初の公な作業草案@~TR/2022/WD-css-view-transitions-1-20221025/$ からの変更点 ◎ Changes from 2022-10-25 Working Draft (FPWD)
- `動的な~view遷移~stylesheet$docの概念を追加した — 動的に生成され, 現在の`文書$に視野が絞られた~UA~style用に。 ◎ Add dynamic view transition style sheet concept for dynamically generated UA styles scoped to the current Document.
- ~snapshot表示域の概念を追加した。 ( `7859$issue ) ◎ Add snapshot viewport concept. See issue 7859.
- 遷移を飛ばすときに,~promiseがいつ[ 解決される/却下される ]かを明確化した。 ( `7956$issue ) ◎ Clarify timing for resolving/rejecting promises when skipping the transition. See issue 7956.
-
[
`content-visibility^p: `auto^v
を伴い,自身の内容を飛ばす要素 ]の子孫【!under】は、 無視するようにした。 ( `7874$issue ) ◎ Elements under a content-visibility:auto element that skips its contents are ignored. See issue 7874. - 疑似要素~DOM上の~UA~styleは、 開発者から観測-可能な~API用に, 作者~DOMとの同期cを~~保つようにした。 ( `7812$issue ) ◎ UA styles on the pseudo-DOM stay in sync with author DOM for any developer observable API. See issue 7812.
- `updateCallback$V の間は、 描画を抑止するようにした。 ( `7784$issue ) ◎ Suppress rendering during updateCallback. See issue 7784.
- 新-状態【!新たな`文書$】~内の要素の[ ~size/位置 ]における変化は、 新たな~UA~animation~keyframeを生成するようにした。 ( `7813$issue ) ◎ Changes in size/position of elements in the new Document generate new UA animation keyframes. See issue 7813.
- `-ua-^css 接頭辞を利用して、 ~keyframeの視野が~UA~stylesheetに絞られるようにした。 ( `7560$issue ) ◎ Scope keyframes to user agent stylesheets using -ua- prefix. See issue 7560.
- 各 疑似要素の名前を `view-transition-*^pe に更新した。 ( `7960$issue ) ◎ Update pseudo element names to view-transition*. See issue 7960.
- 疑似要素~用の選択子~構文を更新した。 ( `7788$issue ) ◎ Update selector syntax for pseudo-elements. See issue 7788.
- [ § ~securityの考慮点, § ~privacyの考慮点 ]を追加した。 ◎ Add sections for security/privacy considerations.