| visibility | opcity | display | |
|---|---|---|---|
| 是否占位置 | 是 | 是 | 否 |
| 是否可以响应事件 | 否 | 是 | 否 |
| 子元素是否可以显示 | 是 | 否 | 否 |
| 是否产生回流 | 否 | 否 | 是 |
| 是否发生重绘 | 是 | 不一定 | 是 |
Q:为什么opacity并不一定发生重绘 页面的绘制并不一定为在内存中的单层画面绘制,又是浏览器会将一帧画面绘制为多层画面,然后将若干层画面合并成一张图片显示都爱屏幕上。
将页面分层可以更好地区分开页面的静态部分和动态部分的绘制
在Blink和WebKit内核的浏览器中,具有transition或animation的opacity元素,渲染层被提升为合成层。translateZ(0)或translate3d(0,0,0)可以人为强制创建合成层。
而元素提升为合成层后,transform和opacity不会触发重绘,如果不是合成层,则会触发重绘。