`
yl.fighter
  • 浏览: 257307 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转载]修正IE6不支持position:fixed的bug

    博客分类:
  • Web
阅读更多
众所周知IE6不支持position:fixed,这个bug与IE6的双倍margin和不支持PNG透明等bug一样臭名昭著。前些天我做自己的博客模板的时候,遇到了这个问题。当时就简单的无视了IE6——尽管有几个使用IE6的朋友,一起BS我……但是对于大项目或商业网站,如果有用到这个属性的时候,是不可能直接无视的。
你是如何让position:fixed在IE6中工作的?
本文所使用的技巧是用了一条Internet Explorer的CSS表达式(expression)。你不可以直接使用该表达式,因为它可能会因为缓存而不更新。解决这一点的最简单的方式是使用eval包裹你的语句。
如何解决“振动”的问题?
显然IE有一个多步的渲染进程。当你滚动或调整你的浏览器大小的时候,它将重置所有内容并重画页面,这个时候它就会重新处理css表达式。这会引起一个丑陋的“振动”bug,在此处固定位置的元素需要调整以跟上你的(页面的)滚动,于是就会“跳动”。
解决此问题的技巧就是使用background-attachment:fixed为body或html元素添加一个background-image。这就会强制页面在重画之前先处理CSS。因为是在重画之前处理CSS,它也就会同样在重画之前首先处理你的CSS表达式。这将让你实现完美的平滑的固定位置元素!
这个方案并不是我提供的。我是在网上的某个地方读到这些的。如果你知道是谁原创了这个方法,请告诉前端观察。
我发现的另外一个小技巧是,你根本无需一个真实的图片!你可以使用一个about:blank替代一个spacer.gif图片,而且它工作的同样出色。
/*让position:fixed在IE6下可用! */
 
.fixed-top /* 头部固定 */{position:fixed;bottom:auto;top:0px;}
.fixed-bottom /* 底部固定 */{position:fixed;bottom:0px;top:auto;}
.fixed-left /* 左侧固定 */{position:fixed;right:auto;left:0px;}
.fixed-right /* 右侧固定 */{position:fixed;right:0px;left:auto;}
/* 上面的是除了IE6的主流浏览器通用的方法 */
* html,* html body /* 修正IE6振动bug */{background-image:url(about:blank);background-attachment:fixed;}
* html .fixed-top /* IE6 头部固定 */{position:absolute;bottom:auto;top:expression(eval(document.documentElement.scrollTop));}
* html .fixed-right /* IE6 右侧固定 */ {position:absolute;right:auto;left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||0));}
* html .fixed-bottom /* IE6 底部固定  */{position:absolute;bottom:auto;top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)));}
* html .fixed-left /* IE6 左侧固定 */{position:absolute;right:auto;left:expression(eval(document.documentElement.scrollLeft));}

更新: 添加border、padding 和margin 支持!
Note: 如果你不需要支持margin,可以将所有的`parseInt`部分去掉。
Note: 我只在标准模式下进行了测试。
分享到:
评论

相关推荐

    IE6实现position:fixed bug (固定窗口方法)的实例

    这个内容是老生常谈了,主要问题就是IE6不支持 position:fixed 引起的BUG.当我们去搜索解决这个bug的垮浏览器解决办法时,绝大多数结果都是说使用 position:absolute 来替代解决,可是我们真的解决了么?没有,因为当页面...

    IE6下的纯CSS完美position:fixed实现

    在互联网早期,Internet Explorer 6 (IE6) 是一个广泛使用的浏览器,但它的CSS支持并不完善,特别是对于`position: fixed`属性。`position: fixed`在现代浏览器中用于创建固定定位元素,使得元素相对于视口...

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

    本文将详细介绍如何解决 IE6 不支持 `position:fixed` 的问题,并提供一种完美的解决方案。 首先,让我们分析一下 IE6 中的 `position:fixed` bug。在标准浏览器中,设置 `position:fixed` 可以使元素相对于浏览器...

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

    总的来说,解决IE6不支持`position:fixed`的bug需要开发者具备深厚的前端知识,包括CSS兼容性、CSS Hack以及对JavaScript表达式的理解。同时,也需要权衡性能与兼容性的关系,适时地做出技术决策,以适应不断变化的...

    position:fixed在ie6的使用

    然而,IE6并不完全支持`position:fixed`。在IE6中,元素可能会被错误地相对于其父元素定位,而不是相对于视口。为了解决这个问题,开发者通常会采用一些特殊的CSS hack技术。这些hack包括但不限于: 1. **...

    position:fixed;实现底层页面不跟随浮层模块滚动

    position:fixed;实现底层页面不跟随浮层模块滚动

    IE6支持position:fixed完美解决方法

    总结来说,解决IE6不支持`position:fixed`的问题可以通过创建条件注释和使用CSS表达式来实现。虽然这种方法比JavaScript事件监听更节省资源,但在现代Web开发中,考虑到浏览器兼容性和性能优化,通常会避免使用CSS...

    position_fixed

    描述中提到的"完美兼容IE6"是一个挑战,因为IE6对CSS标准的支持并不完全,尤其是对于`position: fixed;`的处理存在一些问题。在其他现代浏览器中,`position: fixed;`工作得相当好,但在IE6中,需要采用一些特殊的...

    IE6 position:fixed bug (固定窗口方法)

    标题中的“IE6 position:fixed bug (固定窗口方法)”指的是在Internet Explorer 6浏览器中,使用CSS的`position:fixed`属性时出现的一个兼容性问题。`position:fixed`通常用于创建固定定位的元素,使其在页面滚动时...

    解决ie6的定位问题 position fiexed

    ### 解决IE6中的定位问题:Position Fixed 在早期的Web开发中,Internet Explorer 6(简称IE6)因其浏览器兼容性问题而臭名昭著。其中一个常见的问题是`position: fixed;`属性在IE6中不起作用。这使得开发者很难...

    仿Lightbox效果(Windows关机效果),div覆盖,锁定页面及IE 6实现position:fixed;

    由于IE6不完全支持CSS的`position: fixed`,开发者通常需要使用JavaScript库如jQuery或特定的CSS hack来模拟固定定位的效果,以确保在旧版浏览器中也能正常显示。 在这个压缩包中包含的"lightbox测试.html"文件可能...

    css中position:fixed实现div居中上下左右居中

    需要注意的是,由于旧版本的Internet Explorer(如IE6)不支持CSS3的一些新属性,可能会需要一些额外的hack来确保兼容性。在这个例子中,使用了`_position: absolute;`作为对IE6的兼容处理。 此技术非常适用于创建...

    详解iOS中position:fixed吸底时的滑动出现抖动的解决方案

    在这种方法中,需要将 header 和 footer 设置为 position:fixed,并设置中间滑动部分的 padding-top 和 padding-bottom,以便在上下方向超出一屏的部分变成滚动模式并不溢出。 第二种解决方案是使用 transform: ...

    跨浏览器的实践:position:fixed 层的固定定位

    通过设置 `overflow:hidden`,可以防止 IE6 中滚动条出现在整个页面上,这通常是由于 `position: fixed` 不支持导致的。然后,`* html div#content` 选择器将高度设为 100%,并启用内部滚动,以解决因 `body` 隐藏...

    javascript ie6兼容position:fixed实现思路

    然而,不幸的是,Internet Explorer 6 (IE6) 并不支持 `position:fixed`,这就给开发者带来了兼容性问题。 为了解决IE6中的这个问题,通常需要借助JavaScript来模拟 `position:fixed` 的效果。以下是一个实现兼容性...

    IE6不兼容position:fixed属性的解决办法分享

    但是,它不支持IE6及以下版本。于是很多同学使用JS模拟。今天写了一个DEMO,涉及左侧、右侧。及上下两边,共四种位置的固定,与以往的教程不同的地方是,它使用CSS表达式来兼容IE5、IE6,且避免了js模拟时,拖动滚动...

    微信小程序----position:sticky

    在微信小程序开发中,`position:sticky` 是一个非常实用的CSS样式,它结合了`position:relative`和`position:fixed`的特点,用于创建元素的粘性定位。这个特性允许元素在滚动到特定位置时固定在屏幕的某个位置,从而...

Global site tag (gtag.js) - Google Analytics