CSS ã¢ãã¡ã¼ã·ã§ã³ã®ä½¿ç¨
CSS ã¢ãã¡ã¼ã·ã§ã³ã«ããããã CSS ã®ã¹ã¿ã¤ã«è¨å®ãå¥ã®è¨å®ã¸ã¨é·ç§»ããããã¨ãã§ãã¾ããã¢ãã¡ã¼ã·ã§ã³ã¯ã2 種é¡ã®è¦ç´ ã§æ§æããã¦ãã¾ãã ããã¯ãã¢ãã¡ã¼ã·ã§ã³ã«ã¤ãã¦è¨è¿°ããã¹ã¿ã¤ã«ã¨ãã¢ãã¡ã¼ã·ã§ã³ã®å é ã¨æ«å°¾ã® CSS ã¹ã¿ã¤ã«ã示ããã¼ãã¬ã¼ã ã§ãã åæ§ã«ãã¢ãã¡ã¼ã·ã§ã³éä¸ã®ééç¹ã¨ãªãã¹ã¿ã¤ã«ã示ããã¨ãã§ãã¾ãã
CSS ã¢ãã¡ã¼ã·ã§ã³ã¯ã徿¥ã®ã¹ã¯ãªããã«ããã¢ãã¡ã¼ã·ã§ã³ã«æ¯ã¹ã¦ 3 ã¤ã®é·æãããã¾ãã
- æ°è¡ã® CSS ã ãã§åºæ¬çãªã¢ãã¡ã¼ã·ã§ã³ã使ã§ãã¾ããJavaScript ã¯ä¸è¦ã§ãã
- ã¢ãã¡ã¼ã·ã§ã³ã¯ä¸ç¨åº¦ä»¥ä¸ã®ã·ã¹ãã è² è·ã§ãè¯ãåä½ãã¾ããåç´ãªã¢ãã¡ã¼ã·ã§ã³ã®å ´åãJavaScript ã§ã¯ã·ã¹ãã ã®è² è·ãé«ãã¦ãã¾ããã¨ãããããã¾ãã ã¬ã³ããªã³ã°ã¨ã³ã¸ã³ã¯å¯è½ãªéãããã©ã¼ãã³ã¹ããªãããã«ä¿ã¤ããããã¬ã¼ã ãçç¥ãããªã©ã®æè¡ãç¨ãããã¨ãã§ãã¾ãã
- ãã©ã¦ã¶ã¼ã¯ã¢ãã¡ã¼ã·ã§ã³ã®æµããå¶å¾¡ãã¦ãããã©ã¼ãã³ã¹ãå¹çãæé©åãã¾ãã ä¾ãã°ãã¢ã¯ãã£ãã§ã¯ãªãã¿ãã§åä½ãã¦ããã¢ãã¡ã¼ã·ã§ã³ã®æ´æ°ã®é »åº¦ãæ¸ãããããã¾ãã
ã¢ãã¡ã¼ã·ã§ã³ã®è¨å®
CSS ã¢ãã¡ã¼ã·ã§ã³ã®æµã (ã·ã¼ã±ã³ã¹) ã使ããã«ã¯ãã¢ãã¡ã¼ã·ã§ã³ããããè¦ç´ ã« animation ããããã£ã¾ãã¯ãã®ãµãããããã£ãä»å ãã¾ãã ãã®ããããã£ã¯ã¢ãã¡ã¼ã·ã§ã³ã®ã¿ã¤ãã³ã°ã¨é·ããè¨å®ãã¾ãã åæ§ã«ãã¢ãã¡ã¼ã·ã§ã³ãã©ã®ããã«é²ãããã®è©³ç´°ãè¨å®ã§ãã¾ãã ãªãããã®ããããã£ã¯ã¢ãã¡ã¼ã·ã§ã³ã®å¤è¦ãæå®ãããã®ã§ã¯ããã¾ããã ãããã¯ãå¾è¿°ã®ãã¼ãã¬ã¼ã ãç¨ããã¢ãã¡ã¼ã·ã§ã³ã®æµãã®å®ç¾©ã§èª¬æãã @keyframes ã¢ããã«ã¼ã«ã§å®ç¾©ãã¾ãã
animation ããããã£ã®ãµãããããã£ã¯ä»¥ä¸ã®ã¨ããã§ãã
animation-composition-
è¤æ°ã®ã¢ãã¡ã¼ã·ã§ã³ãåæã«åãããããã£ã«å½±é¿ãä¸ããå ´åã«ä½¿ç¨ããåææ¼ç®ãæå®ãã¾ãããã®ããããã£ã¯
animation䏿¬æå®ããããã£ã«ã¯å«ã¾ãã¾ããã animation-delay-
è¦ç´ ã®èªã¿è¾¼ã¿å®äºããã¢ãã¡ã¼ã·ã§ã³ã·ã¼ã±ã³ã¹ã®éå§ã¾ã§ã®å¾ ã¡æéãæå®ãã¾ããã¾ããã¢ãã¡ã¼ã·ã§ã³ãæåããéå§ããããéä¸ããéå§ããããæå®ãã¾ãã
animation-direction-
ã¢ãã¡ã¼ã·ã§ã³ã®æåã®å復ãé æ¹åã¨éæ¹åã®ã©ã¡ãã«ãããã以éã®åå¾©ã®æ¹åãã·ã¼ã±ã³ã¹ãã¨ã«äº¤äºã«å¤ããããéå§ç¹ã«ãªã»ãããã¦ç¹°ãè¿ãããæå®ãã¾ãã
animation-duration-
ã¢ãã¡ã¼ã·ã§ã³ã® 1 åã®ãµã¤ã¯ã«ã«è¦ããæéã®é·ããè¨å®ãã¾ãã
animation-fill-mode-
ã¢ãã¡ã¼ã·ã§ã³ã®å®è¡åå¾ã«ãæå®ããã¹ã¿ã¤ã«ãé©ç¨ããããè¨å®ãã¾ãã
ã¡ã¢: ã¢ãã¡ã¼ã·ã§ã³ã forwards ãã£ã«ã¢ã¼ãã®å ´åãã¢ãã¡ã¼ã·ã§ã³å¯¾è±¡ã®ããããã£ã¯ã
will-changeããããã£ã®å¤ã«å«ã¾ãã¦ãããã®ããã«æ¯ãèãã¾ããã¢ãã¡ã¼ã·ã§ã³ä¸ã«æ°ããéãåããã³ã³ããã¹ãã使ãããå ´åãã¿ã¼ã²ããè¦ç´ ã¯ã¢ãã¡ã¼ã·ã§ã³çµäºå¾ããã®éãåããã³ã³ããã¹ããä¿æãã¾ãã animation-iteration-count-
ã¢ãã¡ã¼ã·ã§ã³ãç¹°ãè¿ãåæ°ãè¨å®ãã¾ãã ã¢ãã¡ã¼ã·ã§ã³ãç¡éã«ç¹°ãè¿ãã«ã¯
infiniteãæå®ãã¦ãã ããã animation-name-
ã¢ãã¡ã¼ã·ã§ã³ã®ãã¼ãã¬ã¼ã ã示ã
@keyframesã¢ããã«ã¼ã«ã®ååãæå®ãã¾ãã animation-play-state-
ã¢ãã¡ã¼ã·ã§ã³ã䏿忢ããããåéããããããã¨ãã§ãã¾ãã
animation-timeline-
CSS ã¢ãã¡ã¼ã·ã§ã³ã®é²è¡ãå¶å¾¡ããããã«ä½¿ç¨ãããã¿ã¤ã ã©ã¤ã³ãæå®ãã¾ãã
animation-timing-function-
ãã¼ãã¬ã¼ã éã®ã¢ãã¡ã¼ã·ã§ã³é·ç§»ããå éæ²ç·ãè¨å®ãããã¨ã§å®ç¾©ãã¾ãã
ãã¼ãã¬ã¼ã ãç¨ããã¢ãã¡ã¼ã·ã§ã³ã®æµãã®å®ç¾©
ã¢ãã¡ã¼ã·ã§ã³ã®ã¿ã¤ãã³ã°ãæå®ããå¾ã¯ãã¢ãã¡ã¼ã·ã§ã³ã®å¤è¦ãå®ç¾©ãããã¨ãå¿
è¦ã§ãã ããã¯ã@keyframes ã¢ããã«ã¼ã«ãç¨ã㦠2 ã¤ã¾ãã¯ãã以ä¸ã®ãã¼ãã¬ã¼ã ãå®ç¾©ãããã¨ã§ãã åãã¼ãã¬ã¼ã ã¯ãã¢ãã¡ã¼ã·ã§ã³ã®æµãã®ä¸ã§è¦ç´ ãã©ã®ããã«è¡¨ç¾ãããããè¨è¿°ãã¾ãã
CSS ã¹ã¿ã¤ã«ã§ã¢ãã¡ã¼ã·ã§ã³ã®ã¿ã¤ãã³ã°ãå®ç¾©ããããããã¼ãã¬ã¼ã ã <percentage> ã§æå®ããã¢ãã¡ã¼ã·ã§ã³ã®æµãã®ä¸ã§ãã¤ãã®ã¹ã¿ã¤ã«ãé©ç¨ããããã示ãã¾ãã 0% ã¯ã¢ãã¡ã¼ã·ã§ã³ã·ã¼ã±ã³ã¹ã®å§ç¹ã100% ã¯ã¢ãã¡ã¼ã·ã§ã³ã·ã¼ã±ã³ã¹ã®çµç¹ã表ãã¾ãã ãããå§ç¹ã¨çµç¹ã¯ã¨ã¦ãéè¦ã§ãããããããããã0% 㯠fromã100% 㯠to ã®å¥åã§ã代æ¿ã§ãã¾ãã 両è
ã®æå®ã¯ä»»æã§ãããfrom/0% 㨠to/100% ã®ä¸¡æ¹ãæå®ããã¦ããªãå ´åããã©ã¦ã¶ã¼ã¯ããã¹ã¦ã®å±æ§ããè¨ç®ãããå¤ãç¨ãã¦ã¢ãã¡ã¼ã·ã§ã³ãéå§ã¾ãã¯çµäºãã¾ãã
ã¾ããä»»æã§ã¢ãã¡ã¼ã·ã§ã³ã®å§ã¾ãã¨çµããã®ä¸éå°ç¹ãå®ç¾©ãã追å ã®ãã¼ãã¬ã¼ã ãå«ãããã¨ãå¯è½ã§ãã
animation 䏿¬æå®ã®å©ç¨
animation 䏿¬æå®ã¯ã¹ãã¼ã¹ã®ç¯ç´ã«ä¾¿å©ã§ãã ä¾ã¨ãã¦ããã®è¨äºãéãã¦ä½¿ç¨ãã¦ãã¦ããã«ã¼ã«ãããã¾ãã
p {
animation-duration: 3s;
animation-name: slide-in;
animation-iteration-count: infinite;
animation-direction: alternate;
}
ãã®ããã«ç½®ãæãããã¨ãã§ãã¾ãã
p {
animation: 3s infinite alternate slide-in;
}
animation 䏿¬æå®ã使ç¨ãã¦ãã¾ãã¾ã¢ãã¡ã¼ã·ã§ã³ããããã£ã®å¤ãæå®ã§ããé åºã®è©³ç´°ã«ã¤ãã¦ã¯ãanimation ãªãã¡ã¬ã³ã¹ãã¼ã¸ãåç
§ãã¦ãã ããã
è¤æ°ã®ã¢ãã¡ã¼ã·ã§ã³ããããã£å¤ã®è¨å®
CSS ã¢ãã¡ã¼ã·ã§ã³ã®å奿å®å¤ã¯ãã«ã³ãã§åºåã£ã¦è¤æ°ã®å¤ãåãä»ãããã¨ãã§ãã¾ãã â ãã®æ©è½ã¯è¤æ°ã®ã¢ãã¡ã¼ã·ã§ã³ã«ä¸ã¤ã®è¦åãé©ç¨ããããå¥ã ãªã¢ãã¡ã¼ã·ã§ã³ã«å¥ã ã®æéãç¹°ãè¿ãåæ°ãªã©ãé©ç¨ãããæã«ä½¿ããã¨ãã§ãã¾ãã å¥ã ãªå¤åã説æããããã«ãããã¤ãç°¡åãªä¾ãè¦ã¦ã¿ã¾ãããã
ãã®æåã®ä¾ã§ã¯ã3 ã¤ã®æç¶æé㨠3 ã¤ã®å復忰å¤ãããã¾ãããããã£ã¦ãåã¢ãã¡ã¼ã·ã§ã³ã«ã¯ãã¢ãã¡ã¼ã·ã§ã³åã¨åãä½ç½®ã«æç¶æéã¨å復忰ã®å¤ãå²ãå½ã¦ããã¾ããfadeInOut ã¢ãã¡ã¼ã·ã§ã³ã«ã¯æç¶æé 2.5s ã¨å復忰 2 ãå²ãå½ã¦ãããbounce ã¢ãã¡ã¼ã·ã§ã³ã«ã¯æç¶æé 1s ã¨å復忰 5 ãå²ãå½ã¦ããã¾ãã
animation-name: fadeInOut, moveLeft300px, bounce;
animation-duration: 2.5s, 5s, 1s;
animation-iteration-count: 2, 1, 5;
ãã®ç¬¬äºã®ä¾ã§ã¯ã3 ã¤ã®ã¢ãã¡ã¼ã·ã§ã³åãè¨å®ããã¦ãã¾ãããæå®ããã¦ããæç¶æéã¨åå¾©åæ°ã¯ 1 ã¤ã ãã§ãããã®å ´åã3 ã¤ã®ã¢ãã¡ã¼ã·ã§ã³ãã¹ã¦ã«åãæç¶æéã¨å復忰ãé©ç¨ããã¾ãã
animation-name: fadeInOut, moveLeft300px, bounce;
animation-duration: 3s;
animation-iteration-count: 1;
第ä¸ã®ä¾ã§ã¯ã 3 ã¤ã®ã¢ãã¡ã¼ã·ã§ã³ãæå®ããã¦ãã¾ãããæéã¨ç¹°ãè¿ãåæ°ã¯ 2 ã¤ããããã¾ããã ãã®å ´åãããããã®ã¢ãã¡ã¼ã·ã§ã³ã«åå¥ã®å¤ãä¸è¶³ããã®ã§ãå¤ã¯æåããæå¾ã¾ã§ç¹°ãè¿ãã¦ä½¿ç¨ããã¾ãã ã§ããããfadeInOut ã®é·ã㯠2.5s ã§ moveLeft300px ã®é·ã㯠5s ã¨ãªãã¾ãã ããã§å¦¥å½ãªæéã®å¤ã®æå¾ã«æ¥ãã®ã§ãæåããã¾ãå§ã¾ãã¾ãã â å¾ã£ã¦ bounce ã®é·ã㯠2.5s ã«ãªãã¾ãã ç¹°ãè¿ãåæ° (ããã³æå®ããä»ã®ããããã£) ã¯ãåæ§ã«å²ãå½ã¦ããã¾ãã
animation-name: fadeInOut, moveLeft300px, bounce;
animation-duration: 2.5s, 5s;
animation-iteration-count: 2, 1;
ã¢ãã¡ã¼ã·ã§ã³ã®æ°ã¨ã¢ãã¡ã¼ã·ã§ã³ããããã£ã®æ°ãéã«ä¸è´ããªãå ´åããã¨ãã° 3 ã¤ã® animation-name å¤ã«å¯¾ã㦠5 ã¤ã® animation-duration å¤ãããå ´åãä½åã¾ãã¯æªä½¿ç¨ã®ã¢ãã¡ã¼ã·ã§ã³ããããã£å¤ï¼ãã®å ´å㯠2 ã¤ã® animation-duration å¤ï¼ã¯ã©ã®ã¢ãã¡ã¼ã·ã§ã³ã«ãé©ç¨ããããç¡è¦ããã¾ãã
ä¾
>æååããã©ã¦ã¶ã¼ã®ã¦ã£ã³ãã¦ã«æ»ãè¾¼ã
ãã®ä¾ã§ã¯ã<p> è¦ç´ ã« translate ããã³ scale ã¹ã¿ã¤ã«ã®é·ç§»ã使ç¨ãã¦ãæååããã©ã¦ã¶ã¼ã®ã¦ã£ã³ãã¦å³ç«¯ã®å¤å´ããæ»ãè¾¼ãããã«ãªãã¾ãã
p {
animation-duration: 3s;
animation-name: slide-in;
}
@keyframes slide-in {
from {
translate: 150vw 0;
scale: 200% 1;
}
to {
translate: 0 0;
scale: 100% 1;
}
}
<p> è¦ç´ ã§ã¯ãã¢ãã¡ã¼ã·ã§ã³ã®å§ã¾ãããçµããã¾ã§ã®å®è¡ã« 3 ç§ããããã¨ã animation-duration ããããã£ã§å®ç¾©ããã¢ãã¡ã¼ã·ã§ã³ã®ãã¼ãã¬ã¼ã ãå®ç¾©ãã @keyframes ã¢ããã«ã¼ã«ã®ååã slide-in ã§ãããã¨ãå®ç¾©ãã¦ãã¾ãã
ãã®å ´åããã¼ãã¬ã¼ã 㯠2 ã¤ã ãã§ããæåã®ãã¼ãã¬ã¼ã 㯠0% ï¼from ã®å¥åã使ç¨ï¼ã§çºçãã¾ããããã§ã¯ãè¦ç´ ã® translate ããããã£ã 150vwï¼ã¤ã¾ãã親è¦ç´ ã®å³ç«¯ãè¶ããä½ç½®ï¼ã«è¨å®ããè¦ç´ ã® scale ã 200%ï¼ããã©ã«ãã®ã¤ã³ã©ã¤ã³ãµã¤ãºã® 2 åï¼ã«è¨å®ãã¾ããããã«ãããæ®µè½ã®å¹
ã親è¦ç´ ã§ãã <body> ã® 2 åã«ãªãã¾ãããã®è¨å®ã«ãããã¢ãã¡ã¼ã·ã§ã³ã®æåã®ãã¬ã¼ã ã§ã¯ãããã¼ããã©ã¦ã¶ã¼ã¦ã£ã³ãã¦ã®å³ç«¯ããã¯ã¿åºãã¦æç»ããã¾ãã
2 çªç® (ãã¤æå¾) ã®ãã¼ãã¬ã¼ã ã¯ã100% ã§ãï¼å¥åã® to ã使ç¨ï¼ã translate ã 0% ã«ãè¦ç´ ã® scale ã 1 ããªãã¡ 100% ã«è¨å®ãã¦ãã¾ãã ããã«ãããè¦åºããã³ã³ãã³ãã¨ãªã¢ã®å·¦ç«¯ã¸ãã¹ãè¾¼ããã¨ã§ã¢ãã¡ã¼ã·ã§ã³ãçµããã¾ãã
<p>
æ¯è«ã¨ã¢ãªã¹ã¯ãã°ããé»ã£ã¦è¦ã¤ãåã£ããããã¦æ¯è«ã¯å£ããæ°´ãã¤ããå¤ããã ããã¦ç ãããªå£°ã§å½¼å¥³ã«è©±ããããã
</p>
ã¡ã¢: ã¢ãã¡ã¼ã·ã§ã³ãè¦ãã«ã¯ãã¼ã¸ãåèªã¿è¾¼ã¿ãã¦ãã ããã
ä»ã®ãã¼ãã¬ã¼ã ã¢ãã¡ã¼ã·ã§ã³ã®è¿½å
å
ã»ã©ã®ä¾ã«ãã¼ãã¬ã¼ã ã追å ãã¾ããããã¢ãªã¹ã¨ããååãå³ããå·¦ã¸ç§»åããéã«ããã³ã¯è²ã«å¤åãã¦å¤§ãããªãããã®å¾å
ã®ãµã¤ãºã¨è²ã«æ»ãã¨ãã¾ããfont-size ã夿´ãããã¨ãå¯è½ã§ãããããã¯ã¹ã¢ãã«ã«å½±é¿ããããããã£ã夿´ããã¨ããã©ã¼ãã³ã¹ã«æªå½±é¿ãåã¼ãã¾ãã代ããã«ãååã <span> ã§å²ã¿ããã®è¦ç´ ã®ã¿ãåå¥ã«æ¡å¤§ç¸®å°ã»çè²ãã¾ãããã®ããã«ã¯ã<span> ã®ã¿ã«å½±é¿ãã 2 ã¤ç®ã®ã¢ãã¡ã¼ã·ã§ã³ã追å ããå¿
è¦ãããã¾ãã
@keyframes grow-shrink {
25%,
75% {
scale: 100%;
}
50% {
scale: 200%;
color: magenta;
}
}
ã³ã¼ãå ¨ä½ã¯æ¬¡ã®ãããªãã®ã§ãã
p {
animation-duration: 3s;
animation-name: slide-in;
}
p span {
display: inline-block;
animation-duration: 3s;
animation-name: grow-shrink;
}
@keyframes slide-in {
from {
translate: 150vw 0;
scale: 200% 1;
}
to {
translate: 0 0;
scale: 100% 1;
}
}
@keyframes grow-shrink {
25%,
75% {
scale: 100%;
}
50% {
scale: 200%;
color: magenta;
}
}
<span> ããã¢ãªã¹ãã®å¨ãã«è¿½å ãã¾ããã
<p>
æ¯è«ã¨<span>ã¢ãªã¹</span>ã¯ãã°ããé»ã£ã¦è¦ã¤ãåã£ããããã¦æ¯è«ã¯å£ããæ°´ãã¤ããå¤ããã ããã¦ç ãããªå£°ã§å½¼å¥³ã«è©±ããããã
</p>
ããã«ãããã¢ãã¡ã¼ã·ã§ã³ã®æåã® 25% ã¨æå¾ã® 25% ã§ã¯ååãé常表示ãããä¸å¤®é¨åã§æ¡å¤§ã»ç¸®å°ãããéã«ãã³ã¯è²ã«å¤åãããããã©ã¦ã¶ã«æç¤ºãã¾ãããã® span ã®display ããããã£ã inline-block ã«è¨å®ãã¾ããããã¯ã transform ããããã£ãç½®æè¦ç´ ã§ã¯ãªãã¤ã³ã©ã¤ã³ã¬ãã«ã³ã³ãã³ãã«ã¯å½±é¿ããªãããã§ãã
ã¡ã¢: ã¢ãã¡ã¼ã·ã§ã³ãè¦ãã«ã¯ãã¼ã¸ãåèªã¿è¾¼ã¿ãã¦ãã ããã
ã¢ãã¡ã¼ã·ã§ã³ã®ç¹°ãè¿ã
ã¢ãã¡ã¼ã·ã§ã³ãç¹°ãè¿ãããã«ã¯ animation-iteration-count ãç¨ãã¦ãã¢ãã¡ã¼ã·ã§ã³ãä½åç¹°ãè¿ãããè¨å®ãã¾ãã 以ä¸ã®ä¾ã§ã¯ãinfinite ãæå®ãã¦ã¢ãã¡ã¼ã·ã§ã³ãç¡æéã«ç¹°ãè¿ãã¾ãã
p {
animation-duration: 3s;
animation-name: slide-in;
animation-iteration-count: infinite;
}
åå¾ã®ç§»å
ã¢ãã¡ã¼ã·ã§ã³ãç¹°ãè¿ãããã«ãã¾ããããæ¯åå§ãã®ç¶æ
ã«ã¸ã£ã³ããã¦ã¢ãã¡ã¼ã·ã§ã³ãå§ã¾ãã®ã¯ã¨ã¦ãä¸èªç¶ã§ãã ç»é¢ä¸ãåå¾ã«ç§»åããããã«ãããã§ãããã ããã¯ãanimation-direction ããããã£ã« alternate ãè¨å®ãããã¨ã§ç°¡åã«å®ç¾ã§ãã¾ãã
p {
animation-duration: 3s;
animation-name: slide-in;
animation-iteration-count: infinite;
animation-direction: alternate;
}
ã¢ãã¡ã¼ã·ã§ã³ã¤ãã³ãã®å©ç¨
ã¢ãã¡ã¼ã·ã§ã³ã¤ãã³ããç¨ãããã¨ã§ãã¢ãã¡ã¼ã·ã§ã³ãããã«å¶å¾¡ããããã¢ãã¡ã¼ã·ã§ã³ã®æç¨ãªæ
å ±ãå¾ãããããã¨ãã§ãã¾ãã ãããã®ã¤ãã³ã㯠AnimationEvent ãªãã¸ã§ã¯ãã«éãããã¦ãããã¢ãã¡ã¼ã·ã§ã³ã®éå§ã»çµäºã»ç¹°ãè¿ãã®å§ã¾ããæ¤åºãããã¨ãã§ãã¾ãã ããããã®ã¤ãã³ãã«ã¯çºçããæéããã¤ãã³ããçºçããã¢ãã¡ã¼ã·ã§ã³ã®ååãå«ã¾ãã¦ãã¾ãã
æååããã¹ãè¾¼ãã¢ãã¡ã¼ã·ã§ã³ã®ä¾ããã¢ãã¡ã¼ã·ã§ã³ããã¤çºçãããã®æ å ±ãåºåããããã«å¤æ´ãã¦ãã¤ãã³ããã©ã®ããã«åãããè¦ã¦ã¿ã¾ãããã
ã¢ãã¡ã¼ã·ã§ã³ã® CSS ã使ãããã¨ããå§ãã¾ãã ãã®ã¢ãã¡ã¼ã·ã§ã³ã¯ã"slide-in" ãå¼ã³åºãã㦠3 ç§å¾ã«çµããã3 åç¹°ãè¿ããã¾ãã ç¹°ãè¿ããã³ã«ãéæ¹åã¸ã¢ãã¡ã¼ã·ã§ã³ãã¾ãã @keyframes å
ã§ãæ¡å¤§çã¨å¹³è¡ç§»åã X 軸æ¹åã«æä½ãããã®è¦ç´ ãç»é¢ã横åãããã«ãã¾ãã
.slide-in {
animation-duration: 3s;
animation-name: slide-in;
animation-iteration-count: 3;
animation-direction: alternate;
}
ã¢ãã¡ã¼ã·ã§ã³ã¤ãã³ãã®ãªã¹ãã¼ã®è¿½å
使ç¨ãããã¨ãã§ãã 3 ã¤ã®ã¢ãã¡ã¼ã·ã§ã³ã¤ãã³ããåå¾ããããã JavaScript ã®ã³ã¼ããç¨ãã¾ãã setup() 颿°ã¯ãã¤ãã³ãã®ãªã¹ãã¼ã«ãªãã¾ãã ãã®é¢æ°ã¯ææ¸ãèªã¿è¾¼ã¾ããã¨ããæåã«å¼ã³åºãã¾ãã
const element = document.getElementById("watch-me");
element.addEventListener("animationstart", listener);
element.addEventListener("animationend", listener);
element.addEventListener("animationiteration", listener);
element.className = "slide-in";
ããã¯ãããã¦ä¸è¬çãªã³ã¼ãã§ãã ãã®ã³ã¼ããã©ã®ããã«åããã«ã¤ãã¦ã詳ãã㯠eventTarget.addEventListener() ã®ææ¸ãåç
§ãã¦ãã ãããæå¾ã®ãã®ã¯ãè¦ç´ ã® class 屿§ããã¢ãã¡ã¼ã·ã§ã³ãè¨å®ããã¯ã©ã¹ "slide-in" ã«è¨å®ãã¦ãã¾ãã ããã«ããã¢ãã¡ã¼ã·ã§ã³ãéå§ããã¦ãã¾ãã
ãªããã®ããã«ããã®ã§ããããï¼ ããã¯ã animationstart ã¤ãã³ãã¯ã¢ãã¡ã¼ã·ã§ã³ãå§ã¾ãã¨ããã«çºçããã®ã§ããã®ä¾ã§ã¯ã³ã¼ããå®è¡ããåã«ã¤ãã³ããçºçãã¦ãã¾ãããã§ãã ããã§ã³ã¼ãã®å®è¡å¾ã«è¦ç´ ã® class 屿§ãã¢ãã¡ã¼ã·ã§ã³ã®ã¹ã¿ã¤ã«ãè¨è¿°ãããã®ã«è¨å®ãããã¨ã§ãã¢ãã¡ã¼ã·ã§ã³ãéå§ãããããã«ãã¦ãã¾ãã
ã¤ãã³ããåãåã
ã¤ãã³ãã¯ã以ä¸ã® listener() 颿°ã«éããã¾ãã
function listener(event) {
const l = document.createElement("li");
switch (event.type) {
case "animationstart":
l.textContent = `éå§: çµéæå» ${event.elapsedTime}`;
break;
case "animationend":
l.textContent = `çµäº: çµéæå» ${event.elapsedTime}`;
break;
case "animationiteration":
l.textContent = `æ°ããå復ã®éå§æå» ${event.elapsedTime}`;
break;
}
document.getElementById("output").appendChild(l);
}
ãã¡ãã®ã³ã¼ãããã¨ã¦ãåç´ã§ããevent.type ãè¦ã¦ã©ã®ã¤ãã³ããçºçãããã夿ããçºçããã¤ãã³ãã®è¨é²ã¨ãã¦ã<ul> ï¼é åºãªããªã¹ãï¼ã§é©åãªæ
å ±ãåºåãã¦ãã¾ãã
ãã®åºåã¯ãæçµçã«ä»¥ä¸ã®ããã«ãªãã¾ãã
- éå§: çµéæå» 0
- æ°ããå復ã®éå§æå» 3.01200008392334
- æ°ããå復ã®éå§æå» 6.00600004196167
- çµäº: çµéæå» 9.234000205993652
表示ãããæéã¯ãã¢ãã¡ã¼ã·ã§ã³ã®è¨å®æã«æå®ããæéããäºæ¸¬ããããã®ã«ã¨ã¦ãè¿ãããããå³å¯ã«ä¸è´ã¯ãã¦ããªããã¨ã«æ³¨æãã¦ãã ããã ã¾ããæçµã®ç¹°ãè¿ãã®å¾ã« animationiteration ã¤ãã³ããçºçãã¦ããªããã¨ã«ã注æãã¦ãã ããã ãã ããanimationend ã¤ãã³ãã¯çºçãã¦ãã¾ãã
ãã®ä¾ã宿ãããããã«ãã³ã³ãã³ãã®è¡¨ç¤ºã¨åä¿¡ããã¤ãã³ãã®æ å ±ãã¹ã¯ãªãããæ¿å ¥ããããã«ç¨ãã HTML ææ¸ã以ä¸ã«æ²è¼ãã¾ãã
<h1 id="watch-me">ãããåãã®ãè¦ã¦ãã ãã</h1>
<p>
ãã®ä¾ã¯ãCSS ã¢ãã¡ã¼ã·ã§ã³ã使ç¨ã㦠<code>H1</code> è¦ç´ ããã¼ã¸ä¸ã§ç§»åãããæ¹æ³ã示ãã¦ãã¾ãã
</p>
<p>
ããã«ãã¢ãã¡ã¼ã·ã§ã³ã¤ãã³ããçºçãããã³ã«ããã¹ããåºåãããããåä½ã確èªã§ãã¾ãã
</p>
<ul id="output"></ul>
ããã¦ãã¡ãã¯ã©ã¤ãåºåã§ãã
ã¡ã¢: ã¢ãã¡ã¼ã·ã§ã³ãè¦ãã«ã¯ãã¼ã¸ãåèªã¿è¾¼ã¿ãã¦ãã ããã
display 㨠content-visibility ã®ã¢ãã¡ã¼ã·ã§ã³
ãã®ä¾ã¯ãdisplay 㨠content-visibility ãã¢ãã¡ã¼ã·ã§ã³ãããæ¹æ³ã示ãã¦ããã¾ãããã®åä½ã¯ãä¾ãã°ã³ã³ããã¼ã display: none ã§ DOM ããåé¤ãããããå³åº§ã«æ¶ããã®ã§ã¯ãªã opacity ã使ã£ã¦æ»ããã«ãã§ã¼ãã¢ã¦ãããããã¨ãã£ããåºç¾/æ¶å¤±ã¢ãã¡ã¼ã·ã§ã³ã®ä½æã«æç¨ã§ãã
対å¿ãã¦ãããã©ã¦ã¶ã¼ã§ã¯ãdisplay 㨠content-visibility ã®ã¢ãã¡ã¼ã·ã§ã³ãã颿£ã¢ãã¡ã¼ã·ã§ã³åã®ä¸ç¨®ãç¨ãã¦å®ç¾ãã¾ããããã¯ä¸è¬çã«ãããããã£ã 2 ã¤ã®å¤ã®éãã¢ãã¡ã¼ã·ã§ã³ããéç¨ã§ãä¸éç¹ï¼50% å°ç¹ï¼ã§å¤ãåãæ¿ãããã¨ãæå³ãã¾ãã
ãã ããdisplay: none ã¾ã㯠content-visibility: hidden ããå¯è¦ç¶æ
ã¸ã®ã¢ãã¡ã¼ã·ã§ã³ããããã¯ãã®éã®å ´åã¯ä¾å¤ã§ãããã®å ´åããã©ã¦ã¶ã¼ã¯ä¸¡æ¹ã®å¤ãåãæ¿ãããã¨ã§ãã¢ãã¡ã¼ã·ã§ã³ã®å
¨æéã«ããã£ã¦ã³ã³ãã³ãã表示ãããããã«ãã¾ãã
ãã®ããä¾ãã°ã
displayãnoneããblockï¼ã¾ãã¯ä»ã®å¯è¦ç¶æ ã®displayå¤ï¼ã¸ã¢ãã¡ã¼ã·ã§ã³ãããå ´åãã¢ãã¡ã¼ã·ã§ã³æéã®0%ã®æç¹ã§å¤ãblockã«åãæ¿ãããããã¢ãã¡ã¼ã·ã§ã³å ¨ä½ãéãã¦å¯è¦ç¶æ ãç¶æããã¾ããdisplayãblockï¼ã¾ãã¯ä»ã®å¯è¦ç¶æ ã®displayå¤ï¼ããnoneã¸ã¢ãã¡ã¼ã·ã§ã³ãããå ´åãã¢ãã¡ã¼ã·ã§ã³æéã®100%ã®æç¹ã§å¤ãnoneã«åãæ¿ãããããã¢ãã¡ã¼ã·ã§ã³å ¨ä½ãéãã¦å¯è¦ç¶æ ãç¶æããã¾ãã
HTML
ãã® HTML ã«ã¯ 2 ã¤ã® <p> è¦ç´ ãå«ã¾ãã¦ããããã®éã® <div> ã® display ã none ãã block ã¸ã¢ãã¡ã¼ã·ã§ã³ããã¾ãã
<p>
ç»é¢ã®ã©ãããã¯ãªãã¯ããããä»»æã®ãã¼ãæ¼ãã¨ã<code><div></code> ãé表示ã¨è¡¨ç¤ºã®éã§åãæ¿ããã¾ãã
</p>
<div>
ãã㯠<code><div></code> è¦ç´ ã§ã <code>display: none; opacity: 0</code> 㨠<code>display: block; opacity: 1</code> ã®éãã¢ãã¡ã¼ã·ã§ã³ãã¾ãããããã§ãããï¼
</div>
<p>
ããã¯ã<code>display: none;</code> ãä¸è¨ã® <code><div></code> ã«å¯¾ãã¦é©ç¨ã»è§£é¤ããã¦ãããã¨ã示ãå¥ã®æ®µè½ã§ãããã <code>opacity</code> ã®ã¿ã夿´ããã¦ããå ´åãDOM å
ã®ç©ºéã常ã«å æãç¶ãããã¨ã«ãªãã¾ãã
</p>
CSS
html {
height: 100vh;
}
div {
font-size: 1.6rem;
padding: 20px;
border: 3px solid red;
border-radius: 20px;
width: 480px;
opacity: 0;
display: none;
}
/* ã¢ãã¡ã¼ã·ã§ã³ã¯ã©ã¹ */
div.fade-in {
display: block;
animation: fade-in 0.7s ease-in forwards;
}
div.fade-out {
animation: fade-out 0.7s ease-out forwards;
}
/* ã¢ãã¡ã¼ã·ã§ã³ã®ãã¼ãã¬ã¼ã */
@keyframes fade-in {
0% {
opacity: 0;
display: none;
}
100% {
opacity: 1;
display: block;
}
}
@keyframes fade-out {
0% {
opacity: 1;
display: block;
}
100% {
opacity: 0;
display: none;
}
}
ãã¼ãã¬ã¼ã ã¢ãã¡ã¼ã·ã§ã³ã« display ããããã£ãå«ã¾ãã¦ãããã¨ã«æ³¨æãã¦ãã ããã
JavaScript
æå¾ã«ãã¢ãã¡ã¼ã·ã§ã³ãèµ·åããããã®ã¤ãã³ããªã¹ãã¼ãè¨å®ãã JavaScript ãå°ã追å ãã¾ããå
·ä½çã«ã¯ã表示ããããã¨ãã« <div> ã« fade-in ã¯ã©ã¹ã追å ããé表示ã«ãããã¨ãã« fade-out ã追å ãã¾ãã
const divElem = document.querySelector("div");
const htmlElem = document.querySelector(":root");
htmlElem.addEventListener("click", showHide);
document.addEventListener("keydown", showHide);
function showHide() {
if (divElem.classList[0] === "fade-in") {
divElem.classList.remove("fade-in");
divElem.classList.add("fade-out");
} else {
divElem.classList.remove("fade-out");
divElem.classList.add("fade-in");
}
}
çµæ
ãã®ã³ã¼ãã¯ä»¥ä¸ã®éãã¬ã³ããªã³ã°ããã¾ãã