站长资源网页制作

IE6不支持position:fixed bug的完美解决

整理:jimmy2024/10/8浏览2
简介废话不多说,先看一下下面这段代码: 复制代码代码如下: IE6 position:fi</div> <div class="news_infos"><div id="MyContent">废话不多说,先看一下下面这段代码: <br><br><u>复制代码</u>代码如下: <br><!DOCTYPE html> <br><html> <br><head> <br><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <br><title>IE6 position:fixed bug</title> <br><style> <br>*{padding:0;margin:0} <br>p{height:2000px} <br>#gs{border:1px solid #000;position:fixed;right:30px;top:120px} <br></style> <br><!--[if IE 6]> <br><style type="text/css"> <br>html{overflow:hidden} <br>body{height:100%;overflow:auto} <br>#gs{position:absolute} <br></style> <br><![endif]--> <br></head> <br><body> <br><div id="rightform"> <br><p>11111111111111111</p> <br><input id="gs" name="gs" type="text" value="" /> <br></div> <br></body> <br></html> <br><br>以上这段代码在网上很常见,通过设置html{overflow:hidden}和body{height:100%;overflow:auto}来实现ie6下position:fixed效果,但这种办法有个缺陷,那就是:这会使页面上原有的absolute、relation都变成fixed的效果,在这里我就不做demo了,如果有怀疑,可以自己去试验一下。 <br>  于是我找了下资料,发现可以通过一条Internet Explorer的CSS表达式(expression)来完美的实现ie6下position:fixed效果,css代码如下: <br><br><u>复制代码</u>代码如下: <br>/* 除IE6浏览器的通用方法 */ <br>.ie6fixedTL{position:fixed;left:0;top:0} <br>.ie6fixedBR{position:fixed;right:0;bottom:0} <br>/* IE6浏览器的特有方法 */ <br>* html .ie6fixedTL{position:absolute;left:expression(eval(document.documentElement.scrollLeft));top:expression(eval(document.documentElement.scrollTop))} <br>* 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)))} <br><br>上面代码可以直接使用了,如果要设置元素悬浮边距,要分别为设置两次,比如我要让某个元素距顶部10个像素,距左部也是10个像素,那就要这样子写: <br><br><u>复制代码</u>代码如下: <br>/* 除IE6浏览器的通用方法 */ <br>.ie6fixedTL{position:fixed;left:10px;top:10px} <br>/* IE6浏览器的特有方法 */ <br>* html .ie6fixedTL{position:absolute;left:expression(eval(document.documentElement.scrollLeft+10));top:expression(eval(document.documentElement.scrollTop+10))} <br><br>这样一来,IE6下实现position:fixed的效果解决了,而且也不会影响到其他的absolute、relation,但还有一个问题,就是悬浮的元素会出现振动 <br>IE有一个多步的渲染进程。当你滚动或调整你的浏览器大小的时候,它将重置所有内容并重画页面,这个时候它就会重新处理css表达式。这会引起一个丑陋的“振动”bug,在此处固定位置的元素需要调整以跟上你的(页面的)滚动,于是就会“跳动”。 <br>解决此问题的技巧就是使用background-attachment:fixed为body或html元素添加一个background-image。这就会强制页面在重画之前先处理CSS。因为是在重画之前处理CSS,它也就会同样在重画之前首先处理你的CSS表达式。这将让你实现完美的平滑的固定位置元素! <br>  然后我发现background-image无需一张真实的图片,设置成about:blank就行了。 <br>  下面附上完整代码 <br><br><u>复制代码</u>代码如下: <br>/* 除IE6浏览器的通用方法 */ <br>.ie6fixedTL{position:fixed;left:0;top:0} <br>.ie6fixedBR{position:fixed;right:0;bottom:0} <br>/* IE6浏览器的特有方法 */ <br>/* 修正IE6振动bug */ <br>* html,* html body{background-image:url(about:blank);background-attachment:fixed} <br>* html .ie6fixedTL{position:absolute;left:expression(eval(document.documentElement.scrollLeft));top:expression(eval(document.documentElement.scrollTop))} <br>* 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)))} <br></div> </div> </div> <div class="share"> </div> <div class="nextinfo"> <p>上一篇:<a href="http://m.paidiu.com/show/1/73965.html" title="css中border:none;与border:0;的区别说明">css中border:none;与border:0;的区别说明</a></p> <p>下一篇:<a href="http://m.paidiu.com/show/1/73967.html" title="利用CSS3的transform做的动态时钟效果">利用CSS3的transform做的动态时钟效果</a></p> </div> <div class="otherlink"> <h2>最新资源</h2> <ul> <li><a href="/show/1/615907.html" title="VH《五常法则》[FLAC/分轨][436.23MB]">VH《五常法则》[FLAC/分轨][436.23MB]</a></li> <li><a href="/show/1/615906.html" title="《宝丽金珍藏版10周年 靓音发烧碟》[WAV+">《宝丽金珍藏版10周年 靓音发烧碟》[WAV+</a></li> <li><a href="/show/1/615905.html" title="《邓紫棋  爱的距离 2CD》[WAV/分轨][1.1">《邓紫棋  爱的距离 2CD》[WAV/分轨][1.1</a></li> <li><a href="/show/1/615904.html" title="《林子祥 最爱40周年》[FLAC/分轨][1.7GB">《林子祥 最爱40周年》[FLAC/分轨][1.7GB</a></li> <li><a href="/show/1/615903.html" title="Beyond《Beyond 精选专辑》[FLAC/分轨][2">Beyond《Beyond 精选专辑》[FLAC/分轨][2</a></li> <li><a href="/show/1/615902.html" title="许巍《许巍精选专辑》[FLAC/分轨][1.9GB]">许巍《许巍精选专辑》[FLAC/分轨][1.9GB]</a></li> <li><a href="/show/1/615901.html" title="群星.2024-繁花电视剧原声带3CD【环球】【">群星.2024-繁花电视剧原声带3CD【环球】【</a></li> <li><a href="/show/1/615900.html" title="江希文.1994-伝说少女(饿狼伝说动画原声大">江希文.1994-伝说少女(饿狼伝说动画原声大</a></li> <li><a href="/show/1/615899.html" title="洪荣宏.2010-上爱的人【华特】【WAV+CUE】">洪荣宏.2010-上爱的人【华特】【WAV+CUE】</a></li> <li><a href="/show/1/615898.html" title="《大牌国语情歌 经典再现 深情对唱 2CD》">《大牌国语情歌 经典再现 深情对唱 2CD》</a></li> </ul> </div> </div> <div class="sidebar"> <div class="cloud"><h2 class="hometitle">一句话新闻</h2><a href="/show/1/603732.html"><ul>一文看懂荣耀MagicBook Pro 16<br><br>荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.<br>人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。<br>众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?</ul></a></div> </div> </article> <footer> <p style="font-size: 14px;">友情链接:<a href="http://www.imxmx.com/" title="杰晶网络" target="_blank">杰晶网络</a> <a href="http://www.ddrfans.com/" title="DDR爱好者之家" target="_blank">DDR爱好者之家</a> <a href="http://www.nqxw.com/" title="南强小屋" target="_blank">南强小屋</a> <a href="/" title="黑松山资源网" target="_blank">黑松山资源网</a> <a href="http://www.dyhadc.com/" title="白云城资源网" target="_blank">白云城资源网</a> <a href="/sitemap.xml">SiteMap</a></p> <p>Design by <a href="http://m.paidiu.com">黑松山资源网</a> <a href="/">http://m.paidiu.com</a></p> </footer> <script src="/images/nav.js"></script> <script type="text/javascript"> jQuery.noConflict(); jQuery(function() { var elm = jQuery('#left_flow2'); var startPos = jQuery(elm).offset().top; jQuery.event.add(window, "scroll", function() { var p = jQuery(window).scrollTop(); jQuery(elm).css('position', ((p) > startPos) ? 'fixed' : ''); jQuery(elm).css('top', ((p) > startPos) ? '0' : ''); }); }); </script> </body> </html>