我正在阅读两个css属性display:none
和visibility:hidden
之间的差异,并遇到 DOM reflow 术语。
陈述是
display: none
导致DOM重排,visibility: hidden
不在其中。
所以我的问题是:
答案 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中的元素大小。