【问题标题】:jQuery/css fade issue with nested elements in ie8 (only) [duplicate]ie8中嵌套元素的jQuery / css淡入淡出问题(仅限)[重复]
【发布时间】:2012-04-29 07:01:28
【问题描述】:

可能重复:
Disappearing images in IE8 jQuery Cycle

我正在淡入和淡出一组嵌套元素,以显示页面的背景图像。 嵌套的 div/article 元素已被赋予 alpha 通道不透明度,并且在 IE 中被半透明 png 覆盖。

在 FF、Chrome、ie6(是的,ie6 !!!)、ie7 和 ie9 中淡入和淡出工作正常,但遗憾的是在 ie8 中不行。

HTML:

<div id="wrapper">
   <div id="limiter">
      <div id="mainContent" class="cornerRadius10 alpha40Black">
         <header class="cornerRadius6 alpha50Black">
            <h1>Title Here</h1>
         </header>
         <article class="contentArticle cornerRadius6 alpha50Black">
            Content here.
         </article>
         <article class="contentArticle cornerRadius6 alpha50Black">
            More content here.
         </article>
      </div>
   </div>
</div>

css:

.alpha40Black {
    /* Fallback for web browsers that doesn't support RGBa */ 
    background: rgb(0, 0, 0);
    background: url("../images/blk-40.png");
    /* RGBa with 0.4 opacity */ 
    background: rgba(0, 0, 0, 0.4)
}
.alpha50Black {
    /* Fallback for web browsers that doesn't support RGBa */ 
    background: rgb(0, 0, 0);
    background: url("../images/blk-50.png");
    /* RGBa with 0.5 opacity */ 
    background: rgba(0, 0, 0, 0.5)
}

jQuery:

 $('#wrapper').children().animate({
    opacity: 0
 }, 2000 );

 setTimeout(function() {
    $('#wrapper').css('visibility' , 'hidden');
 }, 2000);

我也试过这个 jQuery:

    $('#limiter').children().fadeOut( 2000 );

以上任何组合都适用于除 ie8 之外的所有浏览器。当您尝试将淡出或淡入功能应用于包装父元素时,所发生的只是有一个暂停(淡出动画设置的时间长度),然后您想要淡出的元素立即消失,没有淡化效果。

我已经为此工作了几天,并用尽了 Google 的解决方案和可能的修复/变通办法,甚至没有什么能接近。

有人有什么想法吗?

问候,马特。

编辑:

我在调试这个问题方面取得了一些进展。

我删除了对半透明背景的所有引用,并尝试应用 jQuery 淡入淡出动画来检查背景是否没有掩盖真正的问题。

有趣的是,即使没有应用半透明背景(也测试了完全不透明的背景),淡入淡出动画仍然不起作用。完全一样的症状。 所以我快速搜索并在 jQuery Bug Tracker 上找到了这个:fade not working on inner divs in ie8

根据此页面上的 cmets,我将 filter: inherit; 应用于子容器,这产生了影响。现在内容(文本和图像)淡入淡出,但背景(不透明或(半)透明)不是。它在延迟期间仍然保持不变,然后突然变为不可见。

有人对如何进一步解决此问题有任何想法吗?

编辑:

在 ie9 中测试,它工作得很好。此错误仅与 ie8 相关。

谢谢,马特。

【问题讨论】:

    标签: jquery png jquery-animate fade alpha-transparency


    【解决方案1】:

    在你的 CSS 上试试这个:

    .alpha40Black {
        /* Fallback for web browsers that doesn't support RGBa */ 
        background: rgb(0, 0, 0);
        background: url("../images/blk-40.png");
        /* RGBa with 0.5 opacity */ 
        background: rgba(0, 0, 0, 0.4);
        /* This works in IE 8 & 9 too */
        /* ... but also 5, 6, 7 */
        filter: alpha(opacity=40);
    }
    .alpha50Black {
        /* Fallback for web browsers that doesn't support RGBa */ 
        background: rgb(0, 0, 0);
        background: url("../images/blk-50.png");
        /* RGBa with 0.5 opacity */ 
        background: rgba(0, 0, 0, 0.5);
        /* This works in IE 8 & 9 too */
        /* ... but also 5, 6, 7 */
        filter: alpha(opacity=50);
    }
    

    如果您对其他浏览器没有其他问题,这应该可以工作...诅咒您必须相应地更新 jquery

    编辑:

    jQuery:
    $('#wrapper').children().animate({
        opacity: 0.4,
        filter: 'alpha(opacity=40)'
     }, 2000 );
    

    这是一个示例 jquery,它从不透明度到 0.4 进行动画处理。如果您希望在页面加载后具有标准不透明度,则不需要诅咒 jquery,但如果您需要在一个触发事件上更改元素不透明度,则必须使用这样的 jquery。

    编辑:

    如果您的问题是正确的,我会在 jsFiddle 中提出解决方案。我无法在旧版 ie 中测试它。我希望这有效:)

    【讨论】:

    • 当你说“你必须相应地更新jquery”时,我需要更新什么?
    • 我刚刚测试了这个,有两个问题:1.问题仍然存在; jQuery淡入淡出不起作用,它只是在延迟后突然捕捉到不可见而没有淡入淡出。 2. 将过滤器应用于 css 以相同的不透明度呈现所有内容(文本和图形)。我知道所有形式的 IE 都是垃圾,但有什么想法吗?
    • 嗨,我刚刚测试了你的 jsFiddle 解决方案,它在 IE8 中测试时的行为与我的相同。在延迟时间内暂停而不会淡出,然后立即消失。对不起。
    【解决方案2】:

    我不确定这是否是您的问题,但我认为您设置的背景错误:

    .alpha40Black {
        /* Fallback for web browsers that doesn't support RGBa */ 
        background: rgb(0, 0, 0);
        background: url("../images/blk-40.png");
        /* RGBa with 0.4 opacity */ 
        background: rgba(0, 0, 0, 0.4)
    }
    

    background 是一个快捷方式属性,用于同时设置多个值。如果你在做的时候遗漏了子值,那么它会重置其他值。您应该改用单独的背景属性:

    .alpha40Black {
        /* Fallback for web browsers that doesn't support RGBa */ 
        background-color: rgb(0, 0, 0);
        background-image: url("../images/blk-40.png");
        /* RGBa with 0.4 opacity */ 
        background-color: rgba(0, 0, 0, 0.4)
    }
    

    【讨论】:

    • 是的,你是对的,但根据我的阅读,这是设计使然。通过按此顺序设置背景,您首先为最不兼容的浏览器提供最基本(也是最不受欢迎)的设置,然后按优先顺序列出设置,将最优先的设置留到最后。如果浏览器不支持设置(据我了解),它将忽略它,因此仅应用它能够呈现的最优选设置。如果我错了,请有人纠正我。谢谢。
    • 我用你的方法想象的问题可能是支持 png 和 rgba 背景的浏览器会同时呈现两者。我没有对此进行测试,所以如果我错了,请随时纠正我。谢谢。
    • 我刚刚测试了这个理论,它确实在 png 背景和 FF 中的 RGBa 背景中呈现。
    猜你喜欢
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 2011-07-14
    • 2012-07-25
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多