当前位置:首页> 正文
IE6不支持position:fixed bug的完美解决

复制代码代码如下:
!DOCTYPE html
html
head
meta http-equiv="Content-Type" content="text/html; charset=utf-8" /
titleIE6 position:fixed bug/title
style
*{padding:0;margin:0}
p{height:2000px}
#gs{border:1px solid #000;position:fixed;right:30px;top:120px}
/style
!--[if IE 6]
style type="text/css"
html{overflow:hidden}
body{height:100%;overflow:auto}
#gs{position:absolute}
/style
![endif]--
/head
body
div id="rightform"
p11111111111111111/p
input id="gs" name="gs" type="text" value="" /
/div
/body
/html
以上这段代码在网上很常见,通过设置html{overflow:hidden}和body{height:100%;overflow:auto}来实现ie6下position:fixed效果,但这种办法有个缺陷,那就是:这会使页面上原有的absolute、relation都变成fixed的效果,在这里我就不做demo了,如果有怀疑,可以自己去试验一下。
于是我找了下资料,发现可以通过一条Internet Explorer的CSS表达式(expression)来完美的实现ie6下position:fixed效果,css代码如下:
复制代码代码如下:
/* 除IE6浏览器的通用方法 */
.ie6fixedTL{position:fixed;left:0;top:0}
.ie6fixedBR{position:fixed;right:0;bottom:0}
/* IE6浏览器的特有方法 */
* html .ie6fixedTL{position:absolute;left:expression(eval(document.documentElement.scrollLeft));top:expression(eval(document.documentElement.scrollTop))}
* html .ie6fixedBR{position:absolute;left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||0));top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)))}
上面代码可以直接使用了,如果要设置元素悬浮边距,要分别为设置两次,比如我要让某个元素距顶部10个像素,距左部也是10个像素,那就要这样子写:
复制代码代码如下:
/* 除IE6浏览器的通用方法 */
.ie6fixedTL{position:fixed;left:10px;top:10px}
/* IE6浏览器的特有方法 */
* html .ie6fixedTL{position:absolute;left:expression(eval(document.documentElement.scrollLeft+10));top:expression(eval(document.documentElement.scrollTop+10))}
这样一来,IE6下实现position:fixed的效果解决了,而且也不会影响到其他的absolute、relation,但还有一个问题,就是悬浮的元素会出现振动
IE有一个多步的渲染进程。当你滚动或调整你的浏览器大小的时候,它将重置所有内容并重画页面,这个时候它就会重新处理css表达式。这会引起一个丑陋的振动bug,在此处固定位置的元素需要调整以跟上你的(页面的)滚动,于是就会跳动。
解决此问题的技巧就是使用background-attachment:fixed为body或html元素添加一个background-image。这就会强制页面在重画之前先处理CSS。因为是在重画之前处理CSS,它也就会同样在重画之前首先处理你的CSS表达式。这将让你实现完美的平滑的固定位置元素!
然后我发现background-image无需一张真实的图片,设置成about:blank就行了。
下面附上完整代码
复制代码代码如下:
/* 除IE6浏览器的通用方法 */
.ie6fixedTL{position:fixed;left:0;top:0}
.ie6fixedBR{position:fixed;right:0;bottom:0}
/* IE6浏览器的特有方法 */
/* 修正IE6振动bug */
* html,* html body{background-image:url(about:blank);background-attachment:fixed}
* html .ie6fixedTL{position:absolute;left:expression(eval(document.documentElement.scrollLeft));top:expression(eval(document.documentElement.scrollTop))}
* html .ie6fixedBR{position:absolute;left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||0));top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)))}
展开全文阅读
相关内容
fireworks调整图形上下层关系的操作步骤
fireworks调整图形上下层关系的操作步骤,图形,调整,下层,排列...
如何删除世界之窗浏览器收藏的网页
如何删除世界之窗浏览器收藏的网页,世界之窗,删除,网页浏览器...
文字版操作教程 如何清除浏览器缓存?
文字版操作教程 如何清除浏览器缓存?,清除,操作,点击,菜单,教...
电脑中ie浏览器出现运行时间错误的原因解法介绍
电脑中ie浏览器出现运行时间错误的原因解法介绍,运行时间,错...
IE浏览器优化方法大全
IE浏览器优化方法大全,浏览器,大全,图像,内存,浏览,优化,方法...
css中使用if条件在各大浏览器(IE6IE7IE8)中hack
css中使用if条件在各大浏览器(IE6IE7IE8)中hack方法解决教程...
IE浏览器不让修改首页的小技巧
IE浏览器不让修改首页的小技巧,修改,快捷方式,参数,小技巧,浏...
玩转浏览器IE7的5个顶级使用技巧
玩转浏览器IE7的5个顶级使用技巧,标签页,选择,点击,浏览器,打...
条件注释判断浏览器(ie系列)
条件注释判断浏览器(ie系列),浏览器,系列,条件,注释,识别,版...
XP SP2中修复IE浏览器新技巧
XP SP2中修复IE浏览器新技巧,注册,重新安装,安装,修复,浏览,...
JS实现设置ff与ie元素绝对位置的方法
JS实现设置ff与ie元素绝对位置的方法,元素,位置,方法,设置,窗...
IE浏览器专有css属性之zoom详解
IE浏览器专有css属性之zoom详解,属性,浏览器,对象,元素,浮动,...
让IE6支持HTML5元素的方法
让IE6支持HTML5元素的方法,方法,元素,支持,文件,网站,脚本,前...
打开IE浏览器IE窗口显示为一片空白的解决方法
打开IE浏览器IE窗口显示为一片空白的解决方法,解决方法,浏览...
解决ExtJS在chrome或火狐中正常显示在ie中不显
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼...