[转]fixed 定位在 IE6 下的实现技巧一则

原文来自 同事玉伯的blog:http://lifesinger.org/blog/2009/07/ie6-fixed-position/

从蓝色理想看到这贴:固定在右下角的离奇方法

受上面帖子的启发,也做了一个demo:ie6_fixed_position.html

代码:

  1. <div id="a" style="width: 300px; height: 100px; background: red">test</div> 
  2. <script> 
  3.     var ie6 = !window.XMLHttpRequest; 
  4.  
  5.     var a = document.getElementById('a'); 
  6.     a.style.position = ie6 ? 'absolute' : 'fixed'; 
  7.     a.style.right = 0
  8.     a.style.bottom = 0
  9.  
  10.     if (ie6) { 
  11.         window.onscroll = function() { 
  12.             a.className = a.className; 
  13.         }; 
  14.     } 
  15. </script> 

原理分析:

  1. position: absolute的元素,直接放在position:static的 body 中时,绝对定位的参考物是 body 的 viewport 部分。这使得元素 a 在窗口 resize 时,自动就能准确定位到右下角。注意:body 的 position 不能为 relative 等值,否则失效。
  2. onscroll 时需要特殊处理一下,使得滚动时,也让绝对定位元素 a 的参考物能更新为当前的 viewport. 上面的a.className = a.className就是这样一个 hack: 使得 a 的定位参考物动态更新为当前的 viewport. 类似的 hack 还有a.style.background = 'red'. 这些 hack 会引发 reflow, 但反之不一定,进一步的规律没找到,不过有一个 hack,也就够用了。

耐心总结,快乐分享,欢迎讨论。

1/1, 0«1»
1/1, 0«1»
您的昵称
不管您的姓名有多么龌龊,都请写下来吧
邮箱地址
能正常联系您的电子信箱地址
个人主页
如果有个人主页,就留下您的地址方便回访
评论内容