首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么getComputedStyle在元素创建后立即返回像素值的“auto”?

为什么getComputedStyle在元素创建后立即返回像素值的“auto”?
EN

Stack Overflow用户
提问于 2011-12-25 03:05:49
回答 2查看 8.1K关注 0票数 17

我使用胡子生成一些HTML,并使用insertAdjacentHTML将其放在页面上。显然,它转换成了DOM结构,好吧,因为之后我可以通过使用document.querySelector('.contentarea')调用获得它的句柄。然而,如果我试图获得一个像素值的宽度或高度,它继续抛回'auto'

考虑到这可能只是getComputedStyle的一个问题,我尝试使用.getBoundingClientRect.offsetWidth。两人都返回了0。如果我将调用放置在setTimeout(function(){}, 1)中稍微延迟了调用,那么它就能工作,但这对我的生产代码来说并不实用,因为它需要进入同步构造函数。

这种情况发生在火狐(Aurora)和Chrome上。我记得我读过一篇关于Mozilla如何通过使用懒散的框架构造来提高DOM操作性能的文章,我认为可能会有一个bug,因为框架有点懒,但是由于它也发生在Chrome中,这似乎不太可能发生。

有没有人对这里发生的事情或如何解决这个问题有任何想法?在插入HTML后,我确实需要像素的高度/宽度信息。

PS:有浏览器在一个单独的线程中进行HTML到DOM解析/构建吗?我在想,这也可能导致这种行为。

:这是我自己的错。我只是没有注意到在代码试图获取度量之前设置的样式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-21 20:16:46

有几件事会导致“自动”的结果。你找到了其中一个,display: none。如果元素是内联的,它也将返回auto。

本质上,它必须是一个blockinline-block元素,并且必须被呈现。

票数 23
EN

Stack Overflow用户

发布于 2011-12-25 03:18:45

根据我的经验,许多浏览器(IE、Chrome、Firefox)故意推迟计算布局,直到Javascript线程结束或通过超时调用产生结果。

我知道的唯一解决方案是向浏览器屈服,然后重新启动。您使用setTimeout的方法效果很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8628005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档