display: none;与visibility: hidden;的区别

本文探讨了`display:none`与`visibility:hidden`两种CSS属性的区别,包括元素可见性、渲染树影响、重排或重绘行为,以及对读屏器的影响。关键在于理解它们如何影响元素布局和可访问性。
  • 联系:它们都能让元素不可见

  • 区别:

    • display:none;会让元素完全从渲染树中消失,渲染的时候不占据任何空间;visibility: hidden;不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可见
    • display: none;是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示;visibility: hidden;是继承属性,子孙节点消失由于继承了hidden,通过设置visibility: visible;可以让子孙节点显式
    • 修改常规流中元素的display通常会造成文档重排。修改visibility属性只会造成本元素的重绘。
    • 读屏器不会读取display: none;元素内容;会读取visibility: hidden;元素内容
CSS中,`display:none` 和 `visibility:hidden` 都用于隐藏元素,但它们的行为有很大的不同。 `display:none` 会使元素完全从文档流中移除,该元素不会在页面上占据任何空间,就好像它根本不存在于HTML文档中一样。这意味着它不会影响其他元素的布局,并且该元素及其子元素的事件绑定也不会触发,在浏览器渲染时也不会绘制该元素。例如: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .hidden-display { display: none; } </style> </head> <body> <div class="hidden-display">这个元素使用display:none隐藏</div> <div>这是另一个元素</div> </body> </html> ``` 在上述代码中,使用 `display: none` 的元素不会在页面上显示,也不会占据空间,后面的元素会填充其原本的位置。 而 `visibility:hidden` 只是让元素不可见,但元素仍然会在文档流中占据它原本的空间,它的布局位置不会改变,就好像元素是透明的一样。元素及其子元素的事件绑定仍然存在,只是因为不可见而无法触发。例如: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .hidden-visibility { visibility: hidden; } </style> </head> <body> <div class="hidden-visibility">这个元素使用visibility:hidden隐藏</div> <div>这是另一个元素</div> </body> </html> ``` 在这个例子中,使用 `visibility: hidden` 的元素虽然不可见,但它原本的空间仍然被保留,后面的元素不会填充该位置 [^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码哥・Martin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值