解决IE6下position:fixed固定定位问题

很多时时候,我们需要让某个元素始终位于浏览器的某一个位置,不会因为浏览器窗口的缩放和滚动条的滚动而变化,那个第一个想到的肯定是用position:fixed生成固定定位,然后依靠其值定位,就能达到其需求。可是当其他浏览器都正常显示的时候,只有IE6不那么完美。一般百度的时候就会发现IE6下各种奇葩问题都有,固定定位也算是一大难题,下面介绍的是如何使用CSS Hack解决IE6浏览器下不支持position:fixed属性的办法。

  <div style="width:100%; height:5000px;">    
      <div class="fixedTop"></div>    
      <div class="fixedBottom"></div>    
      <div class="fixedLeft"></div>    
      <div class="fixedRight"></div>
  </div>
  .fixedTop,
  .fixedBottom,
  .fixedLeft,
  .fixedRight{ 
      width:100px; 
      height:100px; 
      background:#f00; 
      position:fixed;
  }
  .fixedTop{ 
      top:0; 
  }
  .fixedBottom{ 
      bottom:0; 
  }
  .fixedLeft{ 
      left:0; 
  }
  .fixedRight{
      right:0; 
  }
  • 以上为常用的固定定位的方式,用position:fixed生成固定定位,设置其div的top, bottom, left 以及right属性来进行位置的定位。

文章的开头也提头,IE6下面是不支持position:fixed的,那么为了让IE6也能够实现现样的效果,那么就只能通过position:absolute来模拟其效果

  .fixedTop,
  .fixedBottom,
  .fixedLeft,
  .fixedRight{ 
      width:100px; 
      height:100px; 
      background:#f00; 
      position:fixed; 
      _position:absolute;
  }
  /*固定到头部*/
  .fixedTop{ 
      top:0; 
      _top:expression(documentElement.scrollTop);
  } 
  /*固定到底部,'-30'可以修改其值*/
  .fixedBottom{ 
      bottom:0; 
      _top:expression(documentElement.scrollTop+documentElement.clientHeight-this.clientHeight-30);
  } 
  /*固定到左边*/
  .fixedLeft{ 
      left:0; 
      _left:expression(documentElement.scrollLeft);
  } 
  /*固定到右边*/
  .fixedRight{
      right:0; 
      _left:expression(documentElement.scrollLeft+documentElement.clientWidth-this.clientWidth);
  } 
  • 这样就能够实现IE6下固定定位的问题了,如果你想要其定位的位置,可以修改其中的数值控制元素的位置。

现在,问题还没有完全解决。在用了上面的办法后,你会发现:被固定定位的元素在滚动滚动条的时候会闪动。解决闪动问题的办法是在 CSS 文件中加入:

  /*----防止抖动---*/
  body{    
      _background-image:url(about:blank);  /* for IE6 */   
      _background-attachment:fixed;  /*必须*/
}

到此,IE6 的 position:fixed; 问题已经被解决了。

PS:如果有童鞋觉得这样子写不是很好的话,可以用JS来解决此问题。

  $(function(){    
      function reCal(){        
          var screenHelpwidth, 
              screenHelpheight, 
              myHelptop, 
              getPosHelpLeft, 
              getPosHelpTop;        
          screenHelpwidth = $(window).width();        
          screenHelpheight = $(window).height();        
          myHelptop = $(document).scrollTop();  //获取滚动条距顶部的偏移        
          //计算弹出层的left        
          getPosHelpLeft = screenHelpwidth / 2 - 320;        
          //计算弹出层的top        
          getPosHelpTop = screenHelpheight / 2 - 225;        
          //css定位弹出层        
          $("#boxcenter").css({"left": getPosHelpLeft, "top": getPosHelpTop + myHelptop});    
      }    
      reCal();    
      //当浏览器窗口大小改变时...    
      $(window).on('resize scroll',reCal);
  });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,790评论 1 92
  • <a name='html'>HTML</a> Doctype作用?标准模式与兼容模式各有什么区别? (1)、<...
    clark124阅读 3,540评论 1 19
  • CSS 定位 CSS有三种基本的定位机制:普通流,浮动,绝对定位(absolute, fixed):普通流是默认定...
    _空空阅读 5,785评论 0 15
  • 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能...
    卡卡西哥哥阅读 558评论 0 1
  • 上次为大家分析了林妹妹的资产组成和保存情况(点这里复习),今天咱们继续深扒这笔钱的最终去向。 林妹妹在贾府过得好不...
    马慢慢阅读 1,371评论 0 2