为什么getComputedStyle返回'auto'用于元素创建后的像素值
Why does getComputedStyle return 'auto' for pixels values right after element creation?
我使用Mustache生成一些HTML,并使用insertAdjacentHTML
将其放置在页面上。它显然转换为DOM结构,因为我可以通过使用document.querySelector('.contentarea')
调用之后得到它的句柄。但是,如果我试图获得宽度或高度的像素值,它会不断抛出'auto'
。
认为这可能只是一个问题与getComputedStyle
,我尝试使用.getBoundingClientRect
和.offsetWidth
代替。两者都返回0
。如果我将调用放在setTimeout(function(){}, 1)
中稍微延迟一下,它就可以工作,但这对于我的生产代码来说是不实际的,因为它需要进入同步构造函数中。
这在Firefox (Aurora)和Chrome中都发生了。我记得读过一篇关于Mozilla如何通过使用延迟框架结构来提高DOM操作性能的文章,并认为可能会有一个框架有点太延迟的错误,但由于它也发生在Chrome中,这似乎不太可能。
有没有人对这里发生了什么或者如何解决它有任何想法?我真的需要在插入HTML后立即获得像素高度/宽度信息。
PS:任何浏览器做HTML到DOM解析/构建在一个单独的线程?我在想这可能也会导致这种行为。
没关系:这是我自己的错。我只是没有注意到在代码试图获得测量之前设置的display: none;
样式。
有几个因素会导致"auto"的结果。你找到了其中一个;display: none
。如果元素是内联的,它也会返回auto.
本质上它必须是block
或inline-block
元素,并且必须呈现
根据我的经验,许多浏览器(IE, Chrome, Firefox)故意延迟计算布局,直到Javascript线程结束或通过超时调用产生。
我知道的唯一解决方案是屈服于浏览器,然后重新启动。您使用setTimeout
的方法效果很好。
- 如何通过溢出来判断元素被切断了多少像素:隐藏在父级上
- 点击facebook像素跟踪注册(JS/JQUERY代码)
- 点击(右键点击)使用传单地图库获取图像覆盖的像素坐标
- Markdown模式代码镜像正在创建
- 如何使线条的边缘像素保持半透明
- 画布:逐像素绘制图像并请求动画帧计时
- 如何's css标记"-webkit最小设备像素比”;在Javascript中实现
- javascript mootools平滑滚动'x'像素数量
- 逐像素碰撞检测弹球
- 获取图像的平均外部像素颜色
- 如何根据分辨率添加像素
- 仅当窗口宽度>940像素,无论是通过页面加载还是调整大小
- 使用画布在秒内逐像素显示图片
- JS/CSS:如何在向下滚动超过1200像素(高度)后更改z索引值
- 获取以屏幕像素为单位的旋转SVG元素的边界
- 如何将像素添加到元素的当前位置
- GridStack项的高度和宽度(以像素为单位)
- 如何随着变量的增加逐个像素地重新创建预制png
- Javascript - 如何使用基于站点像素颜色的画布创建图像
- 为什么getComputedStyle返回'auto'用于元素创建后的像素值