CSS中用 opacity、visibility、display 属性将 元素隐藏 的 对比分析

浅谈visibility,display,opacity的区别 本文探讨了 CSS 中 visibility、display 和 opacity 的区别。它们都能实现元素的显示和隐藏,但具体行为不同。display: none; 完全移除元素,不占空间;visibility: hidden; 隐藏元素但仍占空间;opacity: 0; 使元素透明但仍占空间。文章还讨论了它们在性能、动画效果、事件绑定和子元素继承方面的差异,并提供了实际应用场景和注意事项。 阅读详情
说明

opacity 用来设置透明度
display 定义建立布局时元素生成的显示框类型
visibility 用来设置元素是否可见。
opacity、visibility、display 这三个属性分别取值 0、hidden、none 都能使元素在页面上看不见,但是他们在方方面面都还是有区别的。

是否占据页面空间

举个例子

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
    .yellow{
        width:100px;
        height:100px;
        background:yellow;
    }
    .red{
        width:100px;
        height:100px;
        background:red;
    }
  </style>
 </head>
 <body>
    <div class="yellow"></div>
    <div class="red"></div>
 </body>
</html>

最开始的样子
这里写图片描述

黄色块div元素 使用 opacity:0; 时
这里写图片描述

黄色块div元素 使用 visibility:hidden; 时
这里写图片描述

黄色块div元素 使用 display:none; 时
这里写图片描述

可以看出,使用 opacity 和 visibility 属性时,元素还是会占据页面空间的,而使用 display 属性时,元素不占据页面空间。

对子元素的影响

如果子元素什么都不设置的话,都会受父元素的影响,和父元素的显示效果一样,我们就来举例看看,如果子元素设置的值 和 父元素设置的值不同会有什么效果。
例子 (opacity属性)

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
	.yellow{
		width:100px;
		height:100px;
		background:yellow;
		opacity:0;  /* 父元素的 opacity属性取值为0 */
	}
	.blue{
		width:50px;
		height:50px;
		background:blue;
		opacity:1;   /* 子元素的 opacity属性取值为1 */
	}
  </style>
 </head>
 <body>
	<div class="yellow">
		<div class='blue'></div>
	</div>
 </body>
</html>

这里写图片描述

例子 (visibility属性)

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
	.yellow{
		width:100px;
		height:100px;
		background:yellow;
		visibility:hidden;  /* 父元素的 visibility属性取值为hidden */
	}
	.blue{
		width:50px;
		height:50px;
		background:blue;
		visibility:visible;  /* 子元素的 visibility属性取值为visible */
	}
  </style>
 </head>
 <body>
	<div class="yellow">
		<div class='blue'></div>
	</div>
 </body>
</html>

这里写图片描述

例子 (display属性)

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
	.yellow{
		width:100px;
		height:100px;
		background:yellow;
		display:none;  /* 父元素的 display属性取值为none */
	}
	.blue{
		width:50px;
		height:50px;
		background:blue;
		display:block;  /* 子元素的 display属性取值为block */
	}
  </style>
 </head>
 <body>
	<div class="yellow">
		<div class='blue'></div>
	</div>
 </body>
</html>

这里写图片描述

可以看出,使用 opacity 和 display 属性时,父元素对子元素的影响很明显,子元素设置的 opacity 和 display 属性是不起作用的,显示的效果和父元素一样,而使用 visibility 属性时,子元素如果设置为 visibility:visible; 并没有受父元素的影响,可以继续显示出来。

自身绑定的事件是否能继续触发

这里说的触发事件,是指用户人为的触发的事件,不包括使用 JavaScript 模拟触发的事件。
例子 (opacity属性)

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
	.yellow{
		width:100px;
		height:100px;
		background:yellow;
		opacity:0;
	}
 
  </style>
 </head>
 <body>
	<div class="yellow" onmouseenter="alert(0)"></div>
 </body>
</html>

这里写图片描述

例子 (visibility属性)

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
	.yellow{
		width:100px;
		height:100px;
		background:yellow;
		visibility:hidden;
	}
 
  </style>
 </head>
 <body>
	<div class="yellow" onmouseenter="alert(0)"></div>
 </body>
