CSS View Transitionsã®ç¶æ ç¶æãšã¢ãã¡ãŒã·ã§ã³åŸ©å ã«çŠç¹ãåœãŠããã©ãŠã¶ã®æ»ã/é²ãããã²ãŒã·ã§ã³ã§ãã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒäœéšãæ§ç¯ããæ¹æ³ã解説ããŸãã
CSS View Transitionã®ç¶æ ç¶æïŒã¢ãã¡ãŒã·ã§ã³ç¶æ ã®åŸ©å
CSS View Transitionsã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãç¶æ éãã¹ã ãŒãºã§èŠèŠçã«é åçãªãã©ã³ãžã·ã§ã³ã§ã€ãªãããšãå¯èœã«ããã匷åãªæ°æ©èœã§ããåæå®è£ ã§ã¯åºæ¬çãªãã©ã³ãžã·ã§ã³ã«çŠç¹ãåœãŠãããŠããŸããããçã«æŽç·ŽããããŠãŒã¶ãŒäœéšãåµåºããããã«ã¯ãç¹ã«ããŒãžãã»ã¯ã·ã§ã³éãè¡ãæ¥ããéã®ãç¶æ ã®æ°žç¶æ§ãšã¢ãã¡ãŒã·ã§ã³ã®åŸ©å ãæ±ãããšãéåžžã«éèŠã§ãã
ç¶æ ç¶æã®å¿ èŠæ§ãçè§£ãã
ãŠãŒã¶ãŒããã©ãã®ã£ã©ãªãŒãé²èЧããŠãããšæ³åããŠãã ãããã¯ãªãã¯ãããã³ã«ãããããªã¢ãã¡ãŒã·ã§ã³ã§æ¬¡ã®ç»åã«é·ç§»ããŸãããããããŠãŒã¶ãŒããã©ãŠã¶ã®ãæ»ãããã¿ã³ãã¯ãªãã¯ããå Žåãã¢ãã¡ãŒã·ã§ã³ãéåçãããåã®ç»åã®è¡šç€ºç¶æ ã«æ»ãããšãæåŸ ããã§ããããç¶æ ã®æ°žç¶æ§ããªããã°ããã©ãŠã¶ã¯ãã©ã³ãžã·ã§ã³ãªãã§åã«åã®ããŒãžã«ãžã£ã³ãããŠããŸããéåãéåãã§äžè²«æ§ã®ãªãäœéšã«ãªã£ãŠããŸããŸãã
ç¶æ ã®æ°žç¶åã¯ãã¢ããªã±ãŒã·ã§ã³ãUIã®ä»¥åã®ç¶æ ãèšæ¶ããã¹ã ãŒãºã«ãã®ç¶æ ã«æ»ããããã«ããŸããããã¯ç¹ã«ãããŒãžå šäœã®ãªããŒããªãã«DOMãæäœããããšãå€ãã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒã«ãããŠéèŠã§ãã
åºæ¬çãªView TransitionsïŒãããã
ç¶æ
ã®æ°žç¶åã«ã€ããŠæãäžããåã«ãCSS View Transitionsã®åºæ¬ãç°¡åã«ããããããŸããããäžæ žãšãªãã¡ã«ããºã ã¯ãç¶æ
ã倿Žããã³ãŒããdocument.startViewTransition()
ã§ã©ããããããšã§ãã
document.startViewTransition(() => {
// DOMãæ°ããç¶æ
ã«æŽæ°
updateTheDOM();
});
ãããšããã©ãŠã¶ã¯é¢é£ããDOMèŠçŽ ã®å€ãç¶æ
ãšæ°ããç¶æ
ãèªåçã«ãã£ããã£ããCSSã䜿çšããŠãããã®éã®ãã©ã³ãžã·ã§ã³ãã¢ãã¡ãŒã·ã§ã³åããŸããã¢ãã¡ãŒã·ã§ã³ã¯ãtransition-behavior: view-transition;
ã®ãããªCSSããããã£ã䜿ã£ãŠã«ã¹ã¿ãã€ãºã§ããŸãã
課é¡ïŒãæ»ããããã²ãŒã·ã§ã³ã§ã®ã¢ãã¡ãŒã·ã§ã³ç¶æ ã®ä¿æ
æå€§ã®èª²é¡ã¯ããŠãŒã¶ãŒãéåžžãã©ãŠã¶ã®æ»ããã¿ã³ãã¯ãªãã¯ããããšã§ãæ»ããããã²ãŒã·ã§ã³ã€ãã³ããããªã¬ãŒãããšãã«çºçããŸãããã©ãŠã¶ã®ããã©ã«ãã®åäœã¯ããã°ãã°ãã£ãã·ã¥ããããŒãžã埩å ããããšã§ãããããã«ããView Transition APIã广çã«ãã€ãã¹ãããŠããŸããŸããããããåè¿°ã®éåãéåãã§åã®ç¶æ ã«ãžã£ã³ãããã¯ããåå ãšãªããŸãã
ã¢ãã¡ãŒã·ã§ã³ç¶æ ã埩å ããããã®è§£æ±ºç
ãã®èª²é¡ã«å¯ŸåŠããã¹ã ãŒãºãªã¢ãã¡ãŒã·ã§ã³ç¶æ ã®åŸ©å ã確å®ã«ããããã«ãããã€ãã®æŠç¥ãæ¡çšããããšãã§ããŸãã
1. History APIãšpopstate
ã€ãã³ãã®äœ¿çš
History APIã¯ããã©ãŠã¶ã®å±¥æŽã¹ã¿ãã¯ããã现ããå¶åŸ¡ããæ©èœãæäŸããŸããhistory.pushState()
ã§æ°ããç¶æ
ãå±¥æŽã¹ã¿ãã¯ã«ããã·ã¥ããpopstate
ã€ãã³ãããªãã¹ã³ããããšã§ããæ»ããããã²ãŒã·ã§ã³ãã€ã³ã¿ãŒã»ããããéåçã®View Transitionãããªã¬ãŒã§ããŸãã
äŸïŒ
// æ°ããç¶æ
ã«ããã²ãŒããã颿°
function navigateTo(newState) {
document.startViewTransition(() => {
updateTheDOM(newState);
history.pushState(newState, null, newState.url);
});
}
// popstateã€ãã³ãããªãã¹ã³ãã
window.addEventListener('popstate', (event) => {
const state = event.state;
if (state) {
document.startViewTransition(() => {
updateTheDOM(state); // 以åã®ç¶æ
ã«æ»ã
});
}
});
ãã®äŸã§ã¯ãnavigateTo()
ãDOMãæŽæ°ããæ°ããç¶æ
ãå±¥æŽã¹ã¿ãã¯ã«ããã·ã¥ããŸãããããŠãpopstate
ã€ãã³ããªã¹ããŒããæ»ããããã²ãŒã·ã§ã³ãã€ã³ã¿ãŒã»ããããå¥ã®View Transitionãããªã¬ãŒããŠä»¥åã®ç¶æ
ã«æ»ããŸããããã§ã®éµã¯ã`history.pushState`ãä»ããŠããã·ã¥ãããstate
ãªããžã§ã¯ãã«ã`updateTheDOM`颿°ã§DOMã®ä»¥åã®ç¶æ
ãåäœæããã®ã«ååãªæ
å ±ãä¿åããããšã§ããããã«ã¯ã以åã®ãã¥ãŒãã¬ã³ããªã³ã°ããããã«äœ¿çšãããé¢é£ããŒã¿ãä¿åããããšãå«ãŸããããšããããããŸãã
2. Page Visibility APIã®æŽ»çš
Page Visibility APIã䜿çšãããšãããŒãžã衚瀺ããããé衚瀺ã«ãªã£ããããã¿ã€ãã³ã°ãæ€åºã§ããŸãããŠãŒã¶ãŒãããŒãžããé¢ãããšãããŒãžã¯é衚瀺ã«ãªããŸããæ»ã£ãŠãããšãåã³è¡šç€ºãããŸãããã®APIã䜿çšããŠãããŒãžãé衚瀺ã«ãªã£ãåŸã«è¡šç€ºãããããã«ãªã£ããšãã«ãéåçã®View Transitionãããªã¬ãŒã§ããŸãã
äŸïŒ
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'visible') {
document.startViewTransition(() => {
// ãã£ãã·ã¥ãããããŒã¿ã«åºã¥ããŠä»¥åã®ç¶æ
ã«æ»ã
revertToPreviousState();
});
}
});
ãã®ã¢ãããŒãã¯ãããŒãžãé衚瀺ã«ãªãåã«DOMã®ä»¥åã®ç¶æ
ããã£ãã·ã¥ããããšã«äŸåããŠããŸããrevertToPreviousState()
颿°ã¯ããã®ãã£ãã·ã¥ãããããŒã¿ã䜿çšããŠä»¥åã®ãã¥ãŒãåäœæããéãã©ã³ãžã·ã§ã³ãéå§ããŸããããã¯History APIã¢ãããŒããããå®è£
ãç°¡åãªå ŽåããããŸããããã£ãã·ã¥ãããããŒã¿ã®æ
éãªç®¡çãå¿
èŠã§ãã
3. History APIãšSession Storageã®çµã¿åãã
ããè€éãªã·ããªãªã§ã¯ãã¢ãã¡ãŒã·ã§ã³é¢é£ã®ããŒã¿ãä¿æããããã«History APIãšã»ãã·ã§ã³ã¹ãã¬ãŒãžãçµã¿åãããå¿ èŠããããããããŸãããã»ãã·ã§ã³ã¹ãã¬ãŒãžã䜿çšãããšãåããã©ãŠã¶ã¿ãå ã§ã®ããŒãžããã²ãŒã·ã§ã³ããŸããã§ããŒã¿ãæ°žç¶åã§ããŸããã¢ãã¡ãŒã·ã§ã³ã®ç¶æ ïŒäŸïŒçŸåšã®ãã¬ãŒã ã鲿ïŒãã»ãã·ã§ã³ã¹ãã¬ãŒãžã«ä¿åãããŠãŒã¶ãŒãããŒãžã«æ»ã£ãŠãããšãã«ãããååŸã§ããŸãã
äŸïŒ
// ããã²ãŒã·ã§ã³ã§é¢ããåã«ïŒ
sessionStorage.setItem('animationState', JSON.stringify(currentAnimationState));
// ããŒãžã®èªã¿èŸŒã¿æãŸãã¯popstateã€ãã³ãæïŒ
const animationState = JSON.parse(sessionStorage.getItem('animationState'));
if (animationState) {
document.startViewTransition(() => {
// ã¢ãã¡ãŒã·ã§ã³ç¶æ
ã埩å
ããéãã©ã³ãžã·ã§ã³ãããªã¬ãŒãã
restoreAnimationState(animationState);
});
}
ãã®äŸã§ã¯ãããã²ãŒã·ã§ã³ã§é¢ããåã«currentAnimationState
ïŒã¢ãã¡ãŒã·ã§ã³ã®é²æãçŸåšã®ãã¬ãŒã ããã®ä»ã®é¢é£ããŒã¿ãå«ãããšãã§ããïŒãã»ãã·ã§ã³ã¹ãã¬ãŒãžã«ä¿åããŸããããŒãžãèªã¿èŸŒãŸããããpopstate
ã€ãã³ããããªã¬ãŒããããšãã¢ãã¡ãŒã·ã§ã³ã®ç¶æ
ãã»ãã·ã§ã³ã¹ãã¬ãŒãžããååŸãããã¢ãã¡ãŒã·ã§ã³ã以åã®ç¶æ
ã«åŸ©å
ããããã«äœ¿çšãããŸãã
4. ãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã®äœ¿çš
å€ãã®ææ°ã®JavaScriptãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªïŒäŸïŒReactãVue.jsãAngularïŒã¯ãç¶æ 管çãšããã²ãŒã·ã§ã³ãåŠçããããã®çµã¿èŸŒã¿ã¡ã«ããºã ãæäŸããŠããŸãããããã®ãã¬ãŒã ã¯ãŒã¯ã¯ããã°ãã°History APIã®è€éããæœè±¡åããç¶æ ãšãã©ã³ãžã·ã§ã³ã管çããããã®ããé«ã¬ãã«ã®APIãæäŸããŸãããã¬ãŒã ã¯ãŒã¯ã䜿çšããå Žåã¯ãç¶æ ã®æ°žç¶æ§ãšã¢ãã¡ãŒã·ã§ã³ã®åŸ©å ã®ããã«ããã®çµã¿èŸŒã¿æ©èœã掻çšããããšãæ€èšããŠãã ããã
ããšãã°ãReactã§ã¯ãReduxãZustandã®ãããªç¶æ 管çã©ã€ãã©ãªã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãä¿åããããŒãžããã²ãŒã·ã§ã³ããŸããã§æ°žç¶åããããšãã§ããŸãããã®åŸãReact Routerã䜿çšããŠããã²ãŒã·ã§ã³ã管çããã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã«åºã¥ããŠView Transitionsãããªã¬ãŒããããšãã§ããŸãã
ç¶æ ç¶æãå®è£ ããããã®ãã¹ããã©ã¯ãã£ã¹
- ä¿åããããŒã¿éãæå°éã«ããïŒ ä»¥åã®ç¶æ ãåäœæããããã«å¿ èŠãªæ¬è³ªçãªããŒã¿ã®ã¿ãä¿åããŸãã倧éã®ããŒã¿ãä¿åãããšãããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
- å¹ççãªããŒã¿ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã䜿çšããïŒ ã»ãã·ã§ã³ã¹ãã¬ãŒãžã«ããŒã¿ãä¿åããéã¯ã
JSON.stringify()
ã®ãããªå¹ççãªã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã¡ãœããã䜿çšããŠãã¹ãã¬ãŒãžãµã€ãºãæå°éã«æããŸãã - ãšããžã±ãŒã¹ãåŠçããïŒ ãŠãŒã¶ãŒãåããŠããŒãžã«ã¢ã¯ã»ã¹ããå ŽåïŒã€ãŸãã以åã®ç¶æ ãååšããªãå ŽåïŒãªã©ã®ãšããžã±ãŒã¹ãèæ ®ããŸãã
- 培åºçã«ãã¹ãããïŒ ç°ãªããã©ãŠã¶ãããã€ã¹ã§ãç¶æ ã®æ°žç¶æ§ãšã¢ãã¡ãŒã·ã§ã³ã®åŸ©å ã¡ã«ããºã ããã¹ãããŸãã
- ã¢ã¯ã»ã·ããªãã£ãèæ ®ããïŒ ãã©ã³ãžã·ã§ã³ãé害ãæã€ãŠãŒã¶ãŒã«ãšã£ãŠã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŸãããã©ã³ãžã·ã§ã³ã劚ãã«ãªãå Žåã¯ãã¢ããªã±ãŒã·ã§ã³ãããã²ãŒãããããã®ä»£æ¿æ¹æ³ãæäŸããŸãã
ã³ãŒãäŸïŒããã«è©³ãã
以åã®äŸãããã詳现ãªã³ãŒãã¹ããããã§æ¡åŒµããŠã¿ãŸãããã
äŸ1ïŒè©³çްãªç¶æ ãæã€History API
// åæç¶æ
let currentState = {
page: 'home',
data: {},
scrollPosition: 0 // äŸïŒã¹ã¯ããŒã«äœçœ®ãä¿å
};
function updateTheDOM(newState) {
// newStateã«åºã¥ããŠDOMãæŽæ°ïŒå®éã®ããžãã¯ã«çœ®ãæããŠãã ããïŒ
console.log('Updating DOM to:', newState);
document.getElementById('content').innerHTML = `Navigated to: ${newState.page}
`;
window.scrollTo(0, newState.scrollPosition); // ã¹ã¯ããŒã«äœçœ®ã埩å
}
function navigateTo(page) {
document.startViewTransition(() => {
// 1. DOMãæŽæ°
currentState = {
page: page,
data: {},
scrollPosition: 0 // ã¹ã¯ããŒã«ããªã»ããããŸãã¯ä¿æ
};
updateTheDOM(currentState);
// 2. æ°ããç¶æ
ãå±¥æŽã«ããã·ã¥
history.pushState(currentState, null, '#' + page); // ç°¡åãªã«ãŒãã£ã³ã°ã®ããã«ããã·ã¥ã䜿çš
});
}
window.addEventListener('popstate', (event) => {
document.startViewTransition(() => {
// 1. 以åã®ç¶æ
ã«æ»ã
const state = event.state;
if (state) {
currentState = state;
updateTheDOM(currentState);
} else {
// ååããŒãžèªã¿èŸŒã¿ãåŠçïŒãŸã ç¶æ
ãªãïŒ
navigateTo('home'); // ãŸãã¯å¥ã®ããã©ã«ãç¶æ
}
});
});
// ååèªã¿èŸŒã¿ïŒæ»ããã¿ã³ã®åé¡ãé²ãããã«åæç¶æ
ã眮æ
history.replaceState(currentState, null, '#home');
// 䜿çšäŸïŒ
document.getElementById('link-about').addEventListener('click', (e) => {
e.preventDefault();
navigateTo('about');
});
document.getElementById('link-contact').addEventListener('click', (e) => {
e.preventDefault();
navigateTo('contact');
});
解説ïŒ
currentState
ãªããžã§ã¯ãã¯ãçŸåšã®ããŒãžãä»»æã®ããŒã¿ãã¹ã¯ããŒã«äœçœ®ãªã©ãããå ·äœçãªæ å ±ãä¿æããããã«ãªããŸãããããã«ãããããå®å šãªç¶æ 埩å ãå¯èœã«ãªããŸããupdateTheDOM
颿°ã¯DOMã®æŽæ°ãã·ãã¥ã¬ãŒãããŸãããã¬ãŒã¹ãã«ããŒã®ããžãã¯ãå®éã®DOMæäœã³ãŒãã«çœ®ãæããŠãã ãããéèŠãªã®ã¯ãã¹ã¯ããŒã«äœçœ®ã埩å ããããšã§ãã- ååèªã¿èŸŒã¿æã®
history.replaceState
ã¯ãæ»ããã¿ã³ãååèªã¿èŸŒã¿æã«ããã«ç©ºçœã®ããŒãžã«æ»ãã®ãé²ãããã«éèŠã§ãã - ãã®äŸã§ã¯ãç°¡æœãã®ããã«ããã·ã¥ããŒã¹ã®ã«ãŒãã£ã³ã°ã䜿çšããŠããŸããå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããå ç¢ãªã«ãŒãã£ã³ã°ã¡ã«ããºã ã䜿çšããããšã«ãªãã§ãããã
äŸ2ïŒãã£ãã·ã³ã°ã䌎ãPage Visibility API
let cachedDOM = null;
function captureDOM() {
// DOMã®é¢é£éšåãã¯ããŒã³ãã
const contentElement = document.getElementById('content');
cachedDOM = contentElement.cloneNode(true); // ãã£ãŒãã¯ããŒã³
}
function restoreDOM() {
if (cachedDOM) {
const contentElement = document.getElementById('content');
contentElement.parentNode.replaceChild(cachedDOM, contentElement); // ãã£ãã·ã¥ãããããŒãžã§ã³ã«çœ®æ
cachedDOM = null; // ãã£ãã·ã¥ãã¯ãªã¢
} else {
console.warn('No cached DOM to restore.');
}
}
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'hidden') {
captureDOM(); // é衚瀺ã«ãªãåã«DOMããã£ããã£
}
if (document.visibilityState === 'visible') {
document.startViewTransition(() => {
restoreDOM(); // 衚瀺ãããããã«ãªã£ããšãã«DOMã埩å
});
}
});
// 䜿çšäŸïŒããã²ãŒã·ã§ã³ãã·ãã¥ã¬ãŒãïŒ
function navigateAway() {
document.getElementById('content').innerHTML = 'Navigating away...
';
// é
å»¶ãã·ãã¥ã¬ãŒãïŒäŸïŒAJAXãªã¯ãšã¹ãïŒ
setTimeout(() => {
//å®éã®ã¢ããªã§ã¯ãããã§å¥ã®ããŒãžã«ããã²ãŒããããããããŸããã
console.log("Simulated navigation away.");
}, 1000);
}
document.getElementById('navigate').addEventListener('click', navigateAway);
解説ïŒ
- ãã®äŸã¯DOMã®ã¯ããŒã³ãšåŸ©å ã«çŠç¹ãåœãŠãŠããŸããããã¯ç°¡ç¥åãããã¢ãããŒãã§ãããç¹ã«è€éãªSPAãªã©ããã¹ãŠã®ã·ããªãªã«é©ããŠããããã§ã¯ãªããããããŸããã
captureDOM
颿°ã¯#content
èŠçŽ ãã¯ããŒã³ããŸãããã¹ãŠã®åèŠçŽ ãšãã®å±æ§ããã£ããã£ããããã«ã¯ããã£ãŒãã¯ããŒã³ãäžå¯æ¬ ã§ããrestoreDOM
颿°ã¯ãçŸåšã®#content
ããã£ãã·ã¥ãããããŒãžã§ã³ã«çœ®ãæããŸããnavigateAway
颿°ã¯ããã²ãŒã·ã§ã³ãã·ãã¥ã¬ãŒãããŸãïŒéåžžãããã¯å®éã®ããã²ãŒã·ã§ã³ããžãã¯ã«çœ®ãæããŸãïŒã
é«åºŠãªèæ ®äºé
1. ã¯ãã¹ãªãªãžã³ãã©ã³ãžã·ã§ã³
View Transitionsã¯ãäž»ã«åäžãªãªãžã³å ã§ã®ãã©ã³ãžã·ã§ã³ã®ããã«èšèšãããŠããŸããã¯ãã¹ãªãªãžã³ãã©ã³ãžã·ã§ã³ïŒäŸïŒç°ãªããã¡ã€ã³éã®ãã©ã³ãžã·ã§ã³ïŒã¯äžè¬çã«ããè€éã§ãããiframeããµãŒããŒãµã€ãã¬ã³ããªã³ã°ãªã©ã®ç°ãªãã¢ãããŒããå¿ èŠã«ãªãå ŽåããããŸãã
2. ããã©ãŒãã³ã¹ã®æé©å
View Transitionsã¯ãæ éã«å®è£ ããªããšããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã以äžã®æ¹æ³ã§ãã©ã³ãžã·ã§ã³ãæé©åããŠãã ããïŒ
- ãã©ã³ãžã·ã§ã³å¯Ÿè±¡ã®DOMèŠçŽ ã®ãµã€ãºãæå°éã«æããïŒ DOMèŠçŽ ãå°ããã»ã©ããã©ã³ãžã·ã§ã³ã¯éããªããŸãã
- ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã䜿çšããïŒ ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãããªã¬ãŒããCSSããããã£ïŒäŸïŒ
transform: translate3d(0, 0, 0);
ïŒã䜿çšããŸãã - ãã©ã³ãžã·ã§ã³ããããŠã³ã¹ããïŒ ãŠãŒã¶ãŒãããŒãžéãçŽ æ©ãããã²ãŒããããšãã«éå°ãªãã©ã³ãžã·ã§ã³ãé¿ããããããã©ã³ãžã·ã§ã³ãããªã¬ãŒããããžãã¯ããããŠã³ã¹ããŸãã
3. ã¢ã¯ã»ã·ããªãã£
View Transitionsãé害ãæã€ãŠãŒã¶ãŒã«ãšã£ãŠã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ããããã©ã³ãžã·ã§ã³ã劚ãã«ãªãå Žåã¯ãã¢ããªã±ãŒã·ã§ã³ãããã²ãŒãããããã®ä»£æ¿æ¹æ³ãæäŸããŸããã¹ã¯ãªãŒã³ãªãŒããŒã«è¿œå ã®ã³ã³ããã¹ããæäŸããããã«ãARIA屿§ã®äœ¿çšãæ€èšããŠãã ããã
å®äžçã®äŸãšãŠãŒã¹ã±ãŒã¹
- eã³ããŒã¹ã®ååã®ã£ã©ãªãŒïŒ ååç»åéã®ã¹ã ãŒãºãªãã©ã³ãžã·ã§ã³ã
- ãã¥ãŒã¹èšäºïŒ èšäºã®ç°ãªãã»ã¯ã·ã§ã³éã®ã·ãŒã ã¬ã¹ãªããã²ãŒã·ã§ã³ã
- ã€ã³ã¿ã©ã¯ãã£ããªããã·ã¥ããŒãïŒ ç°ãªãããŒã¿å¯èŠåéã®æµåçãªãã©ã³ãžã·ã§ã³ã
- Webã¢ããªã«ãããã¢ãã€ã«ã¢ããªé¢šã®ããã²ãŒã·ã§ã³ïŒ ãã©ãŠã¶å ã§ãã€ãã£ãã¢ããªã®ãã©ã³ãžã·ã§ã³ãã·ãã¥ã¬ãŒãã
çµè«
CSS View Transitionsã¯ãç¶æ ã®æ°žç¶æ§ãšã¢ãã¡ãŒã·ã§ã³åŸ©å ã®ãã¯ããã¯ãšçµã¿åãããããšã§ãWebã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒäœéšãåäžããã匷åãªæ¹æ³ãæäŸããŸãããã©ãŠã¶ã®å±¥æŽãæ éã«ç®¡çããPage Visibility APIã®ãããªAPIãæŽ»çšããããšã§ãéçºè ã¯Webã¢ããªã±ãŒã·ã§ã³ãããã¬ã¹ãã³ã·ãã§é åçã«æãããããã·ãŒã ã¬ã¹ã§èŠèŠçã«é åçãªãã©ã³ãžã·ã§ã³ãäœæã§ããŸããView Transition APIãæçããããåºããµããŒããããããã«ãªãã«ã€ããŠãããã¯ééããªãçŸä»£ã®Webéçºã«ãšã£ãŠäžå¯æ¬ ãªããŒã«ã«ãªãã§ãããã