CSSã¢ãŒã·ã§ã³ãã¹ã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ãæ¢ããã¢ãã¡ãŒã·ã§ã³åŠçã®ãªãŒããŒããããåæãã倿§ãªããã€ã¹ããã©ãŠã¶ã§è€éãªãã¹ã¢ãã¡ãŒã·ã§ã³ãæé©åããæŠç¥ã解説ããŸãã
CSSã¢ãŒã·ã§ã³ãã¹ã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ïŒãã¹ã¢ãã¡ãŒã·ã§ã³åŠçãªãŒããŒãããã®è§£æ
CSSã¢ãŒã·ã§ã³ãã¹ã¯ãè€éãªSVGãã¹ã«æ²¿ã£ãŠèŠçŽ ãã¢ãã¡ãŒã·ã§ã³åããããã®åŒ·åãã€å®£èšçãªæ¹æ³ãæäŸããŸãããã®æ©èœã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹èŠçŽ ã®èªå°ãããã€ãããã¯ãªã¹ããŒãªãŒããªã³ã°äœéšã®åµåºãŸã§ãé«åºŠãªèŠèŠå¹æãå®çŸããŸããããããä»ã®é«åºŠãªæ©èœãšåæ§ã«ãCSSã¢ãŒã·ã§ã³ãã¹ã®å®è£ ã¯é倧ãªããã©ãŒãã³ã¹ã®èæ ®äºé ã䌎ãå¯èœæ§ããããŸãããã¹ã¢ãã¡ãŒã·ã§ã³ã«é¢é£ããåŠçãªãŒããŒããããçè§£ããããšã¯ã倿§ãªããã€ã¹èœåãšãããã¯ãŒã¯æ¡ä»¶ãæã€ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«å¯ŸããŠãã¹ã ãŒãºã§å¿çæ§ãé«ããé åçãªãŠãŒã¶ãŒäœéšãæäŸããããšãç®æããŠã§ãéçºè ã«ãšã£ãŠæ¥µããŠéèŠã§ãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ãCSSã¢ãŒã·ã§ã³ãã¹ã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ãæãäžããåŠçãªãŒããŒãããã«å¯äžããæ ¹æ¬çãªã¡ã«ããºã ãåæããŸããäžè¬çãªèœãšãç©Žãæ¢ããç°ãªããã¹ã®è€éããã¬ã³ããªã³ã°ã«ã©ã®ããã«åœ±é¿ããããåæãããã¹ãŠã®ã¿ãŒã²ãããã©ãããã©ãŒã ã§æé©ãªããã©ãŒãã³ã¹ã確ä¿ããããã«ãããã®ã¢ãã¡ãŒã·ã§ã³ãæé©åããããã®å®è¡å¯èœãªæŠç¥ãæäŸããŸãã
CSSã¢ãŒã·ã§ã³ãã¹ã®ä»çµã¿ãçè§£ãã
CSSã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ã®æ žå¿ã¯ãHTMLèŠçŽ ã®äœçœ®ãšåããå®çŸ©ãããSVGãã¹ãšåæãããããšã§ãããã©ãŠã¶ã¯ãã¢ãã¡ãŒã·ã§ã³ã®é²è¡ã«äŒŽãããã®ãã¹ã«æ²¿ã£ãèŠçŽ ã®äœçœ®ãšå Žåã«ãã£ãŠã¯å転ãç¶ç¶çã«èšç®ããå¿ èŠããããŸãããã®ããã»ã¹ã¯ãã©ãŠã¶ã®ã¬ã³ããªã³ã°ãšã³ãžã³ã«ãã£ãŠç®¡çãããããã€ãã®äž»èŠãªæ®µéãå«ã¿ãŸãïŒ
- ãã¹ã®å®çŸ©ãšè§£æïŒ SVGãã¹ããŒã¿èªäœããã©ãŠã¶ã«ãã£ãŠè§£æãããçè§£ãããå¿ èŠããããŸãã倿°ã®ç¹ãæ²ç·ãã³ãã³ããæã€è€éãªãã¹ã¯ããã®åæè§£ææéãå¢å ãããå¯èœæ§ããããŸãã
- ãã¹ãžãªã¡ããªã®èšç®ïŒ ã¢ãã¡ãŒã·ã§ã³ã®åãã¬ãŒã ã§ããã©ãŠã¶ã¯ãã¹äžã®ç¹å®ã®ç¹ã«ãããã¢ãã¡ãŒã·ã§ã³èŠçŽ ã®æ£ç¢ºãªåº§æšïŒx, yïŒãšãå Žåã«ãã£ãŠã¯å転ïŒtransformïŒã決å®ããå¿ èŠããããŸããããã«ã¯ãã¹ã»ã°ã¡ã³ãéã®è£éãå«ãŸããŸãã
- èŠçŽ ã®å€åœ¢ïŒ èšç®ãããäœçœ®ãšå転ã¯ãCSSãã©ã³ã¹ãã©ãŒã ã䜿çšããŠèŠçŽ ã«é©çšãããŸãããã®å€åœ¢ã¯ãããŒãžäžã®ä»ã®èŠçŽ ãšåæãããå¿ èŠããããŸãã
- åæç»ãšãªãããŒïŒ ã¢ãã¡ãŒã·ã§ã³ã®è€éããšæ§è³ªã«ãã£ãŠã¯ããã®å€åœ¢ãåæç»ïŒèŠçŽ ã®åæç»ïŒããªãããŒïŒããŒãžã®ã¬ã€ã¢ãŠãåèšç®ïŒãåŒãèµ·ããå¯èœæ§ãããããããã¯èšç®ã³ã¹ãã®é«ãæäœã§ãã
ããã©ãŒãã³ã¹ãªãŒããŒãããã®äž»ãªåå ã¯ããã¹ãžãªã¡ããªãšèŠçŽ ã®å€åœ¢ã®ããã«ãã¬ãŒã ããšã«å¿ èŠãšãããå埩çãªèšç®ããçããŸãããã¹ãè€éã§ãã¢ãã¡ãŒã·ã§ã³ã®æŽæ°é »åºŠãé«ãã»ã©ããŠãŒã¶ãŒã®ããã€ã¹ã«ãããåŠçè² è·ã¯é«ããªããŸãã
ã¢ãŒã·ã§ã³ãã¹åŠçãªãŒããŒãããã®èŠå
ããã€ãã®èŠå ããCSSã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹åœ±é¿ã«çŽæ¥åœ±é¿ããŸããããããèªèããããšãã广çãªæé©åãžã®ç¬¬äžæ©ã§ãïŒ
1. ãã¹ã®è€éã
SVGãã¹å ã®ã³ãã³ããšåº§æšã®æ°ããããã©ãŒãã³ã¹ã«å€§ãã圱é¿ããŸãã
- ç¹ãšæ²ç·ã®æ°ïŒ ã¢ã³ã«ãŒãã€ã³ãã®å¯åºŠãé«ããè€éãªããžã§æ²ç·ïŒ3次ãŸãã¯2次ïŒãæã€ãã¹ã¯ãè£éã®ããã«ããè€éãªæ°åŠçèšç®ãå¿ èŠãšããŸããåæ²ç·ã»ã°ã¡ã³ãã¯ãã¢ãã¡ãŒã·ã§ã³ã®é²è¡åºŠã®ç°ãªãããŒã»ã³ããŒãžã§è©äŸ¡ãããå¿ èŠããããŸãã
- ãã¹ããŒã¿ã®åé·æ§ïŒ æ¯èŒçåçŽãªåœ¢ç¶ã§ãã£ãŠããéåžžã«è©³çްãªãã¹ããŒã¿ã¯ãè§£ææéãšèšç®è² è·ãå¢å ãããå¯èœæ§ããããŸãã
- 絶察ã³ãã³ããšçžå¯Ÿã³ãã³ãïŒ ãã©ãŠã¶ã«ãã£ãŠæé©åãããããšãå€ãã§ããã䜿çšããããã¹ã«ãã³ãã®çš®é¡ã¯çè«çã«è§£æã®è€éãã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
åœéçãªäŸïŒ ã°ããŒãã«ãã©ã³ãã®ãŠã§ããµã€ãã§ãã«ãªã°ã©ãã£ãŒã¹ã¯ãªããã®ãã¹ã«æ²¿ã£ãŠããŽãã¢ãã¡ãŒã·ã§ã³åããããšãæ³åããŠã¿ãŠãã ãããã¹ã¯ãªãããéåžžã«è£ 食çã§ãå€ãã®çްããã¹ãããŒã¯ãæ²ç·ãããå Žåããã¹ããŒã¿ã¯åºç¯å²ã«ããããåçŽãªå¹ŸäœåŠç圢ç¶ãšæ¯èŒããŠããé«ãåŠçèŠæ±ã«ã€ãªãããŸãã
2. ã¢ãã¡ãŒã·ã§ã³ã®ã¿ã€ãã³ã°ãšæç¶æé
ã¢ãã¡ãŒã·ã§ã³ã®éåºŠãšæ»ãããã¯ããã®ã¿ã€ãã³ã°ãã©ã¡ãŒã¿ã«çŽæ¥é¢é£ããŠããŸãã
- ãã¬ãŒã ã¬ãŒãïŒFPSïŒïŒ é«ããã¬ãŒã ã¬ãŒãïŒäŸïŒæ»ããããç¥èŠããããã®æ¯ç§60ãã¬ãŒã 以äžïŒãç®æãã¢ãã¡ãŒã·ã§ã³ã¯ããã©ãŠã¶ããã¹ãŠã®èšç®ãšæŽæ°ãã¯ããã«è¿ éã«å®è¡ããå¿ èŠããããŸãããã¬ãŒã èœã¡ãçºçãããšãã«ã¯ã€ãã壿ªãªãŠãŒã¶ãŒäœéšã«ã€ãªããå¯èœæ§ããããŸãã
- ã¢ãã¡ãŒã·ã§ã³ã®æç¶æéïŒ çããéãã¢ãã¡ãŒã·ã§ã³ã¯ãè¿ éã«å®è¡ãããã°å šäœçãªè² è·ã¯å°ãªããããããŸããããéåžžã«éãã¢ãã¡ãŒã·ã§ã³ã¯ãã¬ãŒã ãããã®èŠæ±ãé«ããªãå¯èœæ§ããããŸããé·ããé ãã¢ãã¡ãŒã·ã§ã³ã¯ãæœåšçã« jarring ã§ã¯ãããŸãããããã®æç¶æéäžãç¶ç¶çãªåŠçãå¿ èŠãšããŸãã
- ã€ãŒãžã³ã°é¢æ°ïŒ ã€ãŒãžã³ã°é¢æ°èªäœã¯äžè¬çã«ããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ã¯ãªããŸããããè€éãªã«ã¹ã¿ã ã€ãŒãžã³ã°é¢æ°ã¯ããã¬ãŒã ããšã«ããããªè¿œå èšç®ãå°å ¥ããå¯èœæ§ããããŸãã
3. ã¢ãã¡ãŒã·ã§ã³åãããèŠçŽ ã®ããããã£
äœçœ®ã ãã§ãªããã¢ãŒã·ã§ã³ãã¹ãšé£æºããŠä»ã®ããããã£ãã¢ãã¡ãŒã·ã§ã³åãããšããªãŒããŒããããå¢å ããå¯èœæ§ããããŸãã
- å転ïŒ
transform-originãšrotateïŒïŒ ãã¹ã«æ²¿ã£ãèŠçŽ ã®å転ãã¢ãã¡ãŒã·ã§ã³åããããšã¯ããã°ãã°offset-rotateãæåã®å転ãã©ã³ã¹ãã©ãŒã ã䜿çšããŠéæãããèšç®ã®å±€ã远å ããŸãããã©ãŠã¶ã¯ãèŠçŽ ãæ£ããæ¹åä»ããããã«ãåç¹ã§ã®ãã¹ã®æ¥ç·ã決å®ããå¿ èŠããããŸãã - ã¹ã±ãŒã«ãšãã®ä»ã®å€åœ¢ïŒ ã¢ãŒã·ã§ã³ãã¹äžã«ããéã«èŠçŽ ã«ã¹ã±ãŒã«ãã¹ãã¥ãŒããŸãã¯ãã®ä»ã®å€åœ¢ãé©çšãããšãèšç®ã³ã¹ããåå¢ããŸãã
- äžéæåºŠãšãã®ä»ã®éå€åœ¢ããããã£ïŒ äžéæåºŠãè²ã®å€æŽã¯äžè¬çã«å€åœ¢ãããèŠæ±ãå°ãªãã§ãããã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ãšåæã«è¡ããšãå šäœã®ã¯ãŒã¯ããŒãã«å¯äžããŸãã
4. ãã©ãŠã¶ã®ã¬ã³ããªã³ã°ãšã³ãžã³ãšããã€ã¹ã®èœå
CSSã¢ãŒã·ã§ã³ãã¹ã®ããã©ãŒãã³ã¹ã¯ããããã¬ã³ããªã³ã°ãããç°å¢ã«æ¬è³ªçã«äŸåããŸãã
- ãã©ãŠã¶ã®å®è£ ïŒ ç°ãªããã©ãŠã¶ãåããã©ãŠã¶ã®ç°ãªãããŒãžã§ã³ã§ããCSSã¢ãŒã·ã§ã³ãã¹ã¬ã³ããªã³ã°ã®æé©åã¬ãã«ã¯æ§ã ã§ããäžéšã®ãšã³ãžã³ã¯ããã¹ã»ã°ã¡ã³ãã®èšç®ãå€åœ¢ã®é©çšãããå¹ççãããããŸããã
- ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ïŒ ææ°ã®ãã©ãŠã¶ã¯CSSãã©ã³ã¹ãã©ãŒã ã«ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ïŒGPUïŒãå©çšããŸãããããããã®ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®å¹æã¯æ§ã ã§ãããè€éãªã¢ãã¡ãŒã·ã§ã³ã¯äŸç¶ãšããŠCPUã飜åãããå¯èœæ§ããããŸãã
- ããã€ã¹ã®ããã©ãŒãã³ã¹ïŒ ãã€ãšã³ãã®ãã¹ã¯ãããã³ã³ãã¥ãŒã¿ã¯ãäœæ¶è²»é»åã®ã¢ãã€ã«ããã€ã¹ãå€ãã¿ãã¬ããããããè€éãªã¢ãŒã·ã§ã³ãã¹ãã¯ããã«ã¹ã ãŒãºã«åŠçããŸããããã¯ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠéèŠãªèæ ®äºé ã§ãã
- ç»é¢äžã®ä»ã®èŠçŽ ãšããã»ã¹ïŒ ä»ã®å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ããŠã§ãããŒãžã®ä»ã®éšåã®è€éããå«ããããã€ã¹äžã®å šäœçãªè² è·ã¯ãã¢ãã¡ãŒã·ã§ã³ã®ã¬ã³ããªã³ã°ã«å©çšå¯èœãªãªãœãŒã¹ã«åœ±é¿ããŸãã
5. ã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ã®æ°
åäžã®èŠçŽ ããã¹ã«æ²¿ã£ãŠã¢ãã¡ãŒã·ã§ã³åããããšãšãè€æ°ã®èŠçŽ ãåæã«ã¢ãã¡ãŒã·ã§ã³åããããšã¯ã环ç©çãªåŠçãªãŒããŒããããå€§å¹ ã«å¢å ãããŸãã
- åæå®è¡ã¢ãã¡ãŒã·ã§ã³ïŒ ååæå®è¡ã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ã¯ãç¬èªã®èšç®ã»ãããå¿ èŠãšããå šäœã®ã¬ã³ããªã³ã°ã¯ãŒã¯ããŒãã«å¯äžããŸãã
- ã¢ãã¡ãŒã·ã§ã³éã®çžäºäœçšïŒ åçŽãªã¢ãŒã·ã§ã³ãã¹ã§ã¯ããŸãäžè¬çã§ã¯ãããŸããããã¢ãã¡ãŒã·ã§ã³ãçžäºäœçšãããäºãã«äŸåãããããå Žåãè€éãã¯å¢å€§ããå¯èœæ§ããããŸãã
ããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ãã
æé©åããåã«ãããã©ãŒãã³ã¹ã®åé¡ãã©ãã§çºçããŠããããç¹å®ããããšãäžå¯æ¬ ã§ãããã©ãŠã¶ã®éçºè ããŒã«ã¯ããã«éåžžã«åœ¹ç«ã¡ãŸãïŒ
- ããã©ãŒãã³ã¹ãããã¡ã€ãªã³ã°ïŒChrome DevTools, Firefox Developer EditionïŒïŒ ããã©ãŒãã³ã¹ã¿ãã䜿çšããŠã€ã³ã¿ã©ã¯ã·ã§ã³ãèšé²ããã¬ã³ããªã³ã°ãã€ãã©ã€ã³ãåæããŸããé·ããã¬ãŒã ã'Animation'ãŸãã¯'Rendering'ã»ã¯ã·ã§ã³ã§ã®é«ãCPU䜿çšçãæ¢ããã©ã®ç¹å®ã®èŠçŽ ãã¢ãã¡ãŒã·ã§ã³ãæããªãœãŒã¹ãæ¶è²»ããŠããããç¹å®ããŸãã
- ãã¬ãŒã ã¬ãŒãã®ã¢ãã¿ãªã³ã°ïŒ éçºè ããŒã«ã§FPSã«ãŠã³ã¿ãŒã芳å¯ãããããã©ãŠã¶ãã©ã°ã䜿çšããŠã¢ãã¡ãŒã·ã§ã³ã®æ»ããããç£èŠããŸãã60 FPSãäžè²«ããŠäžåãå Žåã¯åé¡ã瀺ããŠããŸãã
- GPUãªãŒããŒãããŒåæïŒ ããŒã«ã¯ãç»é¢ã®é åãé床ã«ãªãŒããŒãããŒãããŠããç®æãç¹å®ããã®ã«åœ¹ç«ã¡ãŸããããã¯ãç¹ã«è€éãªã¢ãã¡ãŒã·ã§ã³ã§ã®éå¹çãªã¬ã³ããªã³ã°ã®å åã§ããå¯èœæ§ããããŸãã
CSSã¢ãŒã·ã§ã³ãã¹ã®ããã©ãŒãã³ã¹ãæé©åããæŠç¥
èŠå ãšããã«ããã¯ã®ç¹å®æ¹æ³ãçè§£ããäžã§ãããã€ãã®æé©åæŠç¥ãå®è£ ã§ããŸãïŒ
1. SVGãã¹ããŒã¿ãåçŽåãã
ãªãŒããŒããããåæžããæãçŽæ¥çãªæ¹æ³ã¯ããã¹èªäœãåçŽåããããšã§ãã
- ã¢ã³ã«ãŒãã€ã³ããšæ²ç·ãæžããïŒ SVGç·šéããŒã«ïŒAdobe IllustratorãInkscapeããŸãã¯ãªã³ã©ã€ã³ã®SVGãªããã£ãã€ã¶ãªã©ïŒã䜿çšããŠãäžèŠãªã¢ã³ã«ãŒãã€ã³ãã®æ°ãæžãããèŠèŠçãªæªã¿ãå€§å¹ ã«åŒãèµ·ããããšãªãæ²ç·ãè¿äŒŒããããšã§ãã¹ãåçŽåããŸãã
- ãã¹ããŒã¿ã®ç瞮圢ã䜿çšããïŒ ãã©ãŠã¶ã¯äžè¬çã«æé©åã«åªããŠããŸãããé床ã«åé·ãªãã¹ããŒã¿ã䜿çšããŠããªãããšã確èªããŠãã ãããããšãã°ãé©åãªå Žåã«çžå¯Ÿã³ãã³ãã䜿çšãããšãããŒã¿ããããã«ã³ã³ãã¯ãã«ãªãããšããããŸãã
- ãã¹ã»ã°ã¡ã³ãã®è¿äŒŒãæ€èšããïŒ éåžžã«è€éãªãã¹ã®å ŽåãèŠèŠçãªå¿ å®åºŠãèš±ããªãã°ãããåçŽãªåœ¢ç¶ãå°ãªãã»ã°ã¡ã³ãã§è¿äŒŒããããšãæ€èšããŠãã ããã
åœéçãªäŸïŒ æµããåžã®ã¢ãã¡ãŒã·ã§ã³ãè€éãªãã¹ã«æ²¿ã£ãŠäœ¿çšãããã¡ãã·ã§ã³ãã©ã³ãã¯ããã¹ããããã«åçŽåããŠãæµåæ§ã®å¹»æ³ãç¶æãã€ã€ãã€ã³ãã©ãè匱ãªå°åã®å€ãã¢ãã€ã«ããã€ã¹ã䜿çšãããŠãŒã¶ãŒã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ãããããããŸããã
2. ã¢ãã¡ãŒã·ã§ã³ã®ããããã£ãšã¿ã€ãã³ã°ãæé©åãã
äœãã©ã®ããã«ã¢ãã¡ãŒã·ã§ã³åããããæ éã«å€æããŠãã ããã
- å€åœ¢ãåªå ããïŒ å¯èœãªéããäœçœ®ãšå転ã®ã¿ãã¢ãã¡ãŒã·ã§ã³åããŠãã ãããã¢ãŒã·ã§ã³ãã¹ãšé£æºã㊠`width`ã`height`ã`top`ã`left`ã`margin` ãªã©ã®ä»ã®ããããã£ãã¢ãã¡ãŒã·ã§ã³åããããšã¯é¿ããŠãã ããããããã¯é«äŸ¡ãªã¬ã€ã¢ãŠãåèšç®ïŒãªãããŒïŒãåŒãèµ·ããå¯èœæ§ããããŸããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãå¯èœãªããããã£ïŒäŸïŒ`transform`ã`opacity`ïŒã«åºå·ããŠãã ããã
- `will-change`ãæ éã«äœ¿çšããïŒ `will-change` CSSããããã£ã¯ãèŠçŽ ã®ããããã£ã倿Žãããããšããã©ãŠã¶ã«ç€ºåããã¬ã³ããªã³ã°ãæé©åãããããšãã§ããŸããããããé床ãªäœ¿çšã¯éå°ãªã¡ã¢ãªæ¶è²»ã«ã€ãªããå¯èœæ§ããããŸããã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ã«ç©æ¥µçã«é¢äžããèŠçŽ ã«é©çšããŠãã ããã
- éèŠåºŠã®äœãã¢ãã¡ãŒã·ã§ã³ã§ã¯ãã¬ãŒã ã¬ãŒããäžããïŒ åŸ®åŠãªè£ 食ã¢ãã¡ãŒã·ã§ã³ãå®å šãªæ»ããããå¿ èŠãšããªãå Žåã¯ãèšç®è² è·ãæžããããã«ãããã«äœããã¬ãŒã ã¬ãŒãïŒäŸïŒ30 FPSãç®æšïŒãæ€èšããŠãã ããã
- JavaScriptã§å¶åŸ¡ããã¢ãã¡ãŒã·ã§ã³ã«ã¯`requestAnimationFrame`ã䜿çšããïŒ JavaScriptãä»ããŠã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ãå¶åŸ¡ããŠããå Žåã¯ããã©ãŠã¶ã®ã¬ã³ããªã³ã°ãµã€ã¯ã«ãšã®æé©ãªã¿ã€ãã³ã°ãšåæã®ããã« `requestAnimationFrame` ã䜿çšããŠããããšã確èªããŠãã ããã
3. ã¬ã³ããªã³ã°ãGPUã«ãªãããŒããã
å¯èœãªéãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã掻çšããŠãã ããã
- ããããã£ãGPUã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãããŠããããšã確èªããïŒ åè¿°ã®éãã`transform` ãš `opacity` ã¯éåžžGPUã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãããŸããã¢ãŒã·ã§ã³ãã¹ã䜿çšããéã¯ãèŠçŽ ãäž»ã«å€åœ¢ãããŠããããšã確èªããŠãã ããã
- æ°ããåæã¬ã€ã€ãŒãäœæããïŒ å Žåã«ãã£ãŠã¯ãèŠçŽ ãç¬èªã®åæã¬ã€ã€ãŒã«åŒ·å¶ããïŒäŸïŒ`transform: translateZ(0);` ã `opacity` ã®å€æŽãé©çšããïŒããšã§ããã®ã¬ã³ããªã³ã°ãåé¢ããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãããã ããã¡ã¢ãªäœ¿çšéãå¢å ããå¯èœæ§ããããããæ³šæããŠäœ¿çšããŠãã ããã
4. ã¢ãã¡ãŒã·ã§ã³ã®è€éããšéãå¶åŸ¡ãã
ã¬ã³ããªã³ã°ãšã³ãžã³ãžã®å šäœçãªèŠæ±ãæžãããŠãã ããã
- åæå®è¡ã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ãå¶éããïŒ è€æ°ã®èŠçŽ ããã¹ã«æ²¿ã£ãŠã¢ãã¡ãŒã·ã§ã³åãããŠããå Žåã¯ããããã®ã¢ãã¡ãŒã·ã§ã³ããããããåæã¢ãã¡ãŒã·ã§ã³ã®æ°ãæžããããšãæ€èšããŠãã ããã
- ããžã¥ã¢ã«ãåçŽåããïŒ ãã¹äžã®èŠçŽ ãè€éãªèŠèŠã¹ã¿ã€ã«ã圱ãæã£ãŠããå Žåããããã¯ã¬ã³ããªã³ã°ã®ãªãŒããŒããããå¢å ãããå¯èœæ§ããããŸããå¯èœã§ããã°ãããããåçŽåããŠãã ããã
- æ¡ä»¶ä»ãèªã¿èŸŒã¿ïŒ ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«çŽã¡ã«äžå¯æ¬ ã§ã¯ãªãè€éãªã¢ãã¡ãŒã·ã§ã³ã«ã€ããŠã¯ããã¥ãŒããŒãã«å ¥ã£ããšãããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«ãã£ãŠããªã¬ãŒããããšãã«ã®ã¿èªã¿èŸŒã¿ãã¢ãã¡ãŒã·ã§ã³åããããšãæ€èšããŠãã ããã
åœéçãªäŸïŒ ã°ããŒãã«ãªeã³ããŒã¹ãµã€ãã§ã補åã®ç¹åŸŽããã¹ã«æ²¿ã£ãŠåãã¢ãã¡ãŒã·ã§ã³ã¢ã€ã³ã³ã§ç޹ä»ããå Žåãç¹ã«ã¢ãã€ã«ã€ã³ã¿ãŒãããæ¥ç¶ãé ãå°åã®ãŠãŒã¶ãŒåãã«ãäžåºŠã«ããã€ãã®ããŒã¢ã€ã³ã³ã®ã¿ãã¢ãã¡ãŒã·ã§ã³åãããããã¹ãŠãäžåºŠã«ã§ã¯ãªãé æ¬¡ã¢ãã¡ãŒã·ã§ã³åããããšãæ€èšããŠãã ããã
5. ãã©ãŒã«ããã¯ãšããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ã
ããã€ã¹ã«é¢ãããããã¹ãŠã®ãŠãŒã¶ãŒã«è¯ãäœéšãä¿èšŒããŸãã
- éçãªä»£æ¿ææ®µãæäŸããïŒ å€ããã©ãŠã¶ããè€éãªã¢ãŒã·ã§ã³ãã¹ãã¹ã ãŒãºã«åŠçã§ããªãäœæ§èœã®ããã€ã¹ã䜿çšããŠãããŠãŒã¶ãŒåãã«ãéçãŸãã¯ããåçŽãªãã©ãŒã«ããã¯ã¢ãã¡ãŒã·ã§ã³ãæäŸããŸãã
- æ©èœæ€åºïŒ CSSã¢ãŒã·ã§ã³ãã¹ãšé¢é£ããããã£ãé©çšããåã«ããã©ãŠã¶ããããããµããŒãããŠãããã©ãããæ©èœæ€åºã䜿çšããŠå€æããŸãã
6. 極端ã«è€éãªå Žåã¯ä»£æ¿æ¡ãæ€èšãã
éåžžã«èŠæ±ã®é«ãã·ããªãªã§ã¯ãä»ã®æè¡ãããè¯ãããã©ãŒãã³ã¹ç¹æ§ãæäŸããå¯èœæ§ããããŸãã
- JavaScriptã¢ãã¡ãŒã·ã§ã³ã©ã€ãã©ãªïŒäŸïŒGSAPïŒïŒ GreenSock Animation Platform (GSAP) ã®ãããªã©ã€ãã©ãªã¯ãé«åºŠã«æé©åãããã¢ãã¡ãŒã·ã§ã³ãšã³ãžã³ãæäŸããç¹ã«è£éãšã¬ã³ããªã³ã°ã«å¯Ÿãã现ããå¶åŸ¡ãå¿ èŠãªè€éãªã·ãŒã±ã³ã¹ãå ¥ãçµãã ãã¹æäœã«ãããŠãããè¯ãããã©ãŒãã³ã¹ãæäŸããããšããããããŸããGSAPã¯SVGãã¹ããŒã¿ã掻çšã§ããŸãã
- Web Animations APIïŒ ãã®æ°ããAPIã¯ãã¢ãã¡ãŒã·ã§ã³ãäœæããããã®JavaScriptã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããç¹å®ã®è€éãªãŠãŒã¹ã±ãŒã¹ã«ãããŠã宣èšçãªCSSãããå€ãã®å¶åŸ¡ãšæœåšçã«ããè¯ãããã©ãŒãã³ã¹ãæäŸããŸãã
ã±ãŒã¹ã¹ã¿ãã£ãšã°ããŒãã«ãªèæ ®äºé
ã¢ãŒã·ã§ã³ãã¹ã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ã¯ããŠãŒã¶ãŒã®ããã€ã¹ããããã¯ãŒã¯æ¡ä»¶ãåçã«ç°ãªãã°ããŒãã«ãªã¢ããªã±ãŒã·ã§ã³ã§ç¹ã«é¡èã«æããããŸãã
ã·ããªãª1ïŒã°ããŒãã«ãªãã¥ãŒã¹ãŠã§ããµã€ã
ãããã¥ãŒã¹ãŠã§ããµã€ãããäžçå°å³äžã§ãã¬ã³ãèšäºã®ã¢ã€ã³ã³ãã¢ãã¡ãŒã·ã§ã³åããããã«ã¢ãŒã·ã§ã³ãã¹ã䜿çšããŠãããšããŸãããã¹ãŠã®å€§éžãšåœã®ãã¹ããŒã¿ãéåžžã«è©³çްã§ãè€æ°ã®ã¢ã€ã³ã³ãåæã«ã¢ãã¡ãŒã·ã§ã³åãããŠããå Žåã垯åå¹ ãäœãå°åãå€ãã¹ããŒããã©ã³ã䜿çšããŠãããŠãŒã¶ãŒã¯ãèããã©ã°ãçµéšããã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšäžèœã«ãªãå¯èœæ§ããããŸããæé©åã«ã¯ãå°å³ã®ãã¹ãåçŽåãããã¢ãã¡ãŒã·ã§ã³åããã¢ã€ã³ã³ã®æ°ãå¶éããããŸãã¯äœæ§èœã®ããã€ã¹ã§ã¯ããåçŽãªã¢ãã¡ãŒã·ã§ã³ã䜿çšããããšãå«ãŸããŸãã
ã·ããªãª2ïŒã€ã³ã¿ã©ã¯ãã£ããªæè²ãã©ãããã©ãŒã
æè²ãã©ãããã©ãŒã ã¯ãè€éãªå³ãç§åŠçãªããã»ã¹ããŠãŒã¶ãŒã«æ¡å ããããã«ã¢ãŒã·ã§ã³ãã¹ã䜿çšãããããããŸãããäŸãã°ãä»®æ³ã®è¡çã埪ç°åšç³»ã®ãã¹ã«æ²¿ã£ãŠã¢ãã¡ãŒã·ã§ã³åããå Žåã§ãããã®ãã¹ãéåžžã«è€éãªå Žåãçºå±éäžåœã®åŠæ ¡ã®ã³ã³ãã¥ãŒã¿ãã¿ãã¬ããã䜿çšããŠããåŠçã®åŠç¿ã劚ããå¯èœæ§ããããŸããããã§ã¯ããã¹ã®è©³çްã¬ãã«ãæé©åããå ç¢ãªãã©ãŒã«ããã¯ã確ä¿ããããšãæãéèŠã§ãã
ã·ããªãª3ïŒã²ãŒã åããããŠãŒã¶ãŒãªã³ããŒãã£ã³ã°ãããŒ
ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã¯ãæ°èŠãŠãŒã¶ãŒããªã³ããŒãã£ã³ã°ã«å°ãããã«ãéã³å¿ã®ããã¢ãŒã·ã§ã³ãã¹ã¢ãã¡ãŒã·ã§ã³ã䜿çšãããããããŸãããæ°èåžå Žã®ãŠãŒã¶ãŒã¯ãå€ããæ§èœã®äœãã¢ãã€ã«ããã€ã¹ã«äŸåããŠããããšããããããŸããèšç®è² è·ã®é«ããã¹ã¢ãã¡ãŒã·ã§ã³ã¯ãã€ã©ã€ã©ããã»ã©é ããªã³ããŒãã£ã³ã°ã«ã€ãªããããŠãŒã¶ãŒãã¢ããªãæŸæ£ããåå ãšãªãå¯èœæ§ããããŸãããã®ãããªã·ããªãªã§ããã©ãŒãã³ã¹ãåªå ããããšã¯ããŠãŒã¶ãŒç²åŸãšå®çã«ãšã£ãŠäžå¯æ¬ ã§ãã
ãããã®äŸã¯ãã°ããŒãã«ãªããã©ãŒãã³ã¹æŠç¥ã®éèŠæ§ã匷調ããŠããŸããéçºè ã®é«æ§èœãã·ã³ã§ã·ãŒã ã¬ã¹ã«åäœãããã®ããäžçã®å¥ã®å Žæã«ãããŠãŒã¶ãŒã«ãšã£ãŠã¯é倧ãªéå£ãšãªãå¯èœæ§ããããŸãã
çµè«
CSSã¢ãŒã·ã§ã³ãã¹ã¯ããŠã§ãã®ã€ã³ã¿ã©ã¯ãã£ããã£ãšèŠèŠçé åãé«ããããã®çŽ æŽãããããŒã«ã§ãããããããã®åã«ã¯ããã©ãŒãã³ã¹ã广çã«ç®¡çãã責任ã䌎ããŸããè€éãªãã¹ã¢ãã¡ãŒã·ã§ã³ã«é¢é£ããåŠçãªãŒããŒãããã¯ãç¹ã«ã°ããŒãã«ãªèŠæš¡ã§ãŠãŒã¶ãŒäœéšãäœäžãããå¯èœæ§ã®ããçŸå®çãªæžå¿µã§ãã
ãã®ãªãŒããŒãããã«å¯äžããèŠå ïŒãã¹ã®è€éããã¢ãã¡ãŒã·ã§ã³ã®ã¿ã€ãã³ã°ãèŠçŽ ã®ããããã£ããã©ãŠã¶/ããã€ã¹ã®èœåãã¢ãã¡ãŒã·ã§ã³ã®æ°ïŒãçè§£ããããšã§ãéçºè ã¯ç©æ¥µçã«æé©åæŠç¥ãå®è£ ã§ããŸããSVGãã¹ã®åçŽåãããããã£ã®æ éãªã¢ãã¡ãŒã·ã§ã³åãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®æŽ»çšãã¢ãã¡ãŒã·ã§ã³ã®éã®å¶åŸ¡ããã©ãŒã«ããã¯ã®æ¡çšã¯ãã¹ãŠéèŠãªã¹ãããã§ãã
æçµçã«ãããã©ãŒãã³ã¹ã®é«ãCSSã¢ãŒã·ã§ã³ãã¹äœéšãæäŸããã«ã¯ãææ ®æ·±ãã¢ãããŒãã倿§ãªç°å¢ã§ã®ç¶ç¶çãªãã¹ãããããŠå Žæã䜿çšããŠããããã€ã¹ã«é¢ãããããã¹ãŠã®ãŠãŒã¶ãŒã«ã¹ã ãŒãºã§ã¢ã¯ã»ã¹ããããã€ã³ã¿ãŒãã§ãŒã¹ãæäŸãããšããã³ãããã¡ã³ããå¿ èŠã§ãããŠã§ãã¢ãã¡ãŒã·ã§ã³ããŸããŸãæŽç·Žãããã«ã€ããŠãã¢ãŒã·ã§ã³ãã¹ã®ãããªæ©èœã®ããã©ãŒãã³ã¹æé©åãç¿åŸããããšã¯ãé«å質ãªãŠã§ãéçºã®æ±ºå®çãªç¹åŸŽãšãªãã§ãããã