Skip to content

[CSS] CSS3 屬性 will-change 如何使用

Published: at 06:58 AM (3 min read)

css3 新增了一個屬性為 will-change,這個屬性用於提示瀏覽器此元素可能有 CSS 的改變(如:transition、transform等等),讓瀏覽器可以針對 CSS 改變先做處理。

根據 mozilla 開發者文件上面有列出幾點注意事項


接下來,我們來看看,什麼是在適當時機使用 will-change 屬性

錯誤用法 1:

[css] // 全部元素屬性都寫上去 * { will-change: transform, opacity, margin-left, width … ; } [/css]

錯誤用法2:

雖然比用法1好很多,但可想而知,大多數元素不可能無時無刻都可能改變。

[css] // 元素無時無刻都可能改變 .btn { will-change: tranform; } [/css]

錯誤用法3: 當 btn 點擊後改變透明度

[css] // 沒有給予足夠時間給瀏覽器預先處理 .btn { opacity: 0.5; } .btn:active { will-change: opacity;   opacity: 0.8; } [/css]

比較好的用法:

適時的加入及移除 will-change 屬性

當 btn 點擊後改變透明度

[css] .btn { opacity: 0.5; } .btn { will-change: opacity; } .btn:active { opacity: 0.8; } [/css]

你可能會問如果是想要滑鼠移至按鈕時改變呢?

你可以這樣寫

[css] .btn { opacity: 0.5; } .container:hover > .btn { will-change: opacity; } .btn:hover { opacity: 0.8; } [/css]

當然,除了上面 CSS 的寫法,我們也可以使用 javascript 去動態加入及移除 will-change 屬性 畢竟,大多數的改變通常是有事件觸發

參考資料:

https://developer.mozilla.org/zh-TW/docs/Web/CSS/will-change

https://drafts.csswg.org/css-will-change/