什么是DOM回流?

时间:2014-12-24 12:47:15

标签: html css dom visibility reflow

我正在阅读两个css属性display:nonevisibility:hidden之间的差异,并遇到 DOM reflow 术语。

陈述是

  

display: none导致DOM重排,visibility: hidden不在其中。

所以我的问题是:

什么是DOM重排及其工作原理?

3 个答案:

答案 0 :(得分:72)

  

reflow 计算页面的布局。元素上的重排会重新计算元素的维度和位置,并且还会触发该元素在DOM中出现的子元素,祖先和元素之后的进一步回流。然后它调用最后的重绘。回流非常昂贵,但遗憾的是它可以轻松触发。

     

当你:

时发生回流      
      
  • 插入,删除或更新DOM中的元素
  •   
  • 修改页面上的内容,例如输入框中的文字
  •   
  • 移动DOM元素
  •   
  • 为DOM元素设置动画
  •   
  • 测量一个元素,例如offsetHeight或getComputedStyle
  •   
  • 更改CSS样式
  •   
  • 更改元素的className
  •   
  • 添加或删除样式表
  •   
  • 调整窗口大小
  •   
  • 滚动
  •   

有关详细信息,请参阅此处:Repaints and Reflows: Manipulating the DOM responsibly

答案 1 :(得分:9)

  

Reflow是用于重新计算的Web浏览器进程的名称   出于此目的,文档中元素的位置和几何形状   重新呈现部分或全部文件。

https://developers.google.com/speed/articles/reflow

display:none隐藏div,好像div没有呈现,而visibility:hidden只隐藏,但空间仍然被占用

答案 2 :(得分:0)

这意味着,如果您将设置dinamically display: none;,您的浏览器将重新计算DOM元素的位置,如果可见性:隐藏; - 不是。想一想,因为visibility: hidden;不会改变dom中的元素大小。