贝利信息

HTML5布局displaynone和visibilityhidden区别_元素隐藏的两种方式的差异【说明】

日期:2026-01-09 00:00 / 作者:雪夜
display: none 彻底移除元素并触发重排,visibility: hidden 仅隐藏但保留布局位置且只触发重绘;前者不可继承、子元素不可见,后者可继承且子元素可设为可见;两者均阻止鼠标事件,但仅后者支持 focus()。

display: none 和 visibility: hidden 都能隐藏元素,但效果完全不同

关键区别在于:display: none 让元素彻底退出文档流,不占空间;visibility: hidden 只让元素“不可见”,仍占据原有布局位置。

元素是否参与页面布局(重排)

这是最直接影响渲染行为的差异:

子元素能否被显示或交互

继承性与事件响应行为不同:

实际使用时容易踩的坑

很多 bug 源于混淆二者语义:

立即学习“前端免费学习笔记(深入)”;

/* 安全的渐隐方案示例 */
.fade-out {
  visibility: hidden;
  opacity: 0;
  transition: opacity 0.3s, visibility 0.3s;
}
.fade-in {
  visibility: visible;
  opacity: 1;
}

有些细节必须动手测:比如 offsetHeightdisplay: none 下为 0,而 visibility: hidden 下仍返回真实值。别只看视觉表现。