CSSã¢ãŒã·ã§ã³ãã¹è£éã¢ã«ãŽãªãºã ã®è©³çŽ°ãæ¢ããäžçäžã®éçºè ã倿§ãªãã©ãããã©ãŒã ãããã€ã¹ã§æµéºã§é åçãªã¢ãã¡ãŒã·ã§ã³ãäœæã§ããããæ¯æŽããŸãã
CSSã¢ãŒã·ã§ã³ãã¹è£éã¢ã«ãŽãªãºã ïŒã°ããŒãã«ãªèŠèŽè ã®ããã®æ»ãããªãã¹ã¢ãã¡ãŒã·ã§ã³ã®äœæ
é²åãç¶ããWebãã¶ã€ã³ãšéçºã®äžçã§ã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒUXïŒãæãéèŠã§ãããŠãŒã¶ãŒãæ¹ãã€ããæ³šæãåŒããããžã¿ã«ã€ã³ã¿ãŒãã§ãŒã¹ãéããŠã·ãŒã ã¬ã¹ã«èªå°ããããšãäžå¯æ¬ ã§ããUXãå€§å¹ ã«åäžããã匷åãªãã¯ããã¯ã®äžã€ãã¢ãã¡ãŒã·ã§ã³ã§ããCSSã®ç¡æ°ã®ã¢ãã¡ãŒã·ã§ã³æ©èœã®äžã§ããã¢ãŒã·ã§ã³ãã¹ã¯èŠçŽ ãè€éãªSVGãã¹ã«æ²¿ã£ãŠã¢ãã¡ãŒã·ã§ã³ãããèœåã§éç«ã£ãŠããŸããããããçã«æµéºã§èªç¶ã«èŠããåããå®çŸããã«ã¯ããã®åºç€ãšãªãè£éã¢ã«ãŽãªãºã ãæ·±ãçè§£ããå¿ èŠããããŸãããã®èšäºã§ã¯ãCSSã¢ãŒã·ã§ã³ãã¹è£éã®é åçãªäžçãæãäžããäžçäžã®éçºè ãæŽç·Žãããæ»ãããªã¢ãã¡ãŒã·ã§ã³ãäœæããããã®æŽå¯ãæäŸããŸãã
ã¢ãŒã·ã§ã³ãã¹ã®å
ã¢ã«ãŽãªãºã ãåæããåã«ãCSSã¢ãŒã·ã§ã³ãã¹ãäœãæäŸããããç°¡åã«æ¯ãè¿ããŸããããããã¯ããã¹ïŒéåžžã¯SVGãã¹ïŒãå®çŸ©ãããã®ãã¹ã«èŠçŽ ãã¢ã¿ããããŠããã®è»éã«æ²¿ã£ãŠäœçœ®ãå転ãã¹ã±ãŒã«ãã¢ãã¡ãŒã·ã§ã³åããããšãã§ããŸããããã«ãããè€éãªè£œåãã¢ã³ã¹ãã¬ãŒã·ã§ã³ãã€ã³ã¿ã©ã¯ãã£ããªã€ã³ãã©ã°ã©ãã£ãã¯ãããé åçãªãªã³ããŒãã£ã³ã°ãããŒãWebã¢ããªã±ãŒã·ã§ã³å ã§ã®é åçãªã¹ããŒãªãŒããªã³ã°ãŸã§ãç¡éã®å¯èœæ§ãåºãããŸãã
äŸãã°ãæ°ããã¬ãžã§ããã玹ä»ããEã³ããŒã¹ãã©ãããã©ãŒã ãèããŠã¿ãŸããããéçãªç»åã®ä»£ããã«ãã¬ãžã§ããããã®æå³ãããäœ¿çšæ¹æ³ãæš¡å£ãããã¹ã«æ²¿ã£ãŠã¢ãã¡ãŒã·ã§ã³ãããããšã§ããã®æºåž¯æ§ãæ©èœãåçã§èšæ¶ã«æ®ãæ¹æ³ã§ç€ºãããšãã§ããŸããã°ããŒãã«ãªãã¥ãŒã¹ãµã€ãã§ã¯ãäžçå°å³äžã§ãã¥ãŒã¹ã¢ã€ã³ã³ãå®çŸ©æžã¿ã®ã«ãŒããç§»åããããã«ã¢ãã¡ãŒã·ã§ã³ãããèšäºã®å°éç¯å²ãèŠèŠåããããšãã§ããŸãã
è£éã®çè§£ïŒæ»ãããªåãã®æ žå¿
ã¢ãã¡ãŒã·ã§ã³ã®æ žå¿ã¯ãæéçµéã«äŒŽãå€åã§ããèŠçŽ ããã¹ã«æ²¿ã£ãŠç§»åãããšããããã¯äžé£ã®äœçœ®ãå ããŸããè£éãšã¯ãããŒãã€ã³ãïŒããŒãã¬ãŒã ïŒéã®äžéäœçœ®ãèšç®ããé£ç¶çãªåãã®é¯èŠãäœãåºãããã»ã¹ã§ããç°¡åã«èšãã°ããªããžã§ã¯ãã®éå§ç¹ãšçµäºç¹ãããã£ãŠããã°ãè£éã¯ãã®éã®ãã¹ãŠã®ç¹ãèšç®ããã®ã«åœ¹ç«ã¡ãŸãã
ã¢ãã¡ãŒã·ã§ã³ã®å¹æã¯ããã®è£éã®è³ªã«ããã£ãŠããŸããäžé©åã«éžæãŸãã¯å®è£ ãããè£éã¢ã«ãŽãªãºã ã¯ãããã¡ãªããäžèªç¶ã§ãäžå¿«ãªåããåŒãèµ·ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæãªãå¯èœæ§ããããŸããéã«ãé©åã«èª¿æŽãããã¢ã«ãŽãªãºã ã¯ãæŽç·Žãããæµéºã§ãçŸçã«å¿å°ããã¢ãã¡ãŒã·ã§ã³ãæäŸããçŽæçã§å¿çæ§ãé«ããšæããããŸãã
ã¢ãŒã·ã§ã³ãã¹è£éã®äž»èŠæŠå¿µ
ã¢ã«ãŽãªãºã ãçè§£ããããã«ã¯ãããã€ãã®åºæ¬çãªæŠå¿µãææ¡ããå¿ èŠããããŸãã
- ãã¹å®çŸ©ïŒã¢ãŒã·ã§ã³ãã¹ã¯SVGãã¹ããŒã¿ã«äŸåããŸãããããã®ãã¹ã¯äžé£ã®ã³ãã³ãïŒM for moveto, L for lineto, C for cubic Bézier curve, Q for quadratic Bézier curve, A for elliptical arcãªã©ïŒã«ãã£ãŠå®çŸ©ãããŸããSVGãã¹ã®è€éãã¯ãå¿ èŠãªè£éã®è€éãã«çŽæ¥åœ±é¿ããŸãã
- ããŒãã¬ãŒã ïŒã¢ãã¡ãŒã·ã§ã³ã¯éåžžãç¹å®ã®æç¹ã§ã®èŠçŽ ã®ç¶æ ãæå®ããããŒãã¬ãŒã ã«ãã£ãŠå®çŸ©ãããŸããã¢ãŒã·ã§ã³ãã¹ã®å Žåããããã®ããŒãã¬ãŒã ã¯ãã¹ã«æ²¿ã£ãèŠçŽ ã®äœçœ®ãšåããå®çŸ©ããŸãã
- ã€ãŒãžã³ã°é¢æ°ïŒãããã®é¢æ°ã¯ãã¢ãã¡ãŒã·ã§ã³ã®æéçµéã«äŒŽãå€åçãå¶åŸ¡ããŸããäžè¬çãªã€ãŒãžã³ã°é¢æ°ã«ã¯ãlinearïŒäžå®é床ïŒãease-inïŒãã£ããå§ãŸãéãçµããïŒãease-outïŒéãå§ãŸããã£ããçµããïŒãease-in-outïŒãã£ããå§ãŸããšçµãããäžéã¯éãïŒãªã©ããããŸããã€ãŒãžã³ã°ã¯ãã¢ãã¡ãŒã·ã§ã³ãèªç¶ã§ææ©çã«æããããçŸå®äžçã®ç©çæ³åãæš¡å£ããããã«äžå¯æ¬ ã§ãã
- ãã©ã¡ãŒã¿åïŒãã¹ã¯æ¬è³ªçã«ç©ºéå ã®æ²ç·ã§ããããã«æ²¿ã£ãŠã¢ãã¡ãŒã·ã§ã³ãããã«ã¯ãæ²ç·äžã®ä»»æã®ç¹ãåäžã®ãã©ã¡ãŒã¿ã§è¡šçŸããæ¹æ³ãå¿ èŠã§ããéåžžããã¹ã«æ²¿ã£ãé²è¡ç¶æ³ã衚ã0ãã1ïŒãŸãã¯0%ãã100%ïŒã®å€ã䜿çšãããŸãã
CSSã¢ãŒã·ã§ã³ãã¹è£éã¢ã«ãŽãªãºã ïŒè©³çްãªè§£èª¬
CSSã®ã¢ãŒã·ã§ã³ãã¹ä»æ§ã¯ãåäžã®ã¢ããªã·ãã¯ãªè£éã¢ã«ãŽãªãºã ãèŠå®ããŠããããã§ã¯ãããŸããã代ããã«ãããã¯åºç€ãšãªãã¬ã³ããªã³ã°ãšã³ãžã³ã®è§£éãšå®è£ ã«äŸåããŠãããããã¯ãã°ãã°SVGã¢ãã¡ãŒã·ã§ã³ãåºç€ãšãªããã©ãŠã¶æè¡ã®èœåãæŽ»çšããŸããäž»ãªç®æšã¯ãå®çŸ©ãããããŒãã¬ãŒã ãšã€ãŒãžã³ã°é¢æ°ãå°éããªãããæå®ããããã¹ã«æ²¿ã£ãä»»æã®æç¹ã§ã®èŠçŽ ã®äœçœ®ãšåããæ£ç¢ºã«æ±ºå®ããããšã§ãã
倧ãŸãã«èšããšãããã»ã¹ã¯æ¬¡ã®ã¹ãããã«åããããšãã§ããŸãã
- ãã¹ã®è§£æïŒSVGãã¹ããŒã¿ã¯ã䜿çšå¯èœãªæ°åŠç衚çŸã«è§£æãããŸããããã«ã¯ãè€éãªãã¹ãããåçŽãªã»ã°ã¡ã³ãïŒç·ãæ²ç·ãå匧ïŒã«åè§£ããããšãå«ãŸããŸãã
- ãã¹é·ã®èšç®ïŒäžå®ã®é床ãšé©åãªã€ãŒãžã³ã°ã確ä¿ããããã«ããã¹ã®å šé·ãèšç®ãããããšããããããŸããããã¯ãè€éãªããžã§æ²ç·ãå匧ã«ãšã£ãŠã¯ç°¡åãªäœæ¥ã§ã¯ãããŸããã
- ãã¹ã®ãã©ã¡ãŒã¿åïŒæ£èŠåãããé²è¡å€ïŒ0ãã1ïŒãããã¹äžã®å¯Ÿå¿ããç¹ãšãã®æ¥ç·ïŒåããæ±ºå®ããïŒã«ãããã³ã°ãã颿°ãå¿ èŠã§ãã
- ããŒãã¬ãŒã ã®è©äŸ¡ïŒã¢ãã¡ãŒã·ã§ã³äžã®ä»»æã®æç¹ã§ããã©ãŠã¶ã¯ã¿ã€ã ã©ã€ã³ã«æ²¿ã£ãçŸåšã®é²è¡ç¶æ³ã決å®ããé©åãªã€ãŒãžã³ã°é¢æ°ãé©çšããŸãã
- ãã¹ã«æ²¿ã£ãè£éïŒã€ãŒãžã³ã°ãããé²è¡å€ã䜿çšããŠãã¢ã«ãŽãªãºã ã¯ãã©ã¡ãŒã¿åããããã¹äžã®å¯Ÿå¿ããç¹ãèŠã€ããŸããããã«ã¯ãxãy座æšã®èšç®ãå«ãŸããŸãã
- åãã®èšç®ïŒãã¹äžã®èšç®ãããç¹ã§ã®æ¥ç·ãã¯ãã«ããèŠçŽ ã®åè»¢ãæ±ºå®ããããã«äœ¿çšãããŸãã
äžè¬çãªã¢ã«ãŽãªãºã çã¢ãããŒããšèª²é¡
CSS仿§ããã¬ãŒã ã¯ãŒã¯ãæäŸããŠããŸããããããã®ã¹ãããã®å®éã®å®è£ ã«ã¯ãããããé·æãšçæãæã€æ§ã ãªã¢ã«ãŽãªãºã æŠç¥ãå«ãŸããŸãã
1. ç·åœ¢è£éïŒçŽç·ãã¹ïŒ
åçŽãªç·åã®å Žåãè£éã¯ç°¡åã§ãã2ã€ã®ç¹P1=(x1, y1)ãšP2=(x2, y2)ãããã³é²è¡å€'t'ïŒ0ãã1ïŒãããå Žåãç·åäžã®ä»»æã®ç¹Pã¯æ¬¡ã®ããã«èšç®ãããŸãã
P = P1 + t * (P2 - P1)
ããã¯æ¬¡ã®ããã«å±éãããŸãã
x = x1 + t * (x2 - x1)
y = y1 + t * (y2 - y1)
課é¡ïŒããã¯çŽç·ã«ã®ã¿é©çšãããŸããçŸå®äžçã®ãã¹ã¯ãã°ãã°æ²ç·ã§ãã
2. ããžã§æ²ç·è£é
SVGãã¹ã¯é »ç¹ã«ããžã§æ²ç·ïŒ2次ããã³3次ïŒã䜿çšããŸããããžã§æ²ç·ã«æ²¿ã£ãè£éã«ã¯ãæ²ç·ã®æ°åŒã䜿çšããããšãå«ãŸããŸãã
2次ããžã§æ²ç·ïŒ B(t) = (1-t)²Pâ + 2(1-t)tPâ + t²Pâ
3次ããžã§æ²ç·ïŒ B(t) = (1-t)³Pâ + 3(1-t)²tPâ + 3(1-t)t²Pâ + t³Pâ
ããã§PâãPâãPâãPâã¯å¶åŸ¡ç¹ã§ãã
課é¡ïŒäžãããã't'ã«å¯ŸããŠããžã§æ²ç·ãçŽæ¥è©äŸ¡ããã®ã¯ç°¡åã§ããããããããžã§æ²ç·ã«æ²¿ã£ãŠåäžãªé床ãéæããããšã¯èšç®ã³ã¹ããé«ãã§ãã't'ã®ç·åœ¢çãªé²è¡ã¯ãç§»åè·é¢ã®ç·åœ¢çãªé²è¡ã«ã¯ãªããŸãããåäžãªé床ãéæããã«ã¯ãéåžžãæ¬¡ã®ãããããå¿ èŠã§ãã
- 现ååïŒæ²ç·ãå€ãã®å°ããªãã»ãŒç·åœ¢ã®ã»ã°ã¡ã³ãã«åå²ãããããã®ã»ã°ã¡ã³ãã®äžç¹éã§ç·åœ¢è£éããŸããã»ã°ã¡ã³ããå€ãã»ã©ãåãã¯ããæ»ããã§æ£ç¢ºã«ãªããŸãããèšç®ã³ã¹ãã¯é«ããªããŸãã
- æ±æ ¹/éãã©ã¡ãŒã¿åïŒããã¯ãç¹å®ã®åŒ§é·ã«å¯Ÿå¿ãã't'ã®å€ãèŠã€ããããã®ãããæ°åŠçã«å³å¯ã§ããè€éãªã¢ãããŒãã§ãã
ãã©ãŠã¶ã¯ã粟床ãšããã©ãŒãã³ã¹ã®ãã©ã³ã¹ãåãããã«ã现ååãšè¿äŒŒæè¡ãçµã¿åãããŠæ¡çšããããšããããããŸãã
3. å匧è£é
æ¥å匧ãç¹å®ã®è£éããžãã¯ãå¿ èŠãšããŸããèšç®ã«ã¯ãæ¥åã®äžå¿ãéå§è§åºŠãšçµäºè§åºŠãèšç®ãããããã®è§åºŠã®éã§è£éããããšãå«ãŸããŸããSVGã®ååŒ§ä»æ§ã¯éåžžã«è©³çްã§ãããååŸããŒãã§ãã£ãããç¹ãé¢ããããŠããå Žåãªã©ã®ãšããžã±ãŒã¹ãåŠçããããšãå«ãŸããŸãã
課é¡ïŒå匧ãã¹ãæ£ãã远åŸãããæ£ããæ¹åïŒsweep-flagïŒãç¶æãããããšãä¿èšŒããããšãç¹ã«ã»ã°ã¡ã³ãéãç§»è¡ããéã«éèŠã§ãã
4. æ¥ç·ãšåãã®èšç®
èŠçŽ ãç§»åæ¹åãåãããã«ããã«ã¯ããã®å転ãèšç®ããå¿ èŠããããŸããããã¯éåžžããã¹äžã®è£éãããç¹ã§ã®æ¥ç·ãã¯ãã«ãèŠã€ããããšã«ãã£ãŠè¡ãããŸãããã®æ¥ç·ãã¯ãã«ã®è§åºŠãå¿ èŠãªå転ãäžããŸãã
ããžã§æ²ç·B(t)ã®å Žåãæ¥ç·ã¯ãã®å°é¢æ°B'(t)ã§ãã
課é¡ïŒæ¥ç·ã¯ç¹å®ã®ç¹ïŒã«ã¹ããªã©ïŒã§ãŒãã«ãªãå¯èœæ§ããããæªå®çŸ©ãŸãã¯äžå®å®ãªå転ã«ã€ãªããããšããããŸãããããã®ã±ãŒã¹ãé©åã«åŠçããããšã¯ãæ»ãããªã¢ãã¡ãŒã·ã§ã³ã«ãšã£ãŠéèŠã§ãã
ãã©ãŠã¶ã®å®è£ ãšã¯ãã¹ãã©ãŠã¶äºææ§
Webæšæºã®çŸããã¯ãçžäºéçšæ§ãç®æããŠããããšã§ããããããã¢ãŒã·ã§ã³ãã¹è£éã®ãããªè€éãªã¢ã«ãŽãªãºã ã®å®è£ ã¯ããã©ãŠã¶ïŒChromeãFirefoxãSafariãEdgeãªã©ïŒéã§ãããã«ç°ãªãå ŽåããããŸããããã«ãããç¹ã«éåžžã«è€éãªãã¹ãè€éãªã¿ã€ãã³ã°é¢æ°ã䜿çšããå Žåã«ãã¢ãã¡ãŒã·ã§ã³ã®æ»ããããé床ããŸãã¯åäœã«åŸ®åŠãªéããçããå¯èœæ§ããããŸãã
ã°ããŒãã«éçºè ã®ããã®æŠç¥ïŒ
- 培åºçãªãã¹ãïŒã°ããŒãã«ãªèŠèŽè ã䜿çšããã¿ãŒã²ãããã©ãŠã¶å šäœã§ãã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ãåžžã«ãã¹ãããŠãã ãããæ§ã ãªå°åã§ã®ç°ãªãããã€ã¹ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®æ®åçãèæ ®ããŠãã ããã
- ãã©ãŒã«ããã¯/代æ¿ãšããŠSVGã¢ãã¡ãŒã·ã§ã³ïŒSMILïŒã䜿çšããïŒCSSã¢ãŒã·ã§ã³ãã¹ã¯åŒ·åã§ãããäžéšã®è€éãªã¢ãã¡ãŒã·ã§ã³ãå³å¯ãªã¯ãã¹ãã©ãŠã¶ã®äžè²«æ§ãéèŠãªå Žåã«ã¯ãå€ããåºããµããŒããããŠããSVGå ã®Synchronized Multimedia Integration LanguageïŒSMILïŒãæå¹ãªä»£æ¿ãŸãã¯è£è¶³ããŒã«ã«ãªãåŸãŸãã
- å¯èœãªå Žåã¯ãã¹ãç°¡çŽ åããïŒæå€§éã®äºææ§ãšããã©ãŒãã³ã¹ãåŸãããã«ãèŠèŠçãªå¿ å®åºŠãèš±ãç¯å²ã§SVGãã¹ãç°¡çŽ åããŠãã ãããåçŽãªåœ¢ç¶ã§ååãªå Žåã¯ãéå°ãªç¹ãè€éãããæ²ç·ãé¿ããŠãã ããã
- JavaScriptã©ã€ãã©ãªã掻çšããïŒGSAPïŒGreenSock Animation PlatformïŒã®ãããªã©ã€ãã©ãªã¯ãæŽç·Žããããã¹ã¢ãã¡ãŒã·ã§ã³ãå«ãå ç¢ãªã¢ãã¡ãŒã·ã§ã³æ©èœãæäŸããŸãããããã¯ãã°ãã°ãã¯ãã¹ãã©ãŠã¶ã®äžäžèŽãå¹³æ»åããããå€ãã®å¶åŸ¡ãæäŸããç¬èªã®æé©åãããè£éã¢ã«ãŽãªãºã ãæäŸããŸããäŸãã°ãGSAPã®MotionPathPluginã¯ãã®ããã©ãŒãã³ã¹ãšæè»æ§ã§æåã§ãã
ã°ããŒãã«ãªèŠèŽè ã®ããã®ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé
ã°ããŒãã«ãªèŠèŽè ã®ããã«ã¢ãã¡ãŒã·ã§ã³ãèšèšããéãããã©ãŒãã³ã¹ã¯éèŠãªèŠçŽ ã§ããã€ã³ã¿ãŒãããã€ã³ãã©ãè匱ãªå°åããå€ããŠäœã¹ããã¯ãªããã€ã¹ã䜿çšããŠãããŠãŒã¶ãŒã¯ãã¢ãã¡ãŒã·ã§ã³ãé ãã£ããUIããªãŒãºãåŒãèµ·ãããããããšããšã¯ã¹ããªãšã³ã¹ãå€§å¹ ã«äœäžããŸãã
æé©åæè¡ïŒ
- ãã¹ã®è€éããæå°éã«æããïŒåè¿°ã®ããã«ãåçŽãªãã¹ã¯è§£æãšè£éãé«éã§ãã
- å¿ èŠã«å¿ããŠãã¬ãŒã ã¬ãŒããäžããïŒé«ããã¬ãŒã ã¬ãŒãã¯æãŸããã§ãããã¢ãã¡ãŒã·ã§ã³ã®ãã¬ãŒã ã¬ãŒããäžããïŒäŸïŒ60fpsã®ä»£ããã«30fpsïŒããšã§ãèŠèŠçãªå€§å¹ ãªäœäžãªãã«ãæ§èœã®äœãããŒããŠã§ã¢ã§ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããå ŽåããããŸãã
- ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã䜿çšããïŒãã©ãŠã¶ã¯CSSã¢ãã¡ãŒã·ã§ã³ã«GPUã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã䜿çšããããã«æé©åãããŠããŸããã¢ãã¡ãŒã·ã§ã³ããããæŽ»çšããããã«èšå®ãããŠããããšã確èªããŠãã ããïŒäŸïŒ`top`ã`left`ã§ã¯ãªã`transform`ããããã£ãã¢ãã¡ãŒã·ã§ã³åããïŒã
- ã¹ãããã«ãšãããŠã³ã¹ïŒã¢ãã¡ãŒã·ã§ã³ããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ïŒã¹ã¯ããŒã«ããªãµã€ãºãªã©ïŒã«ãã£ãŠããªã¬ãŒãããå Žåã¯ããããã®ããªã¬ãŒãã¹ãããã«ãŸãã¯ãããŠã³ã¹ããŠãéå°ãªåã¬ã³ããªã³ã°ãèšç®ãé¿ããããã«ããŠãã ããã
- ã¢ãã¡ãŒã·ã§ã³ã©ã€ãã©ãªãæ€èšããïŒåè¿°ã®éããGSAPã®ãããªã©ã€ãã©ãªã¯ããã©ãŒãã³ã¹ãé«åºŠã«æé©åãããŠããŸãã
- ããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãïŒã¢ãã¡ãŒã·ã§ã³ãç¡å¹ã«ãªã£ãŠããããŸãã¯ããã©ãŒãã³ã¹ã«åé¡ããããŠãŒã¶ãŒã®ããã«ãæ©èœã¯ãããå£åçã®ãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
ã¢ã¯ã»ã·ããªãã£ãšã¢ãŒã·ã§ã³ãã¹
ã¢ãã¡ãŒã·ã§ã³ãç¹ã«é«éã§è€éããŸãã¯å埩çãªãã®ã¯ãã¢ã¯ã»ã·ããªãã£ã®èª²é¡ãåŒãèµ·ããå¯èœæ§ããããŸããååºé害ïŒä¹ãç©é ãïŒãèªç¥é害ãæã€ãŠãŒã¶ãŒããŸãã¯ã¹ã¯ãªãŒã³ãªãŒããŒã«äŸåãããŠãŒã¶ãŒã«ãšã£ãŠãã¢ãã¡ãŒã·ã§ã³ã¯æ¹åæèŠã倱ãããããã¢ã¯ã»ã¹äžèœã«ãããããããšããããŸãã
ã°ããŒãã«ãªã¢ã¯ã»ã·ããªãã£ã®ããã®ãã¹ããã©ã¯ãã£ã¹ïŒ
prefers-reduced-motion
ã¡ãã£ã¢ã¯ãšãªãå°éããïŒããã¯åºæ¬çãªCSSæ©èœã§ããéçºè ã¯ããŠãŒã¶ãŒãåãã®æå¶ãèŠæ±ãããã©ãããæ€åºããããã«å¿ããŠã¢ãã¡ãŒã·ã§ã³ãç¡å¹åãŸãã¯ç°¡çŽ åããå¿ èŠããããŸããããã¯ãã¢ã¯ã»ã·ããªãã£ã®ããŒãºãåºç¯å²ã«ãããã°ããŒãã«ãªèŠèŽè ã«ãšã£ãŠéåžžã«éèŠã§ãã- ã¢ãã¡ãŒã·ã§ã³ãçããç®çã«åã£ããã®ã«ããïŒç¡éã«ã«ãŒãããã¢ãã¡ãŒã·ã§ã³ããæç¢ºãªç®çãæãããªãã¢ãã¡ãŒã·ã§ã³ã¯é¿ããŠãã ããã
- ã³ã³ãããŒã«ãæäŸããïŒè€éãŸãã¯é·å°ºã®ã¢ãã¡ãŒã·ã§ã³ã«ã€ããŠã¯ãäžæåæ¢ãåçããŸãã¯åéããããã®ã³ã³ãããŒã«ãæäŸããããšãæ€èšããŠãã ããã
- å¯èªæ§ã確ä¿ããïŒã¢ãã¡ãŒã·ã§ã³ãã¢ã¯ãã£ããªå Žåã§ããããã¹ããèªã¿ããããã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ãã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ããã
- æ¯æŽæè¡ã§ãã¹ãããïŒã¢ãŒã·ã§ã³ãã¹ã¯äž»ã«èŠèŠçãªã¬ã³ããªã³ã°ã«åœ±é¿ããŸãããã¢ãã¡ãŒã·ã§ã³ãå®è¡äžãŸãã¯ç¡å¹ãªå Žåã§ããåºç€ãšãªãã³ã³ãã³ããšæ©èœãã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ããã
äŸïŒã¢ãŒã·ã§ã³ãã¹ã䜿çšãã補åãã¢ãŒã§ããŠãŒã¶ãŒãprefers-reduced-motion
ãæå¹ã«ããŠããå Žåã補åãè€éãªãã¹ã«æ²¿ã£ãŠã¢ãã¡ãŒã·ã§ã³ããã代ããã«ãæç¢ºãªããã¹ã説æä»ãã®äžé£ã®éçãªç»åã衚瀺ãããããã®éã埮åŠãªãã§ãŒãã§åãæ¿ãããªã©ã®å¯Ÿå¿ãèããããŸãã
ã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ã®åœéåãšããŒã«ã©ã€ãŒãŒã·ã§ã³
ã°ããŒãã«ãªèŠèŽè åãã«èšèšããéã«ã¯ãã¢ãã¡ãŒã·ã§ã³ãããŒã«ã©ã€ãºãããã³ã³ãã³ããç°ãªãæåçæåŸ ãšã©ã®ããã«çžäºäœçšããããèæ ®ããŠãã ããã
- ããã¹ãã®å¯èªæ§ïŒã¢ãã¡ãŒã·ã§ã³ããã¹ã«æ²¿ã£ãŠããã¹ããåããå ŽåãããŒã«ã©ã€ãºãããããã¹ãïŒé·ããæ¹åãå€§å¹ ã«ç°ãªãå¯èœæ§ãããïŒããã¹å ã«åãŸããèªã¿ããããŸãŸã§ããããšã確èªããŠãã ãããããã¹ãã®æ¹åæ§ïŒå·Šããå³ãå³ããå·ŠïŒã¯ç¹ã«éèŠã§ãã
- æåç象城æ§ïŒç°ãªãæåã«ãããåãã圢ç¶ã«é¢é£ãã象城çãªæå³ã«æ³šæããŠãã ãããããæåã§ã¯æ»ããã§ãšã¬ã¬ã³ããªãã¹ããä»ã®å Žæã§ã¯ç°ãªã£ãŠèªèãããå¯èœæ§ããããŸãã
- ããŒã¹ãšã¿ã€ãã³ã°ïŒèªèãããããŒã¹ãæåã«ãã£ãŠç°ãªãå¯èœæ§ãããããšãèæ ®ããŠãã ãããã¢ãã¡ãŒã·ã§ã³ã®éåºŠãšæç¶æéããå¹ åºãèŠèŽè ã«ãšã£ãŠå¿«é©ã§å¹æçã§ããããšã確èªããŠãã ããã
- ã¿ã€ã ãŸãŒã³ãšãªã¢ã«ã¿ã€ã ããŒã¿ïŒã¢ãã¡ãŒã·ã§ã³ãæéäŸåã®æ å ±ãçŸå®äžçã®ã€ãã³ãïŒäŸïŒå°å³äžã®ãã©ã€ããã¹ïŒã«åå¿ããå Žåãã·ã¹ãã ãäžçäžã®ãŠãŒã¶ãŒã®ç°ãªãã¿ã€ã ãŸãŒã³ãšããŒã¿æŽæ°ãæ£ããåŠçããããšã確èªããŠãã ããã
å®è·µäŸïŒè¡æã®è»éã¢ãã¡ãŒã·ã§ã³
å®è·µçãªäŸã§èª¬æããŸãããïŒææã®åšããåšåããè¡æã®ã¢ãã¡ãŒã·ã§ã³ãããã¯ãè¡æç»åãã¹ããŒã¿ã¹ã衚瀺ããããã®äžè¬çãªUIãã¿ãŒã³ã§ãã
1. ãã¹ãå®çŸ©ãã
SVGã®åãŸãã¯æ¥åãã¹ã䜿çšããŠè»éã衚ãããšãã§ããŸãã
SVGæ¥åã®äœ¿çšïŒ
<svg width="400" height="400" viewBox="0 0 400 400"> <!-- Planet --> <circle cx="200" cy="200" r="50" fill="blue" /> <!-- Orbit Path (Invisible) --> <path id="orbitPath" d="M 200 100 A 100 100 0 1 1 200 300 A 100 100 0 1 1 200 100" fill="none" stroke="transparent" /> </svg>
`d`屿§ã¯ã(200, 200)ãäžå¿ãšããååŸ100ã®åã圢æããæ¥åãã¹ãå®çŸ©ããŸãã`A`ã³ãã³ãã¯æ¥å匧ã«äœ¿çšãããŸãã
2. ã¢ãã¡ãŒã·ã§ã³ãããèŠçŽ ãå®çŸ©ãã
ããã¯ç§ãã¡ã®è¡æã§ãããããããå°ããªSVGç»åãŸãã¯èæ¯ãæã€`div`ã«ãªããŸãã
<svg width="400" height="400" viewBox="0 0 400 400"> <!-- Planet --> <circle cx="200" cy="200" r="50" fill="blue" /> <!-- Orbit Path --> <path id="orbitPath" d="M 200 100 A 100 100 0 1 1 200 300 A 100 100 0 1 1 200 100" fill="none" stroke="transparent" /> <!-- Satellite --> <image id="satellite" href="satellite.png" width="20" height="20" /> </svg>
3. CSSã¢ãŒã·ã§ã³ãã¹ãé©çšãã
è¡æããã¹ã«ãªã³ã¯ããã¢ãã¡ãŒã·ã§ã³ãèšå®ããŸãã
#satellite { offset-path: path('M 200 100 A 100 100 0 1 1 200 300 A 100 100 0 1 1 200 100'); animation: orbit 10s linear infinite; transform-origin: 50% 50%; /* Important for rotation */ } @keyframes orbit { to { offset-distance: 100%; /* Animate along the path */ offset-rotate: auto; /* Rotate to follow the path tangent */ } }
解説ïŒ
animation: orbit 10s linear infinite;
ïŒ'orbit'ãšããååã®ã¢ãã¡ãŒã·ã§ã³ãé©çšãã10ç§éç¶ããäžå®é床ïŒlinearïŒã§å®è¡ãããç¡éã«ç¹°ãè¿ãããŸãã@keyframes
å ã®offset-distance: 100%;
ïŒããã¯çŸä»£ã®CSSã«ãããã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ã®æ žå¿ã§ããèŠçŽ ã«å®çŸ©ããããªãã»ãããã¹ã«æ²¿ã£ãŠ100%ç§»åããããã«æç€ºããŸããoffset-rotate: auto;
ïŒãã©ãŠã¶ã«ã远åŸããŠãããã¹ã®æ¥ç·ã«åãããŠèŠçŽ ãèªåçã«å転ãããããã«æç€ºããŸããããã«ãããè¡æã¯åžžã«ãã®é²è¡æ¹åãåããŸããoffset-path: path(...)
ïŒãã®ããããã£ã¯ãã¢ãã¡ãŒã·ã§ã³ãããèŠçŽ ã«é©çšãããå®çŸ©ããããã¹ã«ãªã³ã¯ããŸããïŒæ³šïŒä»¥åã®æ§æ`url(#id)`ãæ©èœããŸããã`path()`颿°ãããçŸä»£çã§ããïŒ
ãã®äŸã«é¢ããã°ããŒãã«ãªèæ ®äºé ïŒ
- è¡æç»åïŒ`satellite.png`ïŒã¯ãæ§ã ãªç»é¢å¯åºŠã«æé©åãããã¹ãã§ãã
- ææãšè»éã¯SVGã§ããããã¹ãŠã®è§£å床ã§ã¹ã±ãŒã©ãã«ã§ã·ã£ãŒãã§ãã
- ã¢ãã¡ãŒã·ã§ã³ã¯`linear`ã§`infinite`ã«èšå®ãããŠããŸããããè¯ãUXã®ããã«ã¯ãã€ãŒãžã³ã°ãæéã®æç¶æéãå°å ¥ããããšãã§ããŸãã`prefers-reduced-motion`ãèæ ®ãã代æ¿ã®éç衚瀺ãããã·ã³ãã«ãªã¢ãã¡ãŒã·ã§ã³ãæäŸããŠãã ããã
ã¢ãŒã·ã§ã³ãã¹è£éã®æªæ¥
Webã¢ãã¡ãŒã·ã§ã³ã®åéã¯ç¶ç¶çã«é²åããŠããŸããæ¬¡ã®ãããªããšãæåŸ ã§ããŸãã
- ããæŽç·Žãããã¢ã«ãŽãªãºã ïŒãã©ãŠã¶ã¯ãããžã§æ²ç·ãä»ã®è€éãªãã¹ã¿ã€ãã«å¯ŸããŠãããé«åºŠã§å¹ççãªè£éæè¡ãå®è£ ããå¯èœæ§ããããããã«æ»ããã§é«æ§èœãªã¢ãã¡ãŒã·ã§ã³ã«ã€ãªãããŸãã
- 匷åãããå¶åŸ¡ïŒæ°ããCSSããããã£ãæ¡åŒµæ©èœããè£éã«å¯Ÿãããã现ããå¶åŸ¡ãæäŸãããããããŸãããããã«ãããéçºè ã¯ãã¹ã«æ²¿ã£ãã«ã¹ã¿ã ã€ãŒãžã³ã°ãããã¹ã®æ¥åéšã§ã®ç¹å®ã®åäœãå®çŸ©ã§ããããã«ãªããŸãã
- ããè¯ãããŒã«ïŒã¢ãŒã·ã§ã³ãã¹ãããæ®åããã«ã€ããŠãã¢ãŒã·ã§ã³ãã¹äºæã®SVGãšCSSããšã¯ã¹ããŒãã§ããæ¹åããããã¶ã€ã³ããŒã«ãã¢ãã¡ãŒã·ã§ã³ãšãã£ã¿ãæåŸ ãããŸãã
- ã¢ã¯ã»ã·ããªãã£çµ±åã®åäžïŒã¢ã¯ã»ã·ããªãã£æ©èœãšã®ããæ·±ãçµ±åã«ãããã¢ãã¡ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹å¯èœãªä»£æ¿ææ®µãããç°¡åã«æäŸã§ããããã«ãªããŸãã
çµè«
CSSã¢ãŒã·ã§ã³ãã¹è£éã¯ãåçã§é åçãªWebãšã¯ã¹ããªãšã³ã¹ãäœæããããã®åŒ·åãªããŒã«ã§ããåºæ¬çãªç·åœ¢è£éããããžã§æ²ç·ãå匧ã»ã°ã¡ã³ãã®è€éããŸã§ãåºç€ãšãªãã¢ã«ãŽãªãºã ãçè§£ããããšã§ãéçºè ã¯èŠèŠçã«çŽ æŽãããã ãã§ãªããããã©ãŒãã³ã¹ãé«ããã¢ã¯ã»ã¹ããããã¢ãã¡ãŒã·ã§ã³ãäœæã§ããŸããã°ããŒãã«ãªèŠèŽè ã«ãšã£ãŠãã¯ãã¹ãã©ãŠã¶äºææ§ãããã©ãŒãã³ã¹ã®æé©åãã¢ã¯ã»ã·ããªãã£ãåœéåã«çްå¿ã®æ³šæãæãããšã¯ãåãªãè¯ãç¿æ £ã§ã¯ãªããæ®éçã«è¯å®çãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«äžå¯æ¬ ã§ããWebæè¡ã鲿©ãç¶ããã«ã€ããŠãæµéºã§çŽæçã§ãäžççã«å ±é³Žããã¢ãã¡ãŒã·ã§ã³ã®å¯èœæ§ã¯åºããç¶ããã§ãããã
å®è·µçãªæŽå¯ïŒ
- ç°¡åãªããšããå§ããïŒåºæ¬çãªSVGãã¹ãšCSSã¢ãŒã·ã§ã³ãã¹ã®ããããã£ããå§ããŠãã ããã
- å³å¯ã«ãã¹ãããïŒç°ãªãããã€ã¹ããã©ãŠã¶ããããã¯ãŒã¯æ¡ä»¶ã§ã¢ãã¡ãŒã·ã§ã³ãæ€èšŒããŠãã ããã
- ã¢ã¯ã»ã·ããªãã£ãåªå
ããïŒåžžã«
prefers-reduced-motion
ãå®è£ ããŠãã ããã - ã©ã€ãã©ãªãæ€èšããïŒè€éãªãããžã§ã¯ãã§ã¯ãæé©åãããããã©ãŒãã³ã¹ãšæ©èœã®ããã«ãGSAPã®ãããªç¢ºç«ãããã¢ãã¡ãŒã·ã§ã³ã©ã€ãã©ãªã掻çšããŠãã ããã
- ææ°æ å ±ãå ¥æããïŒé²åããWebã¢ãã¡ãŒã·ã§ã³ã®æšæºãšãã©ãŠã¶ã®æ©èœã«æ³šç®ãç¶ããŠãã ããã
ãããã®æŠå¿µãç¿åŸããããšã§ãWebãã¶ã€ã³ãåäžãããäžçäžã®ãŠãŒã¶ãŒãé äºããåã°ããã¢ãã¡ãŒã·ã§ã³ãäœæã§ããŸãã