|
1
2
这取决于你所说的“重新排序”。 在这里,您似乎只是在讨论重新计算文档中所有样式表应用的所有样式,这也称为“回流”或“布局”。
对DOM的任何更改都会将CSSOM标记为脏,在渲染之前,如果CSSOM是脏的,浏览器将执行这样的回流。
然而,这种回流可能不会花费太多,浏览器可能有足够的优化,以了解可能发生了什么变化,并只通过这些。此外,这些操作不包括重新绘制操作,这只会在下次屏幕刷新时发生。 但这并不是浏览器需要重新计算框布局的唯一时间,例如每次调整页面大小时,或者即使流内元素的大小作为动画的一部分发生变化时,也需要重新计算框布局。但在这里,不重新计算完整的样式表。 规范中并没有明确规定触发这些操作的原因,甚至没有规定应该在什么时候触发这些操作。HTML规范只要求浏览器执行 "rendering steps" of the event-loop ,它的结尾是一个非常不明确的“ 更新该文档的呈现或用户界面 “。ResizeObserver API将渲染步骤扩展到 include styles recalc and layout update 但他们并没有定义这些步骤。请注意,有一个 open issue 在HTML规范中对其进行了更清晰的定义,但目前我们甚至没有浏览器互操作性。 |
|
2
0
CSS3是一系列单独的规范,涵盖各个主题,但在 official definition of CSS . CSS2 definitions 将渲染内容定义为(重点)
我认为这意味着,当呈现文档或其一部分时,浏览器负责确保根据呈现的内容正确应用CSS规则,使用DOM内容和CSS规则指定呈现和浏览器的逻辑要求,确保生成符合逻辑模型的页面布局。
我的经验是,浏览器在使用JavaScript时会更新DOM
1.
代码在DOM中添加、移动或删除元素,以及在样式表内容或元素发生更改时添加、移动或删除元素
因此,除了措辞之外,关于你可以依赖什么的基本假设基本上是正确的
没有活动的“审阅”发生——只是修改某些属性可能会触发自动同步回流操作,以便调用脚本能够同步访问需要回流计算的DOM属性值。
关于这一点的MDN文章中有一个暗示 `Window.getCommputedStyle .总的来说,我不认为在任何地方特别提到它,因为它是DOM行为中固有的。只有当a)你需要同步使用更改的结果,b)好奇为什么它会像你希望的那样工作时,你才能了解它!:) 显示同步结果的示例:
更改DOM中的元素位置,
在CSSOM中更改CSS规则
1. Vanilla Javascript隐式地排除了影子DOM和组件的情况。提到 Kaido's answer 更广泛的治疗。 |
|
Ish Mahajan · WebTransport的浏览器兼容性 2 年前 |
|
|
Václav Procházka · 动态创建获取和解析脚本的顺序 2 年前 |
|
|
jani · 检查安装了哪些浏览器,然后在其桌面上创建快捷方式 2 年前 |
|
|
Italy Zia · 我收到一个“拒绝执行来自的脚本”http://localhost:3000/js/dashboard/dashboard.js',因为其MIME类型('text/plain')不可执行 2 年前 |
|
|
kakakali · 为什么appendChild()会丢失一些子项? 2 年前 |
|
|
StuartN · 使用默认搜索引擎的HTML搜索链接 2 年前 |
|
|
Vindicated · 如何访问当前未连接到的URL的本地存储? 3 年前 |