display:none和visibility:hidden的区别

display:none 和 visibility:hidden的区别

一、空间占据

  • dispaly:none 隐藏后的元素不占据任何空间
  • visibility:hidden 隐藏的元素空间依然存在

二、回流与重绘

  • display:none 隐藏产生重绘 ( repaint ) 和回流 ( relfow )
  • visibility:hidden 不会产生重绘和回流

三、株连性

  • 一旦父元素使用 display:none 父节点和子孙节点元素全都不可见
  • 父元素使用 visibility:hidden ,子孙节点元素可以设置 visibility:visible 是可见

补充

(1)回流:当 render 树的一部分因为元素的规模尺寸,布局,隐藏等改变而需要重新构建,叫做回流。

(2)重绘:当颜色、背景颜色等发生变化不会引起页面发生变化,只需要进行重新渲染的过程,叫做重绘。例如改变visibility、outline、背景色等属性。浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。重绘不会带来重新布局,并不一定伴随重排。
(3)什么会引起回流?

   1. 页面的渲染和初始化,每个页面至少有一次回流
   2. DOM的结构发生变化,比如添加、删除元素(回流+重绘)
   3. render 树变化,比如 padding的减少
   4. 窗口的 resize 事件
   5. 获取某些属性,eg:offsetTop,offsetLeft,width,height
   6. 隐藏元素,display:none(回流+重绘),visibility:hidden(只重绘,不回流)

(4)如何避免回流?

   1. 避免逐项更改样式
   2. 避免循环 DOM
   3. 避免多次读取 offsetLeft,offsetTop 等属性
   4. 将复杂的元素设置绝对定位或固定定位,使它脱硫文档流

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值