04月01, 2012

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

先看一个例子

<div class="fadein">
    <div>
        <div>I am going to fade in ;</div>
        <div>I am going to fade in ;</div>
    </div>
</div>
$('.fadein').hide().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>
<script>
$('.fadein').hide().fadeIn();
</script>

这个时候在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; 会解决IE6 E77下的这个bug 注也可以写到CSS里

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

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

本文链接:https://75team.com/post/ie6-ie7-ie8-在-position-relative-时的-fadein-fadeout-bug-解决方案.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。