CSS之隐藏元素的方法和区别
隐藏一个元素有三种方法。分别是display:none
, visibility:hidden
和 opacity:0
display:none
- DOM 结构:浏览器不会渲染该元素并且不会在页面上占据空间;
- 事件监听: 无法进行 DOM 事件监听;
- 继承:不会被子元素继承,因为子类也不会被渲染;
- transition: transition 不支持
display
; - 性能:动态改变此属性时会引起重排,性能较差(
css3
的动画效果在display:none
的时候不耗费性能。)
visibility:hidden
- DOM 结构: 元素被隐藏但会被渲染,所以会占据空间;
- 事件监听: 无法进行 DOM 事件监听;
- 继承:会被子元素继承,并且子元素可以使用
visibility:visible
取消隐藏; - transition:visibility 会被立即显示,隐藏时会延时;
- 性能: 动态改变此属性时会引起重绘,性能较高。
opacity:0
- DOM 结构: 元素被隐藏但占据空间,因为只是改变透明度;
- 事件监听: 可以进行 DOM 事件监听;
- 继承: 会被子元素继承且子元素不能使用
opacity:1
取消隐藏; - transition: opacity 可以延时显示和隐藏;
- 性能:提升为合成层,不会触发重绘,性能较高。