display: none和visibility: hidden的区别

news/2024/11/23 21:44:33/

display: none和visibility: hidden的区别

三种隐藏的对比

display: none;

  1. DOM 结构:浏览器不会渲染 display 属性为 none 的元素,不占据空间;
  2. 事件监听:无法进行 DOM 事件监听;
  3. 性能:动态改变此属性时会引起重排,性能较差;
  4. 继承:不会被子元素继承,毕竟子类也不会被渲染;
  5. transition:transition 不支持 display。

visibility: hidden;

  1. DOM 结构:元素被隐藏,但是会被渲染不会消失,占据空间;
  2. 事件监听:无法进行 DOM 事件监听;
  3. 性 能:动态改变此属性时会引起重绘,性能较高;
  4. 继 承:会被子元素继承,子元素可以通过设置 visibility: visible; 来取消隐藏;
  5. transition:visibility 会立即显示,隐藏时会延时

opacity: 0;

  1. DOM 结构:透明度为 100%,元素隐藏,占据空间;
  2. 事件监听:可以进行 DOM 事件监听;
  3. 性 能:提升为合成层,不会触发重绘,性能较高;
  4. 继 承:会被子元素继承,且,子元素并不能通过 opacity: 1 来取消隐藏;
  5. transition:opacity 可以延时显示和隐藏

display: nonevisibility: hidden 都可以用于隐藏元素,但它们的行为和效果有一些重要的区别:

display: none

  • 效果:元素从页面中完全移除。它不占据任何空间,也不会影响页面的布局。
  • 布局:元素及其子元素都不会占据任何空间。页面的布局会重新计算,就好像这个元素从未存在过一样。
  • 交互:元素无法被用户点击,也无法通过键盘导航等方式获得焦点。
  • 影响:元素被完全从文档流中移除,对页面的视觉布局和交互都有显著影响。

示例

<!DOCTYPE html>
<html>
<head><style>.hidden {display: none;}</style>
</head>
<body><div class="hidden">This is hidden</div><div>This is visible</div>
</body>
</html>

visibility: hidden

  • 效果:元素仍然存在于页面中,但不可见。它仍然占据空间。
  • 布局:元素及其子元素仍然占据空间,只是不可见。页面的布局不会改变,元素仍然会占据其应有的空间。
  • 交互:元素无法被用户点击,也无法通过键盘导航等方式获得焦点,但它占据的空间仍然存在,可能会影响其他元素的交互。
  • 影响:元素不可见,但仍在文档流中,占据空间,对页面的布局没有影响。

示例

<!DOCTYPE html>
<html>
<head><style>.hidden {visibility: hidden;}</style>
</head>
<body><div class="hidden">This is hidden</div><div>This is visible</div>
</body>
</html>

对比总结

  1. 布局
    • display: none:元素从页面中完全移除,不占据任何空间。
    • visibility: hidden:元素不可见,但仍然占据空间。
  2. 页面重绘和重排
    • display: none:由于元素被完全移除,页面会触发回流和重绘,完全移除元素。。
    • visibility: hidden:页面只会触发重绘(repaint),不会触发重排。
  3. 动画和过渡
    • display: none:在使用 CSS 过渡和动画时,不太容易实现,因为元素被完全移除。
    • visibility: hidden:可以配合 CSS 过渡和动画实现隐藏和显示效果,因为元素仍然存在。

使用场景

  • 使用 display: none:当你希望元素完全从页面中移除,不影响页面布局和交互时使用。
  • 使用 visibility: hidden:当你希望元素不可见但仍然占据空间,保持页面布局不变时使用。

性能分析

  • display: none 性能影响
    • 优点:适用于希望元素完全从页面中移除的场景,比如切换视图、隐藏某些页面内容。
    • 缺点:由于会触发回流,可能会导致性能瓶颈,尤其是在大量元素或频繁操作时。
  • visibility: hidden 性能影响
    • 优点:适用于希望元素不可见但仍然占据空间的场景。不会触发回流,仅触发重绘,相对开销较小。
    • 缺点:虽然重绘的开销较小,但在频繁使用时仍然可能影响性能。

实践建议

  1. 避免频繁回流:尽量减少对布局的频繁操作。比如,可以通过批量操作 DOM 元素、减少样式变更的频率、使用文档片段(Document Fragment)等方式优化性能。
  2. 选择合适的隐藏方法
    • 使用 display: none:当需要完全移除元素,不再占用布局空间时。
    • 使用 visibility: hidden:当仅需要隐藏元素,但仍需保持其布局空间时。
  3. 优化重绘:虽然重绘的开销较小,但在频繁操作时仍需要注意。可以通过减少样式变更、合并样式操作等方式优化。

http://www.ppmy.cn/news/1549375.html

相关文章

深入实践 Shell 脚本编程:高效自动化操作指南

一、什么是 Shell 脚本&#xff1f; Shell 脚本是一种用 Shell 编写的脚本程序&#xff0c;用于执行一系列的命令。它是 Linux/Unix 系统中自动化管理任务的利器&#xff0c;能够显著提升工作效率&#xff0c;特别适合批量处理文件、监控系统状态、自动部署等任务。 二、Shell…

泷羽sec-星河飞雪-shell-2

免责声明 学习视频来自 B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 泷羽sec官网&#xff1a;http…

PHP 8.4 重磅发布了

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

设计模式之 责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;旨在将多个处理对象通过链式结构连接起来&#xff0c;形成一条处理请求的链条。每个处理对象都有机会处理请求&#xff0c;或者将请求传递给链中的下一个对象。这样&#x…

蓝桥杯某C语言算法题解决方案(质因数分解)

蓝桥杯原题&#xff1a;将一个正整数分解质因数例如&#xff1a;输入90&#xff0c;打印出90 2 * 3 * 3 * 5。 声明&#xff1a;该题目是否为蓝桥杯原题未知&#xff0c;我是从CSDN上面查到的&#xff0c;仅对该题目进行解决。 这个题与我之前发表过的一些关于检验一个数字是…

iOS无人直播虚拟视频实用版

iOS无人直播虚拟视频实用版 资源描述 本资源提供了一个名为“iOS无人直播虚拟视频实用版”的资源文件&#xff0c;该文件允许用户在iOS设备上实现无人直播功能&#xff0c;通过虚拟视频技术播放指定的视频内容。该资源文件特别适用于需要进行刷脸验证的场景&#xff0c;用户可…

windows已建立威胁IP排查

在应急响应的时候&#xff0c;需要筛选出服务器建立连接的进程、PID&#xff0c;此代码可满足该需求实现共计2步 首先windos netstat-ano > all.txt&#xff0c; 上传至pycharm路径 第一步获取服务器建立连接的ip import re# 从文件读取 netstat 输出 def read_netstat_f…

【Flask+Gunicorn+Nginx】部署目标检测模型API完整解决方案

【Ubuntu 22.04FlaskGunicornNginx】部署目标检测模型API完整解决方案 文章目录 1. 搭建深度学习环境1.1 下载Anaconda1.2 打包环境1.3 创建虚拟环境1.4 报错 2. 安装flask3. 安装gunicorn4. 安装Nginx4.1 安装前置依赖4.2 安装nginx4.3 常用命令 5. NginxGunicornFlask5.1 ng…