display:none,visibility:hidden,opacity:0 有什么异同

本文详细探讨了CSS中display:none、visibility:hidden和opacity:0三种隐藏元素方式的相同点与不同点,包括它们对结构、继承性及性能的影响。display:none会使元素完全消失,不占用空间,而visibility:hidden则保持空间占用但不可见。opacity:0的元素虽然透明,却仍占用空间并可点击。此外,display:none和opacity:0会影响子孙元素,但visibility:hidden的子孙元素可被显示。在性能方面,display:none最消耗资源,visibility:hidden次之,而opacity:0的性能消耗取决于是否涉及过渡或动画。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相同点:使用元素在页面上都不可见;

不同点:
1.  结构:

display:none从渲染树中消失不占据空间不可点击
visibility:hidden从渲染树未消失占据空间不可点击
opacity:0从渲染树未消失占据空间可以点击


2. 继承性:
  display:none  是继承属性,由于元素从渲染树消失,造成子孙节点消失,即使修改子孙节点属性子孙节点也无法显示;
opacity:0;  会被子孙元素继承,即使子孙元素修改为opacity:1,也无法显示;
visivility:hidden  会被子孙元素继承,且修改子孙元素的visibility:visible 可以使子孙元素显示;

3.性能:display:none  修改元素会造成文档回流,读屏器不会读取display: none元素内容,性能消耗较大 ;

 visibility:hidden 修改元素仅仅是外观的改变 并没有改变布局,会引起被修改元素的重绘(repaint),性能消耗相对较少;
  opacity: 0 :分情况讨论 ,在 Blink 和 WebKit 内核的浏览器中,对于应用了 transition 或者 animation的 opacity 元素,浏览器会将渲染层提升为合成层。也可以使用 translateZ(0) 或者 translate3d(0,0,0) 来人为地强制性地创建一个合成层。此时不会引起重绘;
 其他情况,修改元素会造成重绘,性能消耗较少;详细合成层优化原理查看更多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值