【问题标题】:Can I animate the opacity of a CSS background-image?我可以为 CSS 背景图像的不透明度设置动画吗?
【发布时间】:2011-05-23 05:48:34
【问题描述】:

CSS/Javascript 不是我的强项,所以我想问一下是否可以将背景图像不透明度更改为 0.5。

我有一个带有

的 div
background-image: url(images/nacho312.png);
background-position: -50px 0px;
background-repeat: no-repeat no-repeat;

但是当我加载某个视图时,它看起来不太好,所以我希望在显示该视图时具有“半溶解”效果。有可能吗?

谢谢

【问题讨论】:

    标签: javascript css animation opacity


    【解决方案1】:
    background-image: url(images/nacho312.png);
    background-position: -50px 0px;
    background-repeat: no-repeat no-repeat;
    
    opacity:0.5; //for firefox and chrome
    filter:alpha(opacity=50); //for IE
    

    【讨论】:

    • 那里没有动画(见 OP 的标题)。
    【解决方案2】:

    如果您想流畅地制作动画并且不需要做太多额外的工作 - 这对于 jQuery(或其他类似的库)来说是一个很好的任务。

    使用 jQuery you could do:

    $('#id_of_div').fadeTo('fast', 0.5);
    

    在相关 DIV 上获得快速动画淡入淡出效果。

    更新:如果你想真正淡化背景图像,而不是 DIV 的任何前景内容,这要困难得多。我建议使用一个带有 position:relative 的容器 DIV 和两个带有 position:absolute 的内部 DIV; .第一个内部 DIV 可以具有背景图像和比第二个 DIV 更低的 z-index,第二个 DIV 将包含任何文本等以显示在前景中。需要时,您可以调用$('#id_of_first_div').fadeTo('fast', 0.5); 仅淡化包含背景图像的DIV。

    顺便说一句,你的问题的字面答案是“不,你不能为 CSS 背景图像的不透明度设置动画”——你只能(当前)为 DOM 元素的不透明度设置动画,而不是它的属性,因此需要对于上述黑客。

    其他更新:如果你想避免使用任何第三方库,你可以使用Alex's answer中的方法处理背景DIV的淡入淡出。

    【讨论】:

    • 该问题未标记[jquery]。
    • 这正是我要说的,我被包含的 div 也褪色了。所以,我现在看到我需要一个专门用于背景图像的 div,对吗?谢谢;)
    • @alex:它被标记为 Javascript,而 jQuery 是用 Javascript 编码的。在执行动画之类的动作时,使用实现这些功能的库非常有用(对于那些需要它的人来说,还有一些花哨的东西,比如缓动等)。 “纯”Javascript当然也是一个有效的选择。
    • @Ben 我仍然认为仅仅包含一个库来执行此任务是过分的。
    • @alex 好吧,您可能有一个观点-如果页面中的库没有其他用途,那肯定会浪费带宽,以及您的解决方案和上述两种 DIV 方法的某种组合能行得通。但是...meta.stackexchange.com/questions/45176/…
    【解决方案3】:

    这是一个开始。

    var element = document.getElementById('hello'),
        targetOpacity = 0.5,
        currentOpacity,
        interval = false,
    
    
    interval = setInterval(function() {
    
       currentOpacity = element.getComputedStyle('opacity');
    
       if (currentOpacity > targetOpacity) {
          currentOpacity -= 0.1;
          element.style.opacity = currentOpacity;
    
       } else {
          clearInterval(interval);
       }
    
    
    }, 100);
    

    See it on jsFiddle.

    在 window.onload = function() { } 上运行此程序,或研究跨浏览器的 DOM 就绪事件。

    当然,使用像 jQuery 这样的库会容易得多。

    $(function() {
       $('hello').fadeTo('slow', 0.5);
    });
    

    这依赖于容器的子级继承不透明度。在不影响他们的情况下这样做有点痛苦,因为您无法通过opacity: 1 重置孩子的不透明度。

    【讨论】:

    • 我无法将不透明度重置为 1 有什么原因吗?
    • @nacho4d 你是说 CSS 吗?你不能因为元素继承了它们祖先的opacity。
    猜你喜欢
    • 2023-03-31
    • 2014-05-31
    • 2013-04-23
    • 2011-10-16
    • 1970-01-01
    • 2018-06-21
    • 2012-06-02
    相关资源
    最近更新 更多