gpt4 book ai didi

javascript - 用绝对定位隐藏DIV导致回流

转载 作者:可可西里 更新时间:2023-11-01 13:10:58 26 4
gpt4 key购买 nike

我很好奇它在隐藏绝对定位元素时是否期望进行回流?

考虑下面的示例代码:

<html>
<head>
<style>
.float {
position: absolute;
background-color: #E0E0E0;
padding: 5;
left: 100px;
top: 100px;
}
</style>
<script>
function toggle() {
var float = document.getElementById("float");
var style = float.style;

if (style.display == "none") {
style.display = "block";
} else
style.display = "none";
}
</script>
</head>
<body>
<a href="#" onclick="toggle();">Click to toggle!</a>
<div id="float" class="float" style="display:none">Floating div</div>
</body>
</html>

当我在 Chrome 开发者工具中查看时间轴选项卡时,我看到以下内容:

Dev Chrome Tool Timeline

第 23 行对应于 style.display = "none";,我的期望是不需要回流。

我错了吗?还是我误解了时间轴结果?有更好的方法吗?

谢谢!

最佳答案

有回流。当你改变一个元素的显示时,浏览器需要进行布局操作。也许您混淆了布局过程的概念,以及影响整个文档的布局过程。在你的情况下,我认为布局只影响 .float 元素。您可以在布局栏中单击它。它会告诉您布局的范围。

与看起来相反,隐藏绝对定位元素会导致整个页面重排。例如,如果定位的元素比浏览器视口(viewport)高或宽,就会发生这种情况。在这种情况下,隐藏它可能会导致滚动条消失,结果导致整个文档重排。

每个浏览器都有自己的方法来确定是否需要整个文档重排,因此在一个浏览器中有效的方法可能在另一个浏览器中无效。你这里有一篇好文章:Introducing layout boundaries

编辑:正如@xotic750 所说,您可以避免回流设置可见性:隐藏。这会导致浏览器避免绘制,但对于布局引擎来说,它会在那里。这样显示/隐藏时就不会回流了。不足之处?每次由于其他原因进行重排时,您不可见的 div 的内容将成为布局过程的一部分。如果 div 的 DOM 树很简单,也许玩弄可见性会更好。但是如果 div 包含很多对象,特别是表格,我认为你应该使用 display: none。当然,它还取决于 div 应该显示或隐藏的时间。

关于javascript - 用绝对定位隐藏DIV导致回流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22130372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com