秋招总结篇——css隐藏元素的方式

82 阅读2分钟

——这个系列是对自己最近复习的知识点的总结,便于快速回顾记忆,如果有帮助,不妨点个赞哈!

一直都想对这个琐碎的知识点进行总结,因为种种原因被耽搁了现在补上。

1.display:none;

div{ display:none }

首先引用一下mdn 中的描述

display: none

在一个元素中使用 display 的值为 none 将会从无障碍树中移除它。这将导致该元素及其所有后代元素不再通过屏幕阅读器技术展示。

如果你想要从视觉上隐藏元素,一个更好的替代方案是使用属性的组合将其直观地从屏幕删除,但是通过屏幕阅读器等辅助技术依然可以解析。

使用display:none,

  • 该元素的dom 节点是存在的
  • 但是不在文档流中占据位置,
  • 并且不会触发任何事件。
缺点

显然它的缺点是很明显的,由于不存在于文档流中,如果一个元素频繁的采用这种方式来,显示隐藏,就会让浏览器一直不停的重排与重绘,重排对浏览器性能造成影响较大,所以mdn 也推荐一般采用其他方式去隐藏。

2.visibility:hidden

如果频繁的切换就可以采用这种方式。

image.png

就是处于隐藏状态中,

  • 隐藏元素还是占据位置,
  • 那么在频繁切换中,浏览器只会进行重绘,不会重排。
  • 并且不会触发任何事件。

3 更改透明度

  • rgba,
  • opacity
div {
color: rgba(0,0,0,0);
background-color: rgba(0,0,0,0);
}

div {
 opacity: 0; 
}

image.png

由此可见,他们和visibility:hidden。一样都占据空间,不一样的是,

  • 他们可以触发事件,
  • 可以支持动画的渐变效果。
  • 性能也是不错的。
  • 缺点是浏览器兼容性,不如上面,1,2。

4 更改层级

div {
z-index: -1; 
}
  • 脱离标准文档流了,性能不错。
  • 不能触发事件。

5 补充,v-if,v-show

v-show 相当于 display:none, 然而 v-if 和上面所以隐藏的方式都不一样,他是直接删除了dom 节点。虚拟dom 转化为真实dom 时候应该没有去构建这个节点。