IE6 reflow bug
最近遇到的一个 bug,在利用 relative/absolute 定位方式布局的页面里面,经常会出一些类似问题。大概描述一下:一个 relatively positioned 容器 A ,里面放有一个 absolutely positioned 容器 B。如果在页面渲染结束之后 A 由于因为某种原因尺寸发生了改变(这种改变是一种被动的改变,例如由于内部内容的增加减少引起的撑大或者缩小等),这种改变可能是由 JavaSciprt 或者 :hover 等造成,那么 B 元素有些时候(不是全部)在某些版本的 IE 中不会根据 A 元素新的尺寸来重新计算位置。
IE5 似乎没有这个问题,IE6 有,我的 IE7 还是 beta2,版本号是 7.0.5346.5,也没有这个问题,一个朋友用的 beta3 版本号是 7.0.5450.4 居然说也有问题,我没有测试,用这个版本 IE 的朋友可以帮忙看看。最后还算不错,折腾出一个解决方式,用一段 JavaScript 脚本让 IE reflow:
function reflow(){
var b = document.body;
b.style.zoom = b.style.zoom=="1"?"100%":"1";
}
原理就是对 zoom 重新赋值让 body reflow,当然 reflow 的方法应该很多,只要让 IE 可以重新计算就成。这里使用 zoom 的方式是因为它不会有什么视觉上的改变,唯一的变化就是添加了 layout, 但 body 默认是有 layout 的,所以 zoom 的使用应该没有什么大的负作用。
可能光看文字看不大清楚,我这里简单做了一个例子(请用 IE6 查看)来形象一点说明这个 bug,其中第一种情况是由于 JavaScript 引起的改变,第二种情况是由于 :hover 引起的改变,两种情况最后都是用的 js 脚本解决的问题。个人感觉这种方法比较 ugly,不过 google 没找到什么相关的东西(可能我不会找),只好先凑合用了,不知谁有更好的解决方法。



good boy, good job.
Comment by Realazy — 2006.7.26 @ 13:40
good 9
Comment by PorkFat — 2006.7.29 @ 09:53