CSS Display(显示) 与 Visibility(可见性)

以下是关于 CSS 中 display(显示)与 visibility(可见性)属性的中文详解,适合前端初学者或进阶者快速理解它们的区别、用法和应用场景


一、display 属性(显示)

✅ 作用:

控制元素在页面中的布局行为,也就是:
是否参与文档流、以何种形式渲染(块级、行内、弹性等)。

🔹 常见取值与说明:

属性值说明
none元素隐藏且不占位,从页面结构中完全移除。
block元素作为块级元素显示(独占一行、可设置宽高)。
inline元素作为行内元素显示(不独占一行、不能设置宽高)。
inline-block行内显示、但可以设置宽高
flex将元素设为弹性容器,用于 Flex 布局。
grid将元素设为网格容器,用于 Grid 布局。
table模拟表格布局。

📌 示例:

.box {
  display: none; /* 不显示,且不占据空间 */
}

.nav {
  display: flex; /* 弹性布局 */
}

二、visibility 属性(可见性)

✅ 作用:

控制元素是否可见,但它仍然占据空间

🔹 常见取值与说明:

属性值说明
visible默认值,元素可见。
hidden元素不可见,但仍占据空间
collapse仅对表格有效,隐藏行/列并移除空间。

📌 示例:

.box {
  visibility: hidden; /* 看不见,但仍占位 */
}

三、display: none 和 visibility: hidden 的区别

对比点display: nonevisibility: hidden
是否显示❌ 不显示❌ 不显示
是否占据空间❌ 不占据空间✅ 仍占据空间
是否影响布局✅ 会影响其他元素布局❌ 不影响
是否参与点击等交互❌ 不参与❌ 不参与
动画/过渡❌ 无法平滑切换✅ 可与 opacity 结合做淡入淡出效果

四、常见使用场景

场景使用建议
完全隐藏元素,不影响布局使用 display: none
仅视觉隐藏,但保留布局结构使用 visibility: hidden
动画过渡(淡入/淡出)用 visibility + opacity 结合 transition
切换弹窗、Tab 内容区域推荐使用 display: none/block

五、动画淡入淡出示例(结合使用)

.fade {
  transition: all 0.3s ease;
  opacity: 1;
  visibility: visible;
}
.fade.hidden {
  opacity: 0;
  visibility: hidden;
}
<div class="fade hidden">淡入淡出内容</div>

六、浏览器兼容性

属性兼容性
display✅ 所有浏览器支持
visibility✅ 所有浏览器支持

✅ 小结

属性控制什么?是否占位?常用于
display显示方式/是否渲染❌ none 不占位切换区域、响应式布局
visibility是否可见✅ 占位动画、保留布局结构

如你想了解 opacitypointer-events 等与显示效果相关的属性,也可以继续问我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注