</html>

这里写图片描述

使用 display:none; 就不用举例子了,因为使用 display 属性的话,元素不仅看不见,而且也不占据页面空间,所有不会触发事件。

总的来说,使用 visibility 和 display 属性,自身的事件不会触发,而使用 opacity 属性,自身绑定的事件还是会触发的。

是否影响其他元素触发事件

例子(opacity属性)

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
       .red{
         width:400px;
         height:40px;
         background:red;
         position:relative;
       }
       
       .yellow{
        position:absolute;     
        top:0;
        left:0;
        width:200px;
        height:300px;
        background:yellow;
        opacity:0;            
       }
        
       .blue{
         width:200px;
         height:200px;
         background:blue;
       }
       .red:hover .yellow{
         opacity:1;          
       }
  </style>
 </head>
 <body>
      <div  class='red'>
         <div class='yellow'></div>
      </div>

      <p  class='blue' onmouseenter=alert(0)></p>
 </body>
</html>

这里写图片描述
黄色块div元素设置 opacity:0;,通过定位,遮挡住了 蓝色的p元素,当鼠标移到蓝色p元素上时,并没有触发蓝色p元素的事件。

例子(visibility属性)

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
       .red{
         width:400px;
         height:40px;
         background:red;
         position:relative;
       }
       
       .yellow{
        position:absolute;     
        top:0;
        left:0;
        width:200px;
        height:300px;
        background:yellow;
        visibility:hidden;          
       }
        
       .blue{
         width:200px;
         height:200px;
         background:blue;
       }
       .red:hover .yellow{
         visibility:visible;       
       }
  </style>
 </head>
 <body>
      <div  class='red'>
         <div class='yellow'></div>
      </div>

      <p  class='blue' onmouseenter=alert(0)></p>
 </body>
</html>

这里写图片描述
黄色块div元素设置 visibility:hidden;,通过定位,虽然遮挡住了 蓝色的p元素,但是当鼠标移到蓝色p元素上时,还是触发了蓝色p元素绑定的事件。

和上边一样,display 属性就不举例子了,因为他不会占据页面空间,也就不会遮挡其他元素,就不会影响其他元素触发事件了。
所以,visibility 和 display 属性是不会影响其他元素触发事件的,而 opacity 属性 如果遮挡住其他元素,其他的元素就不会触发事件了。

是否产生回流(reflow)

回流

当页面中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流(也有人会把回流叫做是重布局或者重排)。
每个页面至少需要一次回流,就是在页面第一次加载的时候。

dispaly 属性会产生回流,而 opacity 和 visibility 属性不会产生回流。

是否产生重绘(repaint)

重绘

当页面中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的时候,比如background-color。则称为重绘。

dispaly 和 visibility 属性会产生重绘,而 opacity 属性不一定会产生重绘。

元素提升为合成层后,transform 和 opacity 不会触发 repaint,如果不是合成层,则其依然会触发 repaint。
在 Blink 和 WebKit 内核的浏览器中,对于应用了 transition 或者 animation 的 opacity 元素,浏览器会将渲染层提升为合成层。
也可以使用 translateZ(0) 或者 translate3d(0,0,0) 来人为地强制性地创建一个合成层。

举个例子

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
</head>
<body>
	<div id="target">重绘 repaint</div>

	<script>
		var flag = false;
		setInterval(function () {
			flag = !flag;
			target.style.opacity = flag ? 0 : 1;
		},1000)
	</script>
</body>
</html>

我们可以用 Chrome DevTools 的 Rendering 来看看,
先打开 Rendering
这里写图片描述
把第一个选项勾选,这个选项会 高亮显示需要重绘的区域。
这里写图片描述
看看效果
这里写图片描述

改改代码,增加上个 transition

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <style>
    div{
        transition:1s;
    }
  </style>
</head>
<body>
	<div id="target">重绘 repaint</div>

	<script>
		var flag = false;
		setInterval(function () {
			flag = !flag;
			target.style.opacity = flag ? 0 : 1;
		},1000)
	</script>
