transition-behavior
Baseline
2024
*
æè¿å©ç¨å¯è½
2024å¹´8æä»¥éããã®æ©è½ã¯ææ°ã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã³ãã©ã¦ã¶ã¼ã§åä½ãã¾ããå¤ã端æ«ããã©ã¦ã¶ã¼ã§ã¯åä½ããªããã¨ãããã¾ãã
* ãã®æ©è½ã®ä¸é¨ã¯ã対å¿ã¬ãã«ãç°ãªãå ´åãããã¾ãã
transition-behavior 㯠CSS ã®ããããã£ã§ãããããã£ã¯ãã¢ãã¡ã¼ã·ã§ã³ã®åä½ã颿£ã§ããããããã£ã«ãã©ã³ã¸ã·ã§ã³ãå§ãããã©ãããæå®ãã¾ãã
æ§æ
/* ãã¼ã¯ã¼ãå¤ */
transition-behavior: allow-discrete;
transition-behavior: normal;
/* ã°ãã¼ãã«å¤ */
transition-behavior: inherit;
transition-behavior: initial;
transition-behavior: revert;
transition-behavior: revert-layer;
transition-behavior: unset;
å¤
allow-discrete-
ãã®è¦ç´ ã§ã¯ã颿£ã¢ãã¡ã¼ã·ã§ã³ããããã£ã®ãã©ã³ã¸ã·ã§ã³ãéå§ããã¾ãã
normal-
ãã®è¦ç´ ã§ã¯ã颿£ã¢ãã¡ã¼ã·ã§ã³ããããã£ã®ãã©ã³ã¸ã·ã§ã³ãéå§ããã¾ããã
解説
transition-behavior ããããã£ã¯ãä»ã®ãã©ã³ã¸ã·ã§ã³ããããã£ãç¹ã« transition-property ããã³ transition-duration ã¨çµã¿åããã¦ä½¿ç¨ããå ´åã«ã®ã¿æçãªããããã£ã§ããåçæéã 0 ã§ãªãã¢ãã¡ã¼ã·ã§ã³ãããããããã£ããªããã°ããã©ã³ã¸ã·ã§ã³ã¯çºçããªãããã§ãã
.card {
transition-property: opacity, display;
transition-duration: 0.25s;
transition-behavior: allow-discrete;
}
.card.fade-out {
opacity: 0;
display: none;
}
transition-behavior ã®å¤ã¯ã䏿¬æå®ã® transition 宣è¨ã«å«ãããã¨ãã§ãã¾ãã䏿¬æå®ã«å«ããå ´åããã¹ã¦ã®ããããã£ã使ç¨ãããã¾ãã¯æ¢å®å¤ã§ã¯ã allow-discrete å¤ã¯é常ã®ã¢ãã¡ã¼ã·ã§ã³å¯è½ãªããããã£ã«å½±é¿ãä¸ãã¾ããã以ä¸ã® CSS ã¯ãä¸è¨ã®å奿å®ã®å®£è¨ã¨åçã§ãã
.card {
transition: all 0.25s;
transition: all 0.25s allow-discrete;
}
.card.fade-out {
opacity: 0;
display: none;
}
ä¸è¨ã®ã¹ããããã§ã¯ã transition ããããã£ã 2 åè¨è¿°ãã¦ãã¾ããæåã®ãã®ã¯ allow-discrete å¤ãè¨è¿°ãã¦ãã¾ãããããã«ãã£ã¦ãã©ã¦ã¶ã¼éã®å¯¾å¿ãã§ãã transition-behavior ã«å¯¾å¿ãã¦ããªããã©ã¦ã¶ã¼ã§ãã«ã¼ãã®ä»ã®ããããã£ã確å®ã«ãã©ã³ã¸ã·ã§ã³ããããã«ãã¦ãã¾ãã
颿£ã¢ãã¡ã¼ã·ã§ã³ã®æå
颿£ã¢ãã¡ã¼ã·ã§ã³ããããã£ã¯ä¸è¬çã«ã 2 ã¤ã®å¤ã®éãã¢ãã¡ã¼ã·ã§ã³ã® 50% ã§åãæ¿ãã¾ãã
ãã ãä¾å¤ãããããã㯠display: none ã¾ã㯠content-visibility: hidden ã¨ã®éã§ã¢ãã¡ã¼ã·ã§ã³ããå ´åã§ãããã®å ´åããã©ã¦ã¶ã¼ã¯ã¢ãã¡ã¼ã·ã§ã³ã®éä¸ããã©ã³ã¸ã·ã§ã³ããã³ã³ãã³ãã表示ãããããã«ã 2 ã¤ã®å¤ãåãæ¿ãã¾ãã
å¾ã£ã¦ãä¾ãã°æ¬¡ã®ããã«ãªãã¾ãã
displayãnoneããblockï¼ã¾ãã¯ä»ã®è¡¨ç¤ºå¯è½ãªdisplayå¤ï¼ã«ã¢ãã¡ã¼ã·ã§ã³ãããã¨ãã¯ãå¤ãblockã«åãæ¿ããã®ã¯ã¢ãã¡ã¼ã·ã§ã³ã®0%ã§ãããæéä¸ãã£ã¨è¡¨ç¤ºããã¾ããdisplayãblockï¼ã¾ãã¯ä»ã®è¡¨ç¤ºå¯è½ãªdisplayå¤ï¼ããnoneã«ã¢ãã¡ã¼ã·ã§ã³ãããã¨ãã¯ãå¤ã¯noneã«åãæ¿ããã®ã¯ã¢ãã¡ã¼ã·ã§ã³ã®100%ã§ãã
å ¬å¼å®ç¾©
| åæå¤ | normal |
|---|---|
| é©ç¨å¯¾è±¡ | ãã¹ã¦ã®è¦ç´ |
| ç¶æ¿ | ãªã |
| è¨ç®å¤ | æå®éã |
| ã¢ãã¡ã¼ã·ã§ã³ã®ç¨®é¡ | ã¢ãã¡ã¼ã·ã§ã³ä¸å¯ |
形弿æ³
transition-behavior =
<transition-behavior-value>#
<transition-behavior-value> =
normal |
allow-discrete
ä¾
>ããããªã¼ãã¼ã®ãã©ã³ã¸ã·ã§ã³
ãã®ä¾ã§ã¯ãããããªã¼ãã¼ãé表示ãã表示ã¸ãã©ã³ã¸ã·ã§ã³ããããæ»ãããããã¢ãã¡ã¼ã·ã§ã³ããã¦ãã¾ãã
HTML
ãã® HTML ã§ã¯ã <div> è¦ç´ ã« popover 屿§ãç¨ãã¦ããããªã¼ãã¼ã¨ãã¦å®£è¨ãã <button> è¦ç´ ã« popovertarget 屿§ãç¨ãã¦ããããªã¼ãã¼ã®è¡¨ç¤ºã³ã³ããã¼ã«ã¨ãã¦æå®ãã¦ãã¾ãã
<button popovertarget="mypopover">ããããªã¼ãã¼ã表示</button>
<div popover="auto" id="mypopover">ãããããããªã¼ãã¼ã§ããã¢ãã¡ã¼ã·ã§ã³ãã¾ãã</div>
CSS
[popover]:popover-open {
opacity: 1;
transform: scaleX(1);
}
[popover] {
/* æ¶æ»
ã¢ãã¡ã¼ã·ã§ã³ã®æçµç¶æ
*/
opacity: 0;
transform: scaleX(0);
transition-property: opacity, transform, overlay, display;
transition-duration: 0.7s;
transition-behavior: allow-discrete;
/* 䏿¬æå®ã® transition ããããã£ã使ç¨ããã¨ã次ã®ããã«æ¸ããã¨ãã§ãã¾ãã
transition:
opacity 0.7s,
transform 0.7s,
overlay 0.7s allow-discrete,
display 0.7s allow-discrete;
ã¾ãã¯ãããã§ãæ§ãã¾ããã
transition: all 0.7s allow-discrete;
*/
}
/* 詳細度ã¯åããªã®ã§ã广ãå¾ãããã«ã¯åè¨ã® [popover]:popover-open ã«ã¼ã«ã®
å¾ã«è¨è¼ããå¿
è¦ãããã¾ãã */
@starting-style {
[popover]:popover-open {
opacity: 0;
transform: scaleX(0);
}
}
ã¢ãã¡ã¼ã·ã§ã³ããããããããã£ã¯ opacity 㨠transform ã® 2 ã¤ã§ãããããã®ããããã£ã®éå§ç¶æ
ã«ã¯ããããªã¼ãã¼è¦ç´ ã®æ¢å®ã®éè¡¨ç¤ºç¶æ
ï¼[popover] ã§é¸æï¼ãè¨å®ããçµäºç¶æ
ã«ã¯ããããªã¼ãã¼ãéããç¶æ
ï¼:popover-open æ¬ä¼¼ã¯ã©ã¹ã§é¸æï¼ãè¨å®ãã¾ããããã¦ããã® 2 ã¤ã®éã§ã¢ãã¡ã¼ã·ã§ã³ããããã« transition ããããã£ãè¨å®ãã¾ãã
ã¢ãã¡ã¼ã·ã§ã³ããè¦ç´ ã¯ã表示ãããã¨æä¸ä½ã¬ã¤ã¤ã¼ã¸ç§»åããï¼display: none ã§ï¼é表示ã«ãªãã¨æä¸ä½ã¬ã¤ã¤ã¼ããé¤å»ãããããã以ä¸ã®ããããã£ããã©ã³ã¸ã·ã§ã³ããè¦ç´ ã®ãªã¹ãã«è¿½å ããåæ¹åã§ã¢ãã¡ã¼ã·ã§ã³ãåä½ããããã«ãã¦ãã¾ããã©ã¡ãã®å ´åãã transition-behavior: allow-discrete ã䏿¬æå®ãã¦ããã©ã³ã¸ã·ã§ã³ã®ã¢ãã¡ã¼ã·ã§ã³ãæå¹ã«ãã¦ãã¾ãã
display: ã¢ãã¡ã¼ã·ã§ã³ããè¦ç´ ã®åºç¾ã¨æ¶æ» ã®ä¸¡æ¹ã®ã¢ãã¡ã¼ã·ã§ã³ãéãã¦è¡¨ç¤ºãããï¼display: blockã«è¨å®ããï¼ããã«å¿ è¦ã§ããããããªãã¨ãæ¶æ» ã¢ãã¡ã¼ã·ã§ã³ã¯è¡¨ç¤ºããã¾ãããçµæã¨ãã¦ãããããªã¼ãã¼ã¯ãã æ¶ãã¦ãã¾ãã¾ããoverlay: è¦ç´ ãæä¸ä½ã¬ã¤ã¤ã¼ããé¤å»ãããã®ãã¢ãã¡ã¼ã·ã§ã³ãçµããã¾ã§ç¢ºå®ã«å»¶æããããã«ããããã«å¿ è¦ã§ããããã¯ããã®ãããªåç´ãªã¢ãã¡ã¼ã·ã§ã³ã§ã¯å¤§å·®ããã¾ããããããè¤éãªã±ã¼ã¹ã§ã¯ããããè¡ããªãã¨ãè¦ç´ ããªã¼ãã¼ã¬ã¤ãããã°ããé¤å»ãããã¢ãã¡ã¼ã·ã§ã³ãæ»ããã§ãªããªã£ããã广çã§ãªããªã£ãããããã¨ãããã¾ãã
ããã«ãã¢ãã¡ã¼ã·ã§ã³ã®éå§ç¶æ
㯠@starting-style ã¢ããã«ã¼ã«å
ã«è¨å®ãã¾ããããã¯äºæããªãåä½ãé¿ããããã«å¿
è¦ã§ããæ¢å®ã§ã¯ãè¦ç´ ã®ååã¹ã¿ã¤ã«æ´æ°æãã¾ã㯠display ã®ç¨®é¡ã none ããå¥ã®ç¨®é¡ã«å¤æ´ãããå ´åããã©ã³ã¸ã·ã§ã³ã¯çºçãã¾ããã@starting-style ã«ãããæ¢å®ã®ã¹ã¿ã¤ã«ãç¹æã®å¶å¾¡æ¹æ³ã§ä¸æ¸ããããã¨ãã§ãã¾ããããããªããã°ãåºç¾ã¢ãã¡ã¼ã·ã§ã³ã¯çºçãããããããªã¼ãã¼ã¯ãã ç¾ããã ãã§ãã
çµæ
ãã®ã³ã¼ãã¯æ¬¡ã®ããã«è¡¨ç¤ºããã¾ãã
ã¡ã¢:
ããããªã¼ãã¼ã¯è¡¨ç¤ºããããã³ã« display: none ãã display: block ã«å¤åããã®ã§ã表示ãã©ã³ã¸ã·ã§ã³ãçºçãããã³ã« @starting-style ã¹ã¿ã¤ã«ãã [popover]:popover-open ã¹ã¿ã¤ã«ã«é·ç§»ãã¾ããããããªã¼ãã¼ãéããããã¨ãããã® [popover]:popover-open ç¶æ
ããæ¢å®ã® [popover] ç¶æ
ã«é·ç§»ãã¾ãã
ãã®ãããªå ´åãåºç¾æã¨æ¶æ» æã§ç°ãªãã¹ã¿ã¤ã«è¨å®ãå¯è½ã§ãããã®ä¾ã«ã¤ãã¦ã¯ãéå§ã¹ã¿ã¤ã«ã使ç¨ããå ´åã®ãã¢ãåç §ãã¦ãã ããã
仿§æ¸
| 仿§æ¸ |
|---|
| CSS Transitions Module Level 2 > # transition-behavior-property > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
overlay@starting-style- CSS ãã©ã³ã¸ã·ã§ã³ã¢ã¸ã¥ã¼ã«
- Four new CSS features for smooth entry and exit animations (developer.chrome.com, 2023)