(自用面试题)display:none;与visibility:hidden;的区别是什么?

172 阅读1分钟
  1. 是否在渲染树中:
    设置display: none;会让元素从渲染树中消失,渲染时不会占据任何空间。
    设置visibility: hidden;不会让元素从渲染树中消失,渲染时还会占据相应的空间,只是内容不可见。

  2. 是否是继承属性:
    display: none;是非继承属性,子孙节点会随着父节点从渲染树中消失,通过修改子孙节点的display属性也无法显示子孙节点。
    visibility: hidden;是继承属性,子孙节点消失是由于继承了父节点的visibility: hidden;,通过设置visibility: visible;可以让子孙节点重新显示。

  3. 修改常规文档流中元素的display通常会造成文档的重排,但是修改元素的visibility只会造成本元素的重绘。

  4. 如果使用读屏器,设置为display: none;的内容不会被读取,设置为visibility: hidden;的内容会被读取。

拓展:
读屏软件,是一种可以帮助盲人上网的工具。