</body>
</html>

再看看效果
这里写图片描述

加上 transition 后就没有 高亮显示了,这时候 opacity 不会触发重绘。

实际上透明度改变后,GPU 在绘画时只是简单的降低之前已经画好的纹理的 alpha 值来达到效果,并不需要整体的重绘。不过这个前提是这个被修改的 opacity 本身必须是一个图层,如果图层下还有其他节点,GPU 也会将他们透明化。

注意:回流必将引起重绘,而重绘不一定会引起回流。

是否支持transition

opacity 是支持 transition的,一般淡入淡出的效果就是这样实现的。
这里写代码片

visibility 也是支持 transition 的。

visibility: 离散步骤,在0到1数字范围之内,0表示“隐藏”,1表示完全“显示”

visibility : hidden; 可以看成 visibility : 0;
visibility : visible; 可以看成 visibility : 1;

只要 visibility 的值大于0就是显示的,所以
visibility:visible 过渡到 visibility:hidden,看上去不是平滑的过渡,而是进行了一个延时。

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
  .blue{
	width:200px;
	height:200px;
	background:blue;
	transition:1s;
	visibility:visible;
  }
  .blue:hover{
	visibility:hidden;
  }
  </style>
 </head>
 <body>
	<div class='blue'></div>
 </body>
</html>

这里写图片描述
而如果 visibility:hidden 过渡到 visibility:visible ,则是立即显示,没有延时。
注意
上面这个例子只能是从 visibility:visible 过渡到 visibility:hidden,不能从 visibility:hidden 过渡到 visibility:visible 。
当元素是 visibility:hidden; 时,自身的事件不会触发,所以像上面这个例子中,直接在蓝色块div元素 上加 hover 事件,要去将自身的 visibility:hidden 过渡到 visibility:visible 是不会起作用的。
但是在其他元素上加事件,来将该元素的 visibility:hidden 过渡到 visibility:visible 是可以的,看例子。

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
  .red{
	width:200px;
	height:200px;
	background:red;
  }
  .blue{
	width:200px;
	height:200px;
	background:blue;
	transition:1s;
    visibility:hidden;
  }
  .red:hover+.blue{
	visibility:visible;
  }
  </style>
 </head>
 <body>
		<div class='red'></div>
		<div class='blue'></div>
 </body>
</html>

这里写图片描述

display 不仅不支持transition,它还会使 transition 失效。举个例子看看

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
	.blue{
		width:200px;
		height:200px;
		background:blue;
	}
	.yellow{
		width:100px;
		height:100px;
		background:yellow;
		opacity:0;
		display:none;
		transition:1s
	}
	.blue:hover .yellow{
		opacity:1;
		display:block;
	}
  </style>
 </head>
 <body>
	<div class='blue'>
		<div class='yellow'></div>
	</div>
 </body>
</html>

这里写图片描述

可以看出用了display,支持 transition 的 opacity 属性也没起作用。

这是因为display:none; 的元素,是不会渲染在页面上的,而 transition 要起作用,元素必须是已经渲染在页面上的元素,我们可以再来看个例子

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
	.blue{
		width:200px;
		height:200px;
		background:blue;
	}
	.yellow{
		width:100px;
		height:100px;
		background:yellow;
		opacity:0;
		transition:1s
	}
  </style>
 </head>
 <body>
	<span>渲染到页面</span>
	<div class='blue'></div>
	
	<script>	
		var span = document.querySelector('span');
		span.addEventListener('click',function(){
			var yellowDiv = document.createElement('div');
			yellowDiv.classList.add('yellow');

			var blue = document.querySelector('.blue');
			blue.appendChild(yellowDiv);

			yellowDiv.style.opacity = '1';
		})
	</script>
 </body>
</html>

这里写图片描述
给 span 元素绑定事件,点击它的时候,才会把黄色块div元素,渲染到DOM树上,然后改变黄色块div元素的 opacity 属性,opacity 是支持 transition 的,而在这段代码中,并没有起作用。
更详细的关于 transition 是否成功 的解读看这里
渲染树决定 transtion 能否成功

