IE6 IE7 IE8 在 position : relative 时fadeIn() fadeOut() bug 解决方案

Posted by bower on April 01, 2012
cross browser, javascript

分享给你的朋友->bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

先看一个例子

<div class="fadein">
    <div>
        <div>I am going to fade in ;</div>
        <div>I am going to fade in ;</div>
    </div>
</div>
$('.fadein').fadeIn();

以上代码基本上在所有主流浏览器都可以达到预期效果

但是现实是残酷的, 大家的html结构当然不会这么简单。

我们再加一点东东

<style>
.relative{position: relative;}
</style>
<div class="fadein">
    <div class="relative">
        <div>I am going to fade in ;</div>
        <div>I am going to fade in ;</div>
    </div>
</div>
$('.fadein').fadeIn();

这个时候在IE 6 78 就会吭爹的事情出现, 动画不出现有木有!  直接show出来有木有!

这是臭名昭著的 IE 大bug: 如果fadeIn的元素的子元素有position属性时 以relative值为最严重 有position属性的元素不会出现fadeIn的效果!

可能的曲线解决方法:

1, 不用position: relative;  这个嘛 有时候可以做到

2,如果1实在做不到, 比如笔者遇到的情况,那就用each()。 你可以一个一个做这个效果, 这个当然是可以做到的, 不过效率太差, 搞不好会挂掉用户的电脑,比如笔者遇到的情况,有几十个上百个子元素 这个方法是万万使不得滴。。

针对性解决办法

我们要在使用position:relative 而且不使用each()的情况下达到这个效果,可以吗?

可以!

既然这是一个bug 那一定就有hack的方法

$('.fadein').css('position', 'relative').fadeIn();

在fadeIn()之前动态的将其position属性改为relative; 会解决IE7下的这个bug

<style>
.relative{position: relative; filter: inherit}
</style>

在你子元素有position属性的元素加 filter: inherit; 当前元素的第一层子元素也要加。
这两条一结合 IE678 的问题就都解决了

分享到:人人网开心网腾讯微博新浪微博豆瓣分享腾讯空间百度搜藏腾讯书签

分享给你的朋友->bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark

1 Comment to IE6 IE7 IE8 在 position : relative 时fadeIn() fadeOut() bug 解决方案

  • 钉子 says:

    ie里面relative元素总是很诡异。比如JS让其显示出来的时候找不到自己的位置。不过大多数可以通过给他合适的父级(爷爷级…)同样设置relative属性来解决。

    这个里面给.fadein设置下可以好。

Leave a Reply

Your email address will not be published. Required fields are marked *

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word