ãã¥ã¼é·ç§»åã®ä½¿ç¨
ãã¥ã¼é·ç§»åã¯ãã¢ã¯ãã£ããªãã¥ã¼é·ç§»ã«å¯¾ãã¦ç°ãªãåãæå®ããããã®ä»çµã¿ãæä¾ãã¾ããããã«ãããCSS ã使ç¨ãã¦ãæå®ãããé·ç§»åã«å¿ãã¦ãDOM è¦ç´ ã®ã³ã³ãã³ããæ´æ°ãããéã«ç°ãªãã¢ãã¡ã¼ã·ã§ã³ãé©ç¨ãããã¨ãã§ãã¾ããä¾ãã°ãç»åã®ã£ã©ãªã¼ã¢ããªã«ããã¦ã表示ããã¦ããç»åã夿´ãããéãã·ã¼ã±ã³ã¹ãåå¾ã«ç§»åãã¦ããããç»åãåé¤ãã¦ãããããããã¯ã·ã¼ã±ã³ã¹ã«ç»åã追å ãã¦ãããã«ãã£ã¦ã <img> è¦ç´ ã«ç°ãªãã¢ãã¡ã¼ã·ã§ã³ãé©ç¨ãããå ´åãªã©ãèãããã¾ãã
ãã®è¨äºã§ã¯ãå䏿æ¸å ã§ã®ãã¥ã¼é·ç§»ããã³ææ¸éã§ã®ãã¥ã¼é·ç§»ã«ããã¦ãåãæ´»ç¨ããæ¹æ³ã«ã¤ãã¦è§£èª¬ãã¾ãã
ä¾
以ä¸ã®3ã¤ã®ä¾ã«å«ã¾ãã¦ããã³ã¼ããé ã追ã£ã¦è§£èª¬ãããã¨ã§ããã¥ã¼é·ç§»ã®åã«ã¤ãã¦ç¥ã£ã¦ããã¹ããã¨ã説æãã¾ãã
- SPA ã®é·ç§»åã®ã£ã©ãªã¼ (ã½ã¼ã¹ã³ã¼ã): SPA ç»åã®ã£ã©ãªã¼ã§ããåã¸ããã¿ã³ããæ¬¡ã¸ããã¿ã³ãã¾ãã¯ç»åãç´æ¥ã¯ãªãã¯ãã¦ç§»åããéã«ãé·ç§»åãé©ç¨ãã¦ç°ãªãé·ç§»ã¢ãã¡ã¼ã·ã§ã³ã表示ãã¾ãã
- MPA ã®é·ç§»åã®ä¾ (ã½ã¼ã¹ã³ã¼ã): ããããã®ãã¼ã¸ã«1ã¤ã®ç« ãåé²ãããã¹ãã¼ãªã¼ã¢ããªã§ããé·ç§»åãæå®ãã¦ããã¼ã¸éã§ãã¥ã¼é·ç§»ã®ã¢ãã¡ã¼ã·ã§ã³ã鏿çã«é©ç¨ããæ¹æ³ã示ãã¦ãã¾ãã
- MPA ã®è¤æ°ã®é·ç§»åã®ä¾ (ã½ã¼ã¹ã³ã¼ã): ååã®ä¾ãåºã«ããã¼ã¸ãã¨ã«ç°ãªãé·ç§»åãé©ç¨ãã¦ã鏿çã«ç°ãªããã¥ã¼é·ç§»ã®ã¢ãã¡ã¼ã·ã§ã³ã表示ããæ¹æ³ã示ãã¾ããé·ç§»åã¯ãããã²ã¼ã·ã§ã³ä¸ã« JavaScript ã«ãã£ã¦åçã«æ±ºå®ããã¾ãã
ã³ã¼ãå ¨ä½ã®ä»çµã¿ã«ã¤ãã¦ã¯èª¬æããããã¥ã¼é·ç§»ã«é¢é£ããé¨åã®ã¿ã解説ãã¾ããããããã®é¨åãã©ã®ãããªå½¹å²ãæããã¦ãããã«ã¤ãã¦ã¯ãã³ã¼ãå ã«ã³ã¡ã³ããè¨è¿°ãã¦ãã¾ãã
SPA ãã¥ã¼é·ç§»ã§ã®åã®ä½¿ç¨
SPA ã®ãã¥ã¼é·ç§»ã«ãã¾ãã¾ãªåãé©ç¨ããã«ã¯ãé·ç§»ãéå§ãã Document.startViewTransition() ã¡ã½ããã®å¼ã³åºãã«ãååãæ¸¡ãã¾ãããã®ã¡ã½ããã¯ãã¢ãã¡ã¼ã·ã§ã³ãããã DOM ã®æ´æ°ãå¦çãã update ã³ã¼ã«ããã¯é¢æ°ã¨ãååã表ãæååãå«ã types é
åãæ ¼ç´ãããªãã¸ã§ã¯ãã弿°ã¨ãã¦åãåããã¨ãã§ãã¾ãã
SPA é·ç§»åã®ã£ã©ãªã¼ããä¾ãè¦ã¦ã¿ã¾ãããã
document.startViewTransition({
update() {
displayedImage.src = `${baseURL}${images[newId].filename}`;
displayedImage.alt = images[newId].alt;
displayedImage.setAttribute("data-id", newId);
caption.textContent = images[newId].alt;
},
types: ["backwards"],
});
ãåã¸ããã¿ã³ãæ¼ãããã¨ããã®ã³ã¼ããå®è¡ããã¾ããã³ã¼ã«ããã¯é¢æ°ã¯ãã·ã¼ã±ã³ã¹å
ã®åã®ç»åã表示ããããã«è¡¨ç¤ºä¸ã®ç»åãæ´æ°ãã¾ãï¼ä»£æ¿ããã¹ããã·ã¼ã±ã³ã¹çªå·ã表ã data-idãããã³ãã£ãã·ã§ã³ã®æ´æ°ãå«ã¿ã¾ãï¼ãã¾ããtypes é
åã¯ããã¥ã¼ã®é·ç§»ã backwards åã§å®è¡ããããã«æå®ãã¦ãã¾ãã
ã¡ã¢:
types é
åã§ãã¥ã¼é·ç§»ã«è¨å®ãããåã¯ãstartViewTransition() ã¡ã½ããã«ãã£ã¦è¿ããã ViewTransition ãªãã¸ã§ã¯ãã® types ããããã£ãéãã¦ã¢ã¯ã»ã¹ã§ãã¾ããtypes ããããã£ã¯ ViewTransitionTypeSet ã§ãããã㯠Set 風ãªãã¸ã§ã¯ãã§ãããclear()ãadd()ãdelete() ãªã©ã®ã¡ã½ããã使ç¨ãã¦ããã¥ã¼é·ç§»ã«é©ç¨ãããåãåçã«å¤æ´ãããã¨ãã§ãã¾ãã
CSS ã§ç¬èªã®ã¢ãã¡ã¼ã·ã§ã³ãé©ç¨
CSS ã§ã¯ã:active-view-transition ããã³ :active-view-transition-type() ã¨ããæ¬ä¼¼ã¯ã©ã¹ã使ç¨ãã¦ãã¢ã¯ãã£ããªãã¥ã¼é·ç§»ã®ã¹ã¿ã¤ã«ãã«ã¹ã¿ãã¤ãºã§ãã¾ãããããã¯ããããããã¥ã¼é·ç§»ãã¢ã¯ãã£ããªå ´åã«ä¸è´ããã»ã¬ã¯ã¿ã¼ãçæããããç¹å®ã®åã®ãã¥ã¼é·ç§»ãã¢ã¯ãã£ããªå ´åã«ã®ã¿ä¸è´ããã»ã¬ã¯ã¿ã¼ãçæããããããã¨ãå¯è½ã§ãã
ã¾ãã:active-view-transition ã使ç¨ãã¦é¸æãããããã¥ã¼é·ç§»åã«ä¾ããããã¥ã¼é·ç§»ãã¢ã¯ãã£ããªéã«é©ç¨ãããä¸é£ã®ã¹ã¿ã¤ã«ãå®ç¾©ãã¾ãããã®å
¥ãåã«ãªã£ããããã¯å
ã§ã¯ãææ¸ã® :root ã«å¯¾ã㦠view-transition-name ã®å¤ã¨ã㦠none ãé©ç¨ããææ¸ã®å¤§é¨åã®ãã¥ã¼é·ç§»ãç¡å¹ã«ãã¾ãããã®å¾ãview-transition-name ã®å¤ã¨ã㦠image 㨠caption ãããããã <img> è¦ç´ 㨠<figcaption> è¦ç´ ã«å¯¾ãã¦é©ç¨ãã¾ããããã«ããããããã®è¦ç´ ã® DOM ç¶æ
ã®å¤åãå¥ã
ã®ã¹ãããã·ã§ããã¨ãã¦ãã£ããã£ãããåå¥ã«ã¢ãã¡ã¼ã·ã§ã³ãé©ç¨ã§ããããã«ãªãã¾ãã
æå¾ã«ã::view-transition-old() ããã³ ::view-transition-new() æ¬ä¼¼è¦ç´ ã使ç¨ãã¦ãcaption ã®è¡¨ç¤ºåãæ¿ãæï¼è¡¨ç¤ºè§£é¤æããã³è¡¨ç¤ºæï¼ã«ç¹å®ã®ã¢ãã¡ã¼ã·ã§ã³ãé©ç¨ãã¾ãããããã®ã¢ãã¡ã¼ã·ã§ã³ã¯ãæå®ãããåã«é¢ãããã<figcaption> ã«é©ç¨ãããããã«ãã¾ãã
html:active-view-transition {
:root {
view-transition-name: none;
}
.displayed-img {
view-transition-name: image;
}
figcaption {
view-transition-name: caption;
}
&::view-transition-old(caption) {
animation-name: fade-out;
}
&::view-transition-new(caption) {
animation-name: fade-in;
animation-delay: 0.6s;
}
}
æ¬¡ã®æ®µéã§ã¯ãã¢ã¯ãã£ããªãã¥ã¼é·ç§»ã® type ã forwardsï¼ã次ã¸ããã¿ã³ãæ¼ãããå ´åï¼ãbackwardsï¼ãåã¸ããã¿ã³ãæ¼ãããå ´åããã¾ã㯠upwardsï¼ãµã ãã¤ã«ç»åãã¯ãªãã¯ãããå ´åï¼ã®ããããã«ãã£ã¦ãimage ã®é·åºãã¥ã¼ã¨é·å
¥ãã¥ã¼ã«ç°ãªãã¢ãã¡ã¼ã·ã§ã³ãé©ç¨ãã¾ããããã¯ã3 ã¤ã® :active-view-transition-type() ã«ã¼ã«ã»ããã使ç¨ãã¦è¡ããã¾ããåã«ã¼ã«ã»ããã¯ãããããã®åã«å¿ãã¦ãanimation-name ã« ::view-transition-old() ããã³ ::view-transition-new() æ¬ä¼¼è¦ç´ ã«ç°ãªãå¤ãé©ç¨ãã¾ãã
html:active-view-transition-type(forwards) {
&::view-transition-old(image) {
animation-name: slide-out-to-left;
}
&::view-transition-new(image) {
animation-name: slide-in-from-right;
}
}
html:active-view-transition-type(backwards) {
&::view-transition-old(image) {
animation-name: slide-out-to-right;
}
&::view-transition-new(image) {
animation-name: slide-in-from-left;
}
}
html:active-view-transition-type(upwards) {
&::view-transition-old(image) {
animation-name: slide-out-to-top;
}
&::view-transition-new(image) {
animation-name: slide-in-from-top;
animation-delay: 0.6s;
}
}
upwards åã«ããã ::view-transition-new(image) ã¢ãã¡ã¼ã·ã§ã³ã®å ´åãå¤ãã³ã³ãã³ããç»é¢å¤ã¸ã¹ã©ã¤ããå®äºããã¾ã§ãæ°ããã³ã³ãã³ããç»é¢ä¸é¨ããã¹ã©ã¤ããã¦å
¥ã£ã¦ããã®ãé
ããããããanimation-delay ã®å¤ã 0.6s ã«è¨å®ãã¦ãã¾ãããã®å ´åã両æ¹ãéãªã£ã¦ãã¾ãã¨ä¸èªç¶ã«è¦ããããã§ãã
ãã®ã¹ã¿ã¤ã«ã·ã¼ãã®ããã«ä¸ã®æ¹ã§ããã¹ã¦ã®ã°ã«ã¼ãå
ã®ãã¹ã¦ã®ã¢ãã¡ã¼ã·ã§ã³ã® animation-duration ã 0.6s ã«è¨å®ãã¦ãã¾ããããããå
ã»ã©è¨å®ããé
å»¶ã 0.6s ã ã£ãçç±ã§ãã
::view-transition-group(*) {
animation-duration: 0.6s;
}
ã¡ã¢:
ç°¡æ½ã«ããããã以ä¸ã§åç
§ããã¢ãã¡ã¼ã·ã§ã³ã® @keyframes å®ç¾©ã³ã¼ãããã¹ã¦è¡¨ç¤ºããã¦ããã¾ããããããã¯ã½ã¼ã¹ã³ã¼ãã§ç¢ºèªã§ãã¾ãã
@view-transition ã使ç¨ãããææ¸éãã¾ãããã¥ã¼é·ç§»ã«ãããåã®æ´»ç¨
ææ¸ãã¾ããã ãã¥ã¼é·ç§»ã«ç°ãªãåãé©ç¨ããã«ã¯ã@view-transition ã¢ããã«ã¼ã«ã® types è¨è¿°åã«ãã«ã³ãã§åºåã£ã 1 ã¤ä»¥ä¸ã®åãæå®ãã¾ãã
ä¾ãã°ãMPA é·ç§»åã®ä¾ã§ã¯ãå
±æã¹ã¿ã¤ã«ã·ã¼ãå
ã® @view-transition ã¢ããã«ã¼ã«ã¯æ¬¡ã®ãããªå½¢ã«ãªã£ã¦ãã¾ãã
@view-transition {
navigation: auto;
types: slide;
}
CSS ã§ã¯ãSPA ã®ä¾ã§è¡ã£ãã®ã¨åãããã«ãã¢ã¯ãã£ããªãã¥ã¼é·ç§»ã«é©ç¨ãããã¢ãã¡ã¼ã·ã§ã³ãããã®åã«åºã¥ãã¦ã«ã¹ã¿ãã¤ãºãããã¨ãå¯è½ã§ãã
html:active-view-transition-type(slide) {
:root {
view-transition-name: none;
}
section {
view-transition-name: chapter;
}
&::view-transition-old(chapter) {
animation-name: slide-out-to-left;
}
&::view-transition-new(chapter) {
animation-name: slide-in-from-right;
}
}
ããã§ã¯ãã¢ã¯ãã£ããªãã¥ã¼é·ç§»ã® type ã slide ã®å ´åã:active-view-transition-type(slide) ã»ã¬ã¯ã¿ã¼ã使ç¨ãã¦ããã¤ãã®ã¹ã¿ã¤ã«ãé©ç¨ãã¾ãã:root è¦ç´ ã« view-transition-name ã¨ã㦠none ãé©ç¨ãã¦ã¹ãããã·ã§ããã®ãã£ããã£ã忢ãããã®å¾ããã¼ã¸ <section> ã®è¦ç´ ã« view-transition-name ã¨ã㦠chapter ãè¨å®ãã¦ä¸æ¸ããã¾ããããã¯ããã¥ã¼é·ç§»ãé©ç¨ãããææ¸å
ã§ã®å¯ä¸ã®é¨åã§ãã
次ã«ã::view-transition-old(chapter) 㨠::view-transition-new(chapter) ã使ç¨ãã¦ããã¼ã¸éã®é·ç§»æã« <section> ã«ç¬èªã®ã¢ãã¡ã¼ã·ã§ã³ãé©ç¨ãã¾ãã
pageswap ããã³ pagereveal ã¤ãã³ãã使ç¨ãã¦ç°ãªãææ¸éãç§»å
以ä¸ã¯åé¡ãªãåä½ãã¾ãããçæ³çã¨ã¯è¨ãã¾ãããæ°ãããã¼ã¸ã«ç§»åããã¨ãå¤ããã¼ã¸ã®ã³ã³ãã³ãã¯å¸¸ã«å·¦å´ã«æ¶ããæ°ãããã¼ã¸ã®ã³ã³ãã³ãã¯å¸¸ã«å³å´ããç¾ãã¾ãããã®ã¢ãã¡ã¼ã·ã§ã³ã¯ãå¾ã®ç« ã«ç§»åããéã«ã¯åé¡ããã¾ããããï¼å°ãªãã¨ãè±èªã®ãããªå·¦æ¸ãã®è¨èªã®ã¦ã¼ã¶ã¼ã«ã¨ã£ã¦ã¯ï¼åã®ç« ã«ç§»åããéã«ã¯ç´æã«åããããã«æãããã¾ããå¾ã®ç« ããåã®ç« ã¸ç§»åããå ´åã¯ãã¢ãã¡ã¼ã·ã§ã³ã®æ¹åãéã«ããæ¹ãè¯ãã§ãããã
ããã²ã¼ã·ã§ã³ã®ç¨®é¡ã«å¿ãã¦ãã¢ã¯ãã£ããªãã¥ã¼é·ç§»ã«ç°ãªãåãé©ç¨ããã«ã¯ã対å¿ãã ViewTransition ãªãã¸ã§ã¯ãã® types ããããã£ãæä½ããå¿
è¦ãããã¾ããããã¯ä»¥ä¸ã®å ´æã§å©ç¨ã§ãã¾ãã
- ãã¼ã¸ããåºã¦ããå ´åã®
pageswapã¤ãã³ããªãã¸ã§ã¯ãã®PageSwapEvent.viewTransitionãããã㣠- ãã¼ã¸ã«å
¥ã£ã¦ããå ´åã®
pagerevealã¤ãã³ããªãã¸ã§ã¯ãã®PageSwapEvent.viewTransitionããããã£
MPAã®è¤æ°ã®ãã©ã³ã¸ã·ã§ã³åã®ä¾ã§ã¯ããã®ææ³ã使ç¨ããæ¹æ³ã示ãã¦ãã¾ããããã¯ååã®ä¾ã¨ä¼¼ã¦ãã¾ãããããã¤ãã®é¡èãªéããããã¾ããããã«ã¤ãã¦ã¯ä¸è¨ã§èª¬æãã¾ãã
JavaScript ã§ã¢ãã¡ã¼ã·ã§ã³ã®ç¨®é¡ãå¤å¥
å
±æããã¦ãã JavaScript ãã¡ã¤ã«ãè¦ã¦ã¿ã¾ããããã¾ããç¬èªã®é¢æ° determineTransitionType() ãå®ç¾©ãã¾ãããã®é¢æ°ã¯ãç§»åå
ã®ãã¼ã¸ã¨ç§»åå
ã®ãã¼ã¸ã®URLã調ã¹ãããã«åºã¥ãã¦ããã²ã¼ã·ã§ã³ã®ç¨®é¡ã backwardsï¼åã®ç« ã¸ç§»åï¼ã forwardsï¼å¾ã®ç« ã¸ç§»åï¼ããå¤å®ãã¾ãã
åç« ã®ãã¼ã¸ã«ã¯é£çªãååä»ãã§ä»ãããã¦ãã¾ãï¼index.htmlããã㦠index2.htmlãindex3.html ãªã©ï¼ããã®ããããã¡ã¤ã«åã«å«ã¾ããæ°å¤ãæ¯è¼ãããã¨ã§ãããã²ã¼ã·ã§ã³ããéæ¹åãï¼ç§»åå
ã®ãã¼ã¸çªå·ãç§»åå
ã®ãã¼ã¸çªå·ãã大ããå ´åï¼ããé æ¹åãï¼ç§»åå
ã®ãã¼ã¸çªå·ãç§»åå
ã®ãã¼ã¸çªå·ããå°ããå ´åï¼ãã確èªãã¾ãã
é©ç¨ããåãæ±ºå®ããããã«ä½¿ç¨ããã³ã¼ãã¯ãããã¸ã§ã¯ãã«ãã£ã¦ç°ãªãã¾ããä¸è¨ã³ã¼ãã®åä½ã説æãã詳細ãªã³ã¡ã³ãã¯ãã½ã¼ã¹ã³ã¼ãã§ç¢ºèªã§ãã¾ãã
const determineTransitionType = (oldNavigationEntry, newNavigationEntry) => {
const currentURL = oldNavigationEntry.url;
const destinationURL = newNavigationEntry.url;
function determinePageIndex(url) {
const array = url.split("/");
const slug = array[array.length - 1];
if (slug.indexOf("html") === -1) {
return 0;
}
const pageIndex = slug.replace("index", "").replace(".html", "");
if (pageIndex === "") {
return 0;
}
return parseInt(pageIndex, 10);
}
const currentPageIndex = determinePageIndex(currentURL);
const destinationPageIndex = determinePageIndex(destinationURL);
if (currentPageIndex > destinationPageIndex) {
return "backwards";
} else if (currentPageIndex < destinationPageIndex) {
return "forwards";
}
};
次ã«ãpageswap ã¤ãã³ããªã¹ãã¼ã使ç¨ãã¦ãé·åºãããã¼ã¸ã®é·ç§»åãè¨å®ãã¾ããã¤ãã³ããã³ãã©ã¼é¢æ°å
ã§ã¯ãã¤ãã³ããªãã¸ã§ã¯ãã® activation ããããã£ããå¤ãããã²ã¼ã·ã§ã³é
ç®ã¨æ°ããããã²ã¼ã·ã§ã³é
ç®ãåå¾ãããããã determineTransitionType() 颿°ã«æ¸¡ãã¦åãå¤å®ããå¾ãViewTransition.types ããããã£ã® add() ã¡ã½ããã使ç¨ãã¦ããã®åããã¥ã¼é·ç§»ã«å²ãå½ã¦ã¾ãã
window.addEventListener("pageswap", async (e) => {
const transitionType = determineTransitionType(
e.activation.from,
e.activation.entry,
);
console.log(`pageSwap: ${transitionType}`);
e.viewTransition.types.add(transitionType);
});
æå¾ã«ãpagereveal ã¤ãã³ããªã¹ãã¼ã使ç¨ãã¦ã表示ããããã¼ã¸ã®é·ç§»åãæå®ãã¾ããã¤ãã³ããã³ãã©ã¼é¢æ°å
ã§ã¯ãNavigation.activation ããããã£ããå¤ãããã²ã¼ã·ã§ã³é
ç®ã¨æ°ããããã²ã¼ã·ã§ã³é
ç®ãåå¾ãããããã determineTransitionType() 颿°ã«æ¸¡ãã¦é·ç§»åãå¤å®ãã¾ãããã®åã ViewTransition.types ããããã£ã® add() ã¡ã½ããã使ç¨ãã¦ãã¥ã¼é·ç§»ã«å²ãå½ã¦ãã®ã§ãããåãæªå®ç¾©ã«ãªã£ãå ´åã¯ããã®æé ãã¹ããããã¾ãã
window.addEventListener("pagereveal", async (e) => {
const transitionType = determineTransitionType(
navigation.activation.from,
navigation.activation.entry,
);
console.log(`pageReveal: ${transitionType}`);
if (transitionType !== undefined) {
e.viewTransition.types.add(transitionType);
}
});
ã¡ã¢:
determineTransitionType() 颿°ã¯ãbackwards æ¡ä»¶ã forwards æ¡ä»¶ãçã§ãªãå ´åãundefined ãè¿ããã¨ãããã¾ããããã¯ãã¦ã¼ã¶ã¼ããã¼ã¸ãåèªã¿è¾¼ã¿ããå ´åã«çºçããå¯è½æ§ãããã¾ãããã®å ´åãç¾å¨ã®ãã¼ã¸ã¨åºåå
ã®ãã¼ã¸ã¯åä¸ã§ãããããã¤ã³ããã¯ã¹å¤ãåãã«ãªãã¾ãã
CSS ã§ã®ç¬èªã®ã¢ãã¡ã¼ã·ã§ã³ã®é©ç¨
ããã§ãããã²ã¼ã·ã§ã³ã®ç¨®é¡ã«å¿ãã¦ã¢ã¯ãã£ããªãã¥ã¼é·ç§»ã«é©åãªã¹ã¿ã¤ã«ãé©ç¨ãããããã«ãªãã¾ãããååã®ä¾ã¨åæ§ã«ãCSS ã§ç¨®é¡ãã¨ã«ç°ãªãã¢ãã¡ã¼ã·ã§ã³ãè¨å®ãããã¨ãã§ãã¾ãã
html:active-view-transition {
nav {
view-transition-name: none;
}
section {
view-transition-name: chapter;
}
}
html:active-view-transition-type(forwards) {
&::view-transition-old(chapter) {
animation-name: slide-out-to-left;
}
&::view-transition-new(chapter) {
animation-name: slide-in-from-right;
}
}
html:active-view-transition-type(backwards) {
&::view-transition-old(chapter) {
animation-name: slide-out-to-right;
}
&::view-transition-new(chapter) {
animation-name: slide-in-from-left;
}
}
ã¾ããå
±æ CSS å
ã® @view-transition ã¢ããã«ã¼ã«ãã types è¨è¿°åãé¤å»ããç¹ã«ã注æãã¦ãã ãããææ¸éã®ãã¥ã¼é·ç§»ããããã¨ãã§ããã«ã¯ navigation è¨è¿°åãå¿
è¦ã§ãããå㯠JavaScript ã§å¦çãã¦ãããããããã§ã¯è¨å®ããå¿
è¦ãããã¾ããã
@view-transition {
navigation: auto;
}
é¢é£æ å ±
- ãã¥ã¼é·ç§» API
- Handle multiple view transition styles with view transition types (SPA) - developer.chrome.com (2024)
- View transition types in cross-document view transitions - developer.chrome.com (2024)