要想解决这个问题,我们可以这样做。
1、把 display 属性换成 visibility 属性

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
	.blue{
		width:200px;
		height:200px;
		background:blue;
	}
	.yellow{
		width:100px;
		height:100px;
		background:yellow;
		opacity:0;
		visibility:hidden;
		transition:1s
	}
	.blue:hover .yellow{
		opacity:1;
		visibility:visible;
	}

  </style>
 </head>
 <body>
	<div class='blue'>
		<div class='yellow'></div>
	</div>
 </body>
</html>

这里写图片描述

2、如果必须要用 display 属性,我们可以加上定时器来解决这个问题

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
	.blue{
		width:200px;
		height:200px;
		background:blue;
	}
	.yellow{
		width:100px;
		height:100px;
		background:yellow;
		display:none;
		opacity:0;
		transition:1s;
	}
  </style>
 </head>
 <body>
	<div class='blue'>
		<div class='yellow'></div>
	</div>
	<script>	
		var blue = document.querySelector('.blue');
		blue.addEventListener('mouseenter',function(){
			var yellowDiv = document.querySelector('.yellow');
			yellowDiv.style.display = 'block';
			setTimeout(function(){
				yellowDiv.style.opacity = '1';
			},0);
		})
	</script>
 </body>
</html>

这里写图片描述

总结
opacity : 0visibility : hiddendisplay : none
是否占据页面空间占据占据不占据
子元素设置该属性其他值是否可以继续显示不可以可以不可以
自身绑定的事件是否能继续触发能触发不能触发不能触发
是否影响遮挡住的元素触发事件影响不影响不影响
属性值改变是否产生回流(reflow)不产生不产生产生
属性值改变是否产生重绘(repaint)不一定产生产生产生
该属性是否支持transition支持支持不支持
前端必知必会-CSS不透明度opacity/transparency 本文介绍了的CSS不透明度opacity/transparency使用,如有问题欢迎私信和评论。 阅读详情

相关推荐

RGBA和OPACITY的透明效果有何不同 DISPLAY:NONE和VISIBILITY:HIDDEN的区别

这里是修真院前端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能,本篇分享的是: 【 RGBA和OPACITY的透明效果有何不同 DISPLAY:NONE和VISIBILITY:HIDDEN的区别】 大家好,我是IT修真院北京分院第23期的学员郭婷婷,一枚正直纯洁善良的WEB前端程序员...

IT修真院:初学者转行到互联网的聚集地 741

CSS中设置透明度的2个属性:opacity,RGBA以及它们的区别

透明度在网页设计中扮演着重要的角色,透明度的合理运用可以提升网页设计的美感和功能性,增强用户体验,突出重点内容,同时也为设计师提供了更多的创作空间和可能性。那我们一起来看看吧。

u013179804的博客 8215

CSS元素的显示与可见性(详解Display和Visibility的用法)

1.DisplayDisplay主要用于控制元素的布局方式,包括块级、行内、弹性布局和网格布局等。Visibility主要用于控制元素的可见性,即元素是否在页面中可见,但不影响布局。display属性display属性用于定义元素应该生成的框的类型。常见的display属性值包括:none: 元素不会被渲染在页面上,且不占据空间。block: 元素被渲染为块级元素,占据一整行。inline: 元素被渲染为内联元素,不会独占一行,与其他内联元素在一行内显示。

百赢出品,必属精品 6151

visibility,display,opacity的区别?

相同点: visibility和display都能实现元素的显示和隐藏 display: none; 隐藏元素 display: block; 显示元素 display: inline; 元素转换为行内元素 display: inline-block; 元素转换为行内块元素 visibility:hidden; 隐藏元素 visibility: visible;显示元素 opacity: 0是视觉上消失了,透明度为0,在文档流中站位,浏览器会解析 区别: 1.性能比较 使用visibility:hid

想好了再写! 3903

实战指南:如何用Frida绕过某梆加固的Anti-Frida检测(附完整脚本)

