【问题标题】:Background color over transparent PNG image in CSSCSS中透明PNG图像的背景颜色
【发布时间】:2018-02-23 06:30:56
【问题描述】:

真的可以在 CSS 中对透明的 PNG 图像应用背景色吗?这是一个例子:

使用 CSS,转动这张图片

使用像background-color: rgba(0,0,300,.5)这样的CSS代码

全部是完整的 CSS(当然还有 HTML)?

谢谢。

【问题讨论】:

  • 不,这样改变颜色是不可能的。你想让图像在悬停时改变还是什么。
  • @AnmolSandal 确实可以使用 CSS 过滤器。
  • 是的,我已经搜索过它并找到了解决方案。点赞你的问题,学到了新东西
  • 不是我的问题,但无论如何谢谢;)
  • 换色成功了吗?我没有得到它的完美匹配

标签: html css png background-color


【解决方案1】:

是的,您可以借助 CSS 过滤器来做到这一点。

“CSS 过滤器属性提供对模糊或颜色等效果的访问 在元素显示之前切换元素的渲染。 过滤器通常用于调整图像的渲染, 背景或边框。” – 克里斯·科耶尔


看看这些网站:

CSS filter Property
Filters

【讨论】:

    【解决方案2】:

    使用 CSS 过滤器

    来自 Chris Coyier 关于filters 的文章:

    CSS 过滤器是一个强大的工具,作者可以使用它来实现 不同的视觉效果(有点像 Photoshop 过滤器 浏览器)。 CSS filter 属性提供对效果的访问,例如 在元素被渲染之前模糊或颜色偏移 显示出来。

    • 模糊()
    • 亮度()
    • 对比度()
    • 投影()
    • 灰度()
    • 色相旋转()
    • 反转()
    • 不透明度()
    • 饱和()
    • 棕褐色()


    过滤样本(基于 W3S)

    <!DOCTYPE html>
    <html>
    <head>
    <style>
    img {
        width: 33%;
        height: auto;
        float: left; 
    }
    
    .blur {-webkit-filter: blur(4px);filter: blur(4px);}
    .brightness {-webkit-filter: brightness(0.30);filter: brightness(0.30);}
    .contrast {-webkit-filter: contrast(180%);filter: contrast(180%);}
    .grayscale {-webkit-filter: grayscale(100%);filter: grayscale(100%);}
    .huerotate {-webkit-filter: hue-rotate(180deg);filter: hue-rotate(180deg);}
    .invert {-webkit-filter: invert(100%);filter: invert(100%);}
    .opacity {-webkit-filter: opacity(50%);filter: opacity(50%);}
    .saturate {-webkit-filter: saturate(7); filter: saturate(7);}
    .sepia {-webkit-filter: sepia(100%);filter: sepia(100%);}
    .shadow {-webkit-filter: drop-shadow(8px 8px 10px green);filter: drop-shadow(8px 8px 10px green);}
    </style>
    </head>
    <body>
    
    <p><strong>Note:</strong> The filter property is not supported in Internet Explorer, Edge 12, or Safari 5.1 and earlier.</p>
    
    <img src="https://i.stack.imgur.com/nPnsV.png"  width="300" height="300">
    <img class="blur" src="https://i.stack.imgur.com/nPnsV.png"  width="300" height="300">
    <img class="brightness" src="https://i.stack.imgur.com/nPnsV.png"  width="300" height="300">
    <img class="contrast" src="https://i.stack.imgur.com/nPnsV.png"  width="300" height="300">
    <img class="grayscale" src="https://i.stack.imgur.com/nPnsV.png"  width="300" height="300">
    <img class="huerotate" src="https://i.stack.imgur.com/nPnsV.png"  width="300" height="300">
    <img class="invert" src="https://i.stack.imgur.com/nPnsV.png"  width="300" height="300">
    <img class="opacity" src="https://i.stack.imgur.com/nPnsV.png"  width="300" height="300">
    <img class="saturate" src="https://i.stack.imgur.com/nPnsV.png"  width="300" height="300">
    <img class="sepia" src="https://i.stack.imgur.com/nPnsV.png"  width="300" height="300">
    <img class="shadow" src="https://i.stack.imgur.com/nPnsV.png"  width="300" height="300">
    
    </body>
    </html>


    悬停效果:

    img:hover {
      filter: hue-rotate(250deg);
    }
    &lt;img src="https://i.stack.imgur.com/nPnsV.png" /&gt;

    【讨论】:

      【解决方案3】:

      您无法使用background-color 实现此效果,因为应用到上层元素的透明背景颜色也总是会影响 PNG 图像的透明部分。

      您需要CSS filtershue-rotate()(将图像颜色旋转为紫色)和brightness()(使图像变暗):

      img {
        filter: hue-rotate(230deg) brightness(60%);
      }
      &lt;img src="https://i.stack.imgur.com/nPnsV.png" /&gt;

      请参阅 MDN 以获取 more information about CSS filters。还有一个有用的article on CSS Tricks 用于 CSS 过滤器。

      【讨论】:

      • 谢谢。因此,没有真正的方法可以将低透明度颜色悬停在图像上,而不是将图像的颜色(使用色调旋转)完全更改为另一种颜色(就像您使用 background-color: rgba(0,300,0,.15) 一样?
      • 你可以这样做,但是即使你将这个效果应用到一个覆盖的元素上,你也总是会影响图像的透明部分......
      • 哦,好吧,这很可悲。我想到了图像映射,但您也不能在其上应用背景颜色。 :/ 将其标记为最佳答案。
      • 你想要悬停效果吗?
      • 不是真的,我正在寻找一种在透明图像上应用小绿色而不将其应用到透明部分的方法,就像安德烈亚斯说的那样。这里没有悬停效果。
      【解决方案4】:

      您不能随意从 CSS 更改图像的颜色。但是您可以使用过滤器在某种程度上做到这一点。

      .saturate {-webkit-filter: saturate(3); filter: saturate(3);}
      .grayscale {-webkit-filter: grayscale(100%); filter: grayscale(100%);}
      .contrast {-webkit-filter: contrast(160%); filter: contrast(160%);}
      .brightness {-webkit-filter: brightness(0.25); filter: brightness(0.25);}
      .blur {-webkit-filter: blur(3px); filter: blur(3px);}
      .invert {-webkit-filter: invert(100%); filter: invert(100%);}
      .sepia {-webkit-filter: sepia(100%); filter: sepia(100%);}
      .huerotate {-webkit-filter: hue-rotate(180deg); filter: hue-rotate(180deg);}
      .rss.opacity {-webkit-filter: opacity(50%); filter: opacity(50%);}
      

      DEMO

      请检查此 stackoverflow 答案。 Change color of PNG image via CSS?

      【讨论】:

      • 不要使用从stackoverflow.com/questions/7415872/…复制的答案@heshan@
      • 正确阅读他的评论@AnmolSandal“请检查此 stackoverflow 答案。通过 CSS 更改 PNG 图像的颜色?”
      • @AnmolSandal 请检查“请检查此 stackoverflow 答案。通过 CSS 更改 PNG 图像的颜色?”。你可以看到参考。因此,请在发表评论前查看完整评论。
      • 是的,我的意思是如果我们没有答案,也可以在内容部分提供链接以帮助用户。我认为这就是评论框的用途。 @HeshanKit 不要以为我傲慢。在这就是我所说的之前,我犯了同样的错误。不要复制答案,请在评论中提及。我不认为这是一个值得提出的问题。
      • @AnmolSandal 那么最好在第一条评论中首先解释该错误,而不是指向我提到的相同参考。无论如何,我下次会将引用添加为 cmets。谢谢
      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 2017-08-11
      • 2021-07-02
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      相关资源
      最近更新 更多