当前位置: 首页 > news >正文

CSS隐藏元素:display:none vs visibility:hidden

display: nonevisibility: hidden 都是 CSS 中用于隐藏元素的属性,但它们在页面布局、渲染机制和交互行为上有本质区别:

核心区别总结:

特性display: nonevisibility: hidden
是否占据布局空间❌ 完全从文档流移除,不占空间✔️ 保留原有空间,布局留空白
子元素是否可见❌ 所有后代元素均不可见✔️ 子元素可通过 visibility: visible 单独显示
是否触发重排✔️ 改变布局,触发重排(性能影响大)❌ 不改变布局,只触发重绘(性能影响小)
是否响应事件❌ 无法响应点击等事件❌ 自身不响应事件(但可见子元素可响应)
是否可添加过渡动画❌ 不支持✔️ 可与 opacity 配合实现淡入淡出动画

详细解释:

1. 对布局空间的影响
  • display: none
    元素完全从渲染树中移除,不占据任何页面空间,后续元素会占据其位置(布局重新计算)。

    <div style="display: none;">隐藏元素</div>
    <div>后续元素会顶上去</div> <!-- 紧贴前一个元素 -->
    
  • visibility: hidden
    元素视觉上不可见,但仍占据原有空间,布局中会保留空白区域。

    <div style="visibility: hidden;">隐藏元素</div>
    <div>后续元素位置不变</div> <!-- 中间有空白区域 -->
    
2. 子元素的继承性
  • display: none
    所有子元素无论设置如何均不可见(父元素已不在渲染树中)。
  • visibility: hidden
    子元素默认继承隐藏属性,但可通过覆盖设置单独显示:
    .parent {visibility: hidden; /* 父元素隐藏 */
    }
    .child {visibility: visible; /* 子元素强制显示 */
    }
    
3. 渲染性能
  • display: none
    切换时会触发重排(Reflow)与重绘(Repaint),性能开销较大。
  • visibility: hidden
    仅触发重绘(Repaint)(元素仍在渲染树中,只修改可见性),性能更优。
4. 事件交互
  • 两者均无法响应自身事件(如点击、悬停)。
  • 特殊点:visibility: hidden 的元素中,若有子元素设为 visibility: visible,则该子元素仍可响应事件
5. 动画支持
  • display: none
    无法直接应用 CSS 过渡动画(切换时立即生效)。
  • visibility: hidden
    可与 opacity 组合实现平滑的淡入淡出效果:
    .element {visibility: hidden;opacity: 0;transition: opacity 0.5s, visibility 0.5s;
    }
    .element.show {visibility: visible;opacity: 1;
    }
    

使用场景建议:

  • display: none
    需要完全移除元素且不占空间(如动态切换选项卡、折叠菜单)。
  • visibility: hidden
    保留布局空间(如占位避免页面抖动),或实现隐藏/显示动画。

💡 关键记忆点

  • display: none = 彻底消失(物理移除)
  • visibility: hidden = “隐身”但占位(视觉隐藏)
http://www.dtcms.com/a/282630.html

相关文章:

  • S7-200 SMART PLC:模拟量模块接线全解析
  • 新手向:自动化图片格式转换工具
  • PyCharm高效入门指南大纲
  • 如何在 Linux 上下载和安装 Conda/Miniconda
  • 基于 Docker 环境的 JupyterHub 详细部署手册
  • VR 污水厂初体验:颠覆传统认知​
  • 广州 VR 森林防火系统功能探究​
  • Harmony-Next鸿蒙实战开发项目-仿小米商城App----V2
  • DOM 规范中的 MutationObserver 接口
  • 【LeetCode 热题 100】543. 二叉树的直径——DFS
  • STM32 写选项字 关键要加载HAL_FLASH_OB_Launch
  • 红黑树、B树、B+树
  • 轻松将文件从 iPhone 传输到 Mac
  • 中医文化学习软件,传承国粹精华
  • Redis Key 设计原则
  • Excel转PDF的三种方法
  • 基于大数据的网络文学推荐分析系统的设计与实现【海量书籍、自动爬虫】
  • 《通信原理》学习笔记——第二章
  • AI进化论15:通用人工智能(AGI)的“终极梦想”与“潘多拉魔盒”
  • AI炒作,AGI或在2080年之前也无法实现,通用人工智能AGI面临幻灭
  • 基于 .Net Core+MySQL开发(WinForm)翻译平台
  • rLLM:用于LLM Agent RL后训练的创新框架
  • 前端面试题(React 与 Vue)
  • #Datawhale组队学习#7月-强化学习Task1
  • Java大厂面试实录:从电商场景到AI应用的深度技术考察
  • 如何通过域名白名单​OVP防盗链加密视频?
  • 【游戏引擎之路】登神长阶(十八):3天制作Galgame引擎《Galplayer》——无敌之道心
  • AJ Security:实用的 Java Web 安全库
  • Qt获取hid设备信息
  • 抖音小程序开发如何避坑?如何接口调用与性能优化?