will-change
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2020å¹´1æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
will-change 㯠CSS ã®ããããã£ã§ãã©ã®ãããªè¦ç´ ã®å¤æ´ãäºæ¸¬ããã¦ããããã©ã¦ã¶ã¼ã«å©è¨ãã¾ãããã©ã¦ã¶ã¼ã¯è¦ç´ ãå®éã«å¤æ´ãããåã«ãæé©åãã»ããã¢ãããããã¨ãã§ãã¾ãããã®ç¨®ã®æé©åã¯ãå®éã«å¤åãæ±ããããåã«ãæ½å¨çã«é«ã³ã¹ãã®å¦çãè¡ããã¨ã§ããã¼ã¸ã®å¿çãåä¸ããããã¨ãã§ãã¾ãã
è¦å:
will-change ã¯æ¢åã®æ§è½åé¡ãæ±ãããã®æçµè§£æ±ºææ®µã¨ãã¦ä½¿ç¨ãããã¨ãæå³ãã¦ãã¾ããäºæ³ãããããã©ã¼ãã³ã¹åé¡ã«ä½¿ç¨ããªãã§ãã ããã
ãã®ããããã£ãé©åã«ä½¿ç¨ããã«ã¯ãå°ã 注æãå¿ è¦ã§ãã
- will-change ãå¤ãã®è¦ç´ ã«é©ç¨ããããªãã§ãã ããã ãã©ã¦ã¶ã¼ã¯ãã§ã«å¯è½ãªéããã¹ã¦ã®æé©åã試ã¿ã¦ãã¾ãã
will-changeã試ã¿ããããªå¼·åãªæé©åã¯ã大éã®ãã·ã³ãªã½ã¼ã¹ã使ã£ã¦ãã¾ãã使ãåã£ã¦ãã¾ã£ãå ´åããã¼ã¸ã®é度ã®ä½ä¸ãå¤éã®ãªã½ã¼ã¹æ¶è²»ãå¼ãèµ·ããã¾ãã - æ§ããã«ä½¿ç¨ãã¦ãã ããã æé©åã«ããã¦ãã©ã¦ã¶ã¼ãè¡ãé常ã®åä½ã¯ãå¯è½ãªéãæ©ãæé©åãè§£é¤ãã¦ãéå¸¸ã«æ»ããã¨ã§ããããããã¹ã¿ã¤ã«ã·ã¼ãã«ç´æ¥
will-changeã追å ãããã¨ã¯ã対象ã®è¦ç´ ã®å¤æ´ãéè¿ã§ãããã¨ã示ãç¶ãããã¨ã§ããããã©ã¦ã¶ã¼ã¯ããã§ãªãå ´åãããé·ãéæé©åãç¶æãç¶ããªããã°ãªãã¾ããããã®ãããå¤åãçºçããåå¾ã«ã¹ã¯ãªããã³ã¼ãã使ã£ã¦will-changeã®ãªã³/ãªããåãæ¿ãããã¨ãç¿æ £ã¥ããã¨è¯ãã§ãããã - äºåã®æé©åãè¡ãããã« will-change ãè¦ç´ ã«é©ç¨ããªãã§ãã ããã ãã¼ã¸ãè¯ãåä½ãã¦ããå ´åãå°ã
ã®ã¹ãã¼ãã¢ããã®ããã ãã«
will-changeããããã£ãè¦ç´ ã«è¿½å ããªãã§ãã ãããwill-changeã¯æ¢åã®ããã©ã¼ãã³ã¹åé¡ãæ±ãããã®æçµææ®µã¨ãã¦ä½¿ãããã¹ããã®ã§ãããã®ãããããã©ã¼ãã³ã¹åé¡ã«å ããã¦ä½¿ãã¹ãã§ã¯ããã¾ããã é度ãªwill-changeã®ä½¿ç¨ã¯ãé度ã«ã¡ã¢ãªãæ¶è²»ããã¨ã¨ãã«ããã©ã¦ã¶ã¼ãèµ·ããããå¤åã«å¯¾ããæºåããããã¨ãããã¨ã§ãããè¤éãªã¬ã³ããªã³ã°ãçºçããåå ã¨ãªãã¾ããããã¯ããã©ã¼ãã³ã¹ã®æªåã«ã¤ãªããã¾ãã - å¦çããããã«ååãªæéãä¸ãã¦ãã ããã ãã®ããããã£ã¯ãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã«å¤æ´ããå¯è½æ§ã®ããããããã£ã«ã¤ãã¦äºåã«éç¥ããããã®æ¹æ³ã¨ãã¦ç¨æããã¦ãã¾ããããã¦ããã©ã¦ã¶ã¼ã¯ãããããã£ã®å¤æ´ãå®éã«çºçããåã«ãããããã£ã®å¤æ´ã«å¿
è¦ãªäºåæé©åã®é©ç¨ã鏿ã§ãã¾ãããã®ããããã©ã¦ã¶ã¼ã«å®éã®æé©åãè¡ãããã®ããã°ããã®æéãä¸ãããã¨ãéè¦ã«ãªãã¾ããå°ãªãã¨ãå°ãæ©ãã«ä½ããã®å¤æ´ãè¡ããããã¨ãäºæ¸¬ããæ¹æ³ãè¦ã¤ãã¦ããã
will-changeãè¨å®ãã¦ãã ããã - éãåããã³ã³ããã¹ããçæããããããã£å¤ (ä¾ãã° will-change: opacity) ããæåã«çæãããéãåããã³ã³ããã¹ãã¨ãã¦ä½¿ç¨ããå ´åãwill-change ã¯å®éã«è¦ç´ ã®è¦è¦çãªè¡¨ç¾ã«å½±é¿ãä¸ããå¯è½æ§ããããã¨ã«æ³¨æãã¦ãã ããã
æ§æ
/* ãã¼ã¯ã¼ãå¤ */
will-change: auto;
will-change: scroll-position;
will-change: contents;
will-change: transform; /* <custom-ident> ã®ä¾ */
will-change: opacity; /* <custom-ident> ã®ä¾ */
will-change: left, top; /* 2 ã¤ã® <animatable-feature> ã®ä¾ */
/* ã°ãã¼ãã«å¤ */
will-change: inherit;
will-change: initial;
will-change: revert;
will-change: revert-layer;
will-change: unset;
å¤
auto-
ãã®ãã¼ã¯ã¼ãã¯ç¹å®ã®æå³ã表ç¾ãã¾ãããã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã¯é常éãã®çµé¨åã¨æé©åãé©ç¨ãã¾ãã
<animatable-feature> ã¯ä»¥ä¸ã®å¤ã®ãã¡ã®ãããããåããã¨ãã§ãã¾ãã
scroll-position-
ã¾ããªãè¦ç´ ã®ã¹ã¯ãã¼ã«ä½ç½®ãã¢ãã¡ã¼ã·ã§ã³åãã¾ãã¯å¤æ´ãããã¨ãäºæ³ããããã¨ã示ãã¾ãã
contents-
ã¾ããªãè¦ç´ ã®ã³ã³ãã³ãã«å¯¾ãã¦ä½ããã®ã¢ãã¡ã¼ã·ã§ã³åãã¾ãã¯å¤æ´ãäºæ³ããããã¨ã示ãã¾ãã
<custom-ident>-
ã¾ããªãè¦ç´ ã§æå®ãããååã®ããããã£ãã¢ãã¡ã¼ã·ã§ã³åãã¾ãã¯å¤æ´ããããã¨ãäºæ³ããããã¨ã示ãã¾ããæå®ãããããããã£ã䏿¬æå®ããããã£ã®å ´åããããå±éããããã¹ã¦ã®ããããã£ãäºæ³ã®å¯¾è±¡ã¨ãªãã¾ãã
unset,initial,inherit,will-change,auto,scroll-position,contentsã®å¤ã¯æå®ã§ãã¾ããã仿§ã§ã¯ç¹å®ã®å¤ã«ã¤ãã¦ã®åä½ãå®ç¾©ãã¦ãã¾ããããä¸è¬çã«transformã¯åæã¬ã¤ã¤ã¼ã®ãã³ãã¨ãªãã¾ããç¹å®ã® CSS ããããã£ã«å¯¾ãã¦ã¯ã ç¾å¨ã®ã¨ãã Chrome 㯠2 ã¤ã®ã¢ã¯ã·ã§ã³ãåãã¾ããæ°ããåæã¬ã¤ã¤ã¼ãæ§ç¯ããããã¾ãã¯æ°ããéãåããã³ã³ããã¹ããæ§ç¯ãã¾ãã
ã¹ã¿ã¤ã«ã·ã¼ãã§
ãããããã¼ã¸ã大ããè¤éãªã¢ã«ãã ãã¹ã©ã¤ãããããã¬ã¼ã³ãã¼ã·ã§ã³ã®ãããªãã¼æ¼ä¸ã§é·ç§»ããã¢ããªã±ã¼ã·ã§ã³ã®å ´åãã¹ã¿ã¤ã«ã·ã¼ãã« will-change ãå«ããæ¹ãé©åãªãã¨ãããã¾ããããã«ãã£ã¦ããã©ã¦ã¶ã¼ã¯äºåã«åãæ¿ãã®æºåãè¡ãããã¼ãæ¼ãããã¨ããã«ãã¦ãã±ãã¨ãããã¼ã¸éã®åãæ¿ããã§ãã¾ããããããã¹ã¿ã¤ã«ã·ã¼ãã§ will-change ããããã£ãç´æ¥ä½¿ç¨ããã®ã¯æ³¨æãã¦ãã ããããã©ã¦ã¶ã¼ãå¿
è¦ãªããªã£ãã¡ã¢ãªãæé©åã®ããã«ä¿åãç¶ãããã¨ã«ãªãå¯è½æ§ãããããã§ãã
.slide {
will-change: transform;
}
å ¬å¼å®ç¾©
| åæå¤ | auto |
|---|---|
| é©ç¨å¯¾è±¡ | ãã¹ã¦ã®è¦ç´ |
| ç¶æ¿ | ãªã |
| è¨ç®å¤ | æå®éã |
| ã¢ãã¡ã¼ã·ã§ã³ã®ç¨®é¡ | 颿£å¤ |
形弿æ³
will-change =
auto |
<animateable-feature>#
<animateable-feature> =
scroll-position |
contents |
<custom-ident>
ä¾
>ã¹ã¯ãªãããã
ããã¯ã¹ã¯ãªãããã will-change ããããã£ãé©ç¨ããæ¹æ³ã示ãã¦ãã¾ããããããå¤ãã®å ´åã¯ãã®ããã«ãã¾ãã
const el = document.getElementById("element");
// è¦ç´ ãããã¼ãããã¨ããwill-change ãè¨å®ãã
el.addEventListener("mouseenter", hintBrowser);
el.addEventListener("animationEnd", removeHint);
function hintBrowser() {
// ã¢ãã¡ã¼ã·ã§ã³ã®ãã¼ãã¬ã¼ã ãããã¯ã§
// 夿´ãããã§ãããæé©åå¯è½ãªããããã£
this.style.willChange = "transform, opacity";
}
function removeHint() {
this.style.willChange = "auto";
}
仿§æ¸
| 仿§æ¸ |
|---|
| CSS Will Change Module Level 1 > # will-change > |