IE6不支持position:fixed与滚动不闪烁的解决方法

发布时间:2020-09-29编辑:脚本学堂
有时候,界面上需要一个固定位置的块,不论页面怎么滚动,始终停在它的位置,比如“返回顶部”、“给建议”、“分享按钮”、“广告”等等。css中position:fixed;可以直接用,很方便,但IE6却不支持,本文就讲述了两种解决的方法,需要的朋友参考一下。

怎么解决“振动”的问题?
当你滚动或调整你的浏览器大小的时候,它将重置所有内容并重画页面,这个时候它就会重新处理css表达式。这会引起一个丑陋“振动”bug,在此处固定位置的元素需要调整以跟上你的(页面的)滚动,于是就会“跳动”。解决此问题的技巧,就是使用background-attachment:fixed为body或html元素添加一个background-image。就会强制页面在重画之前先处理CSS。因为是在重画之前处理CSS,它就会在重画之前处理你的CSS表达式。这将实现完美的平滑的固定位置元素!
方法一:
 

复制代码 代码示例:
1.*html {/* 只有IE6支持 */
2.    background-image: url(about:blank); /* 使用空背景 */
3.    background-attachment: fixed; /* 固定背景 */
4.}
5.#box {
6.    /* 非IE6浏览器使用固定元素 */
7.    position: fixed;
8.    top: 0;
9.    left: 0;
10.    /* IE6改为绝对定位,并通过css表达式根据滚动位置更改top的值 */
11.    _position: absolute;
12.    _top: expression(eval(document.documentElement.scrollTop));
13.}

此方法要注意,*html使用固定位置空背景目的是解决滚动的时候抖动的问题,原理是这样,滚动页面浏览器重新计算出网页,然后执行css,所以固定元素产生延迟的抖
动,使用固定背景之后,在滚动的时候先执行了css,再重新计算网页,所以抖动问题解决了。
document.documentElement.scrollTop是滚动条偏移的值,可以根据这个来设置位置,比如document.documentElement.scrollTop+200或者使用margin定位也行。
方法二:纯css的解决方法
 

复制代码 代码示例:
1.html { _overflow: hidden;}
2.body { _height: 100%; _overflow: auto; }
3..box {
4.    position: fixed;
5.    left: 10px;
6.    top: 180px;
7.    _position: absolute;
8.}

 原理很简单,滚动条是body的滚动,固定元素是相对body定位,那么把它设置窗口那么高,就一直是在窗口那个位置了。