访问布局信息是否也会导致浏览器重排

Can accessing layout information also cause browser reflows?

本文关键字:浏览器 布局 信息 是否 访问      更新时间:2023-09-26

我知道设置样式属性会导致浏览器重排。访问布局属性时是否也可能发生浏览器重排。如果是,您能否举一个具体的例子,为什么会导致浏览器回流?

当然,这取决于实现,但通常,如果浏览器认为需要重新查询布局数据(即此元素上的某些与布局相关的属性或任何父元素已更改(,则浏览器会在读取元素的属性时触发重排。

您可以在此处找到 WebKit 受影响的属性列表:如何(不(在 WebKit 中触发布局。带有示例的更一般的文章:渲染:重绘、重排/重新布局、重新样式

获取属性可能会(见下文(,但更改属性会。设置与属性相关的样式,例如ele.width。位置属性(如 iframe 或 img 标记的src(将。

另请注意,附加事件侦听器(on*=...addEventListener(*,...)等(会导致重排。这是由于事件捕获从最外层的父元素到 src 元素的方式,并通过父元素链从 src 元素冒泡出来。

此外,现代浏览器(例如 chrome(会延迟更新 GUI,除非查看指定的页面。当页面再次变为活动状态时,这会导致重排,因为浏览器确保它正确显示页面。这种延迟/队列可以使获取属性看起来好像它们导致了重排,而实际上,浏览器确保它正确显示

如果您不更改 CSS 属性,而只是访问它,则不需要,不需要重新呈现页面。

我知道

这已经很晚了,如果你阅读其他人已经发布的链接,它就会以一种你可以找到的方式回答,但它值得在这里明确说明:

浏览器的任务是为您提供当前值,因此作为一般规则,它将重排和重新绘制,以确保您拥有的是现在的值。 我发现这样想会有所帮助 - 任何时候您要求页面上任何元素的位置或大小时,您都可以假设您将导致重排/重绘。不,它不是 100% 总是正确的,但它足够接近 100%,你应该假设如果你要求顶部、左侧、底部、右侧、高度、宽度或任何影响这些测量值的东西(如比例、旋转等(,你会导致 R/R。这是我能给你的具体答案。

同样,这并非在任何时候都是100%正确的,但我发现如果你这样想,它会在98%的情况下有所帮助,并且不会像对98%的人那样伤害另外2%。