本文深入剖析了企业级加固方案中的Anti-Frida检测机制,并提供了实战对抗策略。通过分析基于文件系统、内存特征、行为及环境的多层次检测原理,文章详细介绍了如何定位检测逻辑、绕过maps文件扫描、对抗内存与行为特征检测,并附上了针对某梆加固的完整绕过脚本与系统化工程方案。

weixin_42527589的博客 598

QGroundControl高级配置与自定义功能实战指南

本文深入探讨了QGroundControl(QGC)的高级配置与自定义功能,为无人机开发者、系统集成商和高级用户提供实战指南。内容涵盖从品牌界面定制、自定义MAVLink消息处理,到插件开发与自动化部署的全流程,旨在帮助用户解锁QGC的隐藏潜力,打造专属的行业解决方案。

weixin_29234509的博客 239

html5隐藏占位置,CSS中用 opacity、visibility、display 属性将 元素隐藏 的 对比分析...

说明opacity 用来设置透明度display 定义建立布局时元素生成的显示框类型visibility 用来设置元素是否可见。opacity、visibility、display 这三个属性分别取值 0、hidden、none 都能使元素在页面上看不见,但是他们在方方面面都还是有区别的。是否占据页面空间举个例子.yellow{width:100px;height:100px;background...

weixin_32715349的博客 1174

Apollo&Carla联合仿真环境搭建与实战调试

本文详细介绍了Apollo与Carla联合仿真环境的搭建与实战调试流程,涵盖硬件配置、软件依赖安装、Apollo环境配置、Carla仿真器安装、桥接服务设置以及常见问题解决方案。通过逐步指导,帮助开发者高效实现自动驾驶仿真测试,提升开发效率。

ee345的博客 200

CSS隐藏属性display:none;visibility:hidden;overflow:hidden

前端CSS元素隐藏的知识(display:none;visibility:hidden;overflow:hidden;opacity: 0)

Jorpeng的博客 4846

STM32 热敏电阻测量温度

1、硬件 STM32F103C8T6、热敏电阻传感器、OLED。 2、热敏电阻传感器的介绍

weixin_54721788的博客 1万+

私彩视频开奖动画直播源码内部核心技术解析及修改可增加后台操控-持续更新文章!

其实在此很感谢能做出H5开奖系统的码农们,而我本人也喜欢分解此类的东西。 因为特殊原因,该东西本人就不做图片展示,以防他人商业化。 借用开奖摇奖代码首先分解首页index文件。代码如下:(后面持续在原有的作品上添加后台操作) 代码里写的//.....是我的注明代码的所需。 ​ &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;...

yugua3837的博客 5995

opacity/visibility/display 区别对比

opacity 用来设置透明度 display 定义建立布局时元素生成的显示框类型 visibility 用来设置元素是否可见。 opacity、visibility、display 这三个属性分别取值 0、hidden、none 都能使元素在页面上看不见,但是他们在方方面面都还是有区别的。 1、display:none (1)、浏览器不会生成属性为display: none;的元素。 (2)、d...

高先生的猫 4348

npu-smi info 华为昇腾NPU 状态监控工具解读

用于查询所有设备的基本信息。

Lixora's DB Home 2485

CSS display | opacity | visibility的区别;回流与重绘

opacity=0 该元素变透明,但是不会改变页面布局。 并且若此元素绑定了事件,点击该元素所占区域时,响应事件同样会被触发。 visibility=hidden 该元素变为不可见,但是不会改变页面布局。 对用户不可见后,点击相应的区域也无法触发绑定的事件 display=none 该元素不再展示,会改变页面布局 点击相应的区域也无法触发绑定的事件 ...

xx_yan的博客 4391

Qt5.14.2+VS2017开发环境搭建全流程(含插件配置与项目测试)

本文详细介绍了Qt5.14.2与VS2017开发环境的完整搭建流程,包括软件安装、插件配置、环境变量设置以及项目测试。特别针对实际开发中常见的配置问题提供解决方案,帮助C++开发者快速搭建高效的Qt开发环境。

weixin_28419039的博客 217

微信商家转账报错“当前使用用户过多,请稍后重新确认收款”解决方案

当前使用用户过多,请稍后重新确认收款”这个错误,其实就是典型的参数误处理导致的假报错。记住一句话就行👇JSAPI 场景下的package参数不要做 UrlEncode。如果你也遇到这个问题,希望这篇文章能帮你少踩一个坑。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 784

CSS——display、visibility、opacity隐藏元素的区别

.box1 { width: 200px; height: 200px; background-color: yellow; } .box2 { width: 200px; height: 200px; background-color: red; } <div class="box1"> box1 </div> <div class="box2"> box2 </div> document.querySelector(".box1").o

weixin_43311978的博客 656

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

display:none、visibility:hidden和opacity:0之间的区别

一、空间占据 display:none隐藏后不占据额外空间,它会产生回流和重绘,而visibility:hidden和opacity:0元素虽然隐藏了,但它们仍然占据着空间,它们俩只会引起页面重绘。 代码: div { width: 200px; height: 200px; background: #ccc; margin-top: 10px; } .div1

github_39673115的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

css隐藏元素的几种方式及区别 display:none visibility:hidden opacity 元素隐藏

元素的显示和隐藏 display:none 元素在页面上将彻底消失,元素本来占有的空间就会被其他元素占有,也就是说它会导致浏览器的重排和重绘,并且不会触发它的点击事件。 visibility:hidden 元素在页面消失后,其占据的空间依旧会保留着,所以它只会导致浏览器重绘而不会重排,也无法触发它的点击事件 opacity:0 将元素的透明度设置为0后,也可以视为一种隐藏,这算是一种隐藏元素的方法。和visibility:hidden的一个共同点是元素隐藏后依旧占据着空间,但我们都知道,设置透明度为0后,元

, 2365

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

CSS 隐藏属性 -- display:none、visibility:hidden、opacity:0三者的区别

一、空间占据 display:none 不会占据额外空间,会产生重排(回流)和重绘 visibility:hidden和opacity:0 会占据空间,只会产生重绘 visibility:hidden 不会影响列表的计数 <ol> <li>元素1</li> <li style=" visibility:hidden">元素2</li> <li>元素3</li> </ol> // 1.元素1 //

19年的墨先生的博客 1767

【css】隐藏元素:display、opacity、visibility

display 、opacity、visibility

沧海一比特的博客 670

css中的display、visibility、opacity

opacity:用来设置透明度(0-1) display:用来定义建立布局时元素生成的显示框的类型(‘block’,‘flex’,‘inline’,‘inline-block’,‘table’,‘none’) visibility:用来设置元素是否可见(‘visible’,‘hidden’) 是否占据了空间 opacity、visibility 不显示仍占据空间 display 不显示不占据空间 对子元素的影响 如果父元素和子元素的显隐性不同(父隐子显),opacity、display子元素的设置.

rfalcon的博客 1318

opacity: 0、visibility: hidden、display: none 优劣和适用场景,以及隐藏元素的几种方法

1.display: none DOM 结构:浏览器不会渲染 display 属性为 none 的元素,会让元素完全从渲染树中消失,渲染的时候不占据任何空间; 事件监听:无法进行 DOM 事件监听,不能点击; 性能:修改元素会造成文档回流(reflow 与 repaint),读屏器不会读取display: none元素内容,性能消耗较大; 继承:是非继承属性,由于元素从渲染树消失,造成子孙节点消失,即使修改子孙节点属性子孙节点也无法显示,毕竟子类也不会被渲染; 场景:显示出原来这里不存在的结构; tran

青颜的天空的博客 8378

CSS隐藏元素的几种方式以及display、visibility、opacity的区别

CSS隐藏元素的几种方式以及display、visibility、opacity的区别

m0_56698268的博客 968
上一篇: JavaScript实现爆炸碎片的 图片切换 效果
下一篇: 一个浪漫又悲情的爱情故事——笛卡尔心形线
FEWY
FEWY 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄10年 504粉丝 77原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值