006-CSS 有哪些方式可以隐藏页面元素及它们的区别?
前言
前端日常开发中,经常要使用隐藏元素的 CSS 样式属性。虽然效果看起来一样,但是它们还是存在着细微的区别。今天我们就来说说,在 CSS 中的隐藏元素有哪些以及它们的区别。
实现方式
- display: none
- visibility: hidden
- opacity: 0
- position: absolute
- 设置 width、height 模型属性为 0
- clip-path
display: none
设置元素的 display 为 none 是最常用的隐藏元素的方法
.hide {
display: none;
}
结果是被设置的元素消失,触发浏览器的重排和重绘,自身绑定的事件不会触发,也不会有过渡效果。
特点:元素不可见,不占据空间,无法响应点击事件。
visibility: hidden
设置元素的 visibility 为 hidden 也是一种常用的隐藏元素的方法。
从页面上仅仅是隐藏该元素,DOM 结果均会存在,只是当时在一个不可见的状态,不会触发重排,但是会触发重绘。
.hide {
visibility: hidden;
}
特点:元素不可见,占据页面空间,无法响应点击事件。
opacity: 0
opacity 属性表示元素的透明度,将元素的透明度设置为 0 后,元素也是可以隐藏的,但不会引发重排,一般情况下也会引发重绘。
提示
如果利用 animation 动画,对 opacity 做变化(animation 会默认触发 GPU 加速),则只会触发 GPU 层面的 composite,不会触发重绘。
.transparent {
opacity: 0;
}
由于其仍然是存在于页面上的,所以他自身的的事件仍然是可以触发的,但被他遮挡的元素是不能触发其事件,且其子元素不能设置 opacity 来达到显示的效果。
特点:改变元素透明度,元素不可见,占据页面空间,可以响应点击事件。
设置 width、height 模型属性为 0
将元素的 margin
,border
,padding
,height
和 width
等影响元素盒模型的属性设置成 0,如果元素内有子元素或内容,还应该设置其 overflow:hidden
来隐藏其子元素。
.hide {
margin: 0;
border: 0;
padding: 0;
height: 0;
width: 0;
overflow: hidden;
}
特点:元素不可见,不占据页面空间,无法响应点击事件。
position: absolute
将元素移出可视区域
.hide {
position: absolute;
top: -9999px;
left: -9999px;
}
特点:元素不可见,不影响页面布局。
clip-path
通过裁剪的形式
.hide {
clip-path: polygon(0px 0px, 0px 0px, 0px 0px, 0px 0px);
}
特点:元素不可见,占据页面空间,无法响应点击事件。
区别
关于 display: none
、visibility: hidden
、opacity: 0
的区别,如下:
display:none | visibility:hidden | opacity: 0 | |
---|---|---|---|
页面中 | 不存在 | 存在 | 存在 |
重排 | 会 | 不会 | 不会 |
重绘 | 会 | 会 | 不一定 |
自身绑定事件 | 不触发 | 不触发 | 触发 |
transition | 不支持 | 支持 | 支持 |
子元素可复原 | 不支持 | 支持 | 不支持 |
被遮挡的元素可触发事件 | 支持 | 支持 | 不支持 |
总结
最常用的还是 display: none
和 visibility: hidden
,其他的方式只能认为是奇招,它们的真正用途并不是用于隐藏元素,所以并不推荐使用它们。
部分答案整理自网络资源