CSS中如何在透明PNG图像上设置背景色

5
在CSS中,是否真的可以对透明PNG图像应用背景颜色?以下是一个例子:
使用CSS,将这个图像

enter image description here

您可以使用类似于background-color: rgba(0,0,300,.5)的CSS代码将其转换为此样式。

enter image description here

全部使用纯CSS(当然还有HTML)吗?

谢谢。


不,不可能像那样改变颜色。你想要在悬停时更改图像吗? - Anmol Sandal
1
是的,我已经搜索了它并找到了解决方案。点赞你的问题,学到了新东西。 - Anmol Sandal
改变颜色有成功吗?我没有得到完美的匹配。 - Anmol Sandal
这个问题缺少他已经尝试过的内容。 - Hash
我在CSS方面什么都没尝试过,因为我不知道该怎么做。 :) - Wyvh
显示剩余2条评论
4个回答

4

使用CSS滤镜

通过Chris Coyier的有关滤镜的文章:

CSS滤镜是一种强大的工具,作者可以使用它们来实现各种视觉效果(有点像浏览器中的Photoshop滤镜)。CSS filter属性提供了在元素渲染之前对其进行模糊或颜色转换等效果的访问。

  • blur():模糊
  • brightness():亮度
  • contrast():对比度
  • drop-shadow():阴影
  • grayscale():灰度
  • hue-rotate():色相旋转
  • invert():反向
  • opacity():透明度
  • saturate():饱和度
  • sepia():褐色


滤镜示例(基于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://istack.dev59.com/nPnsV.webp"  width="300" height="300">
<img class="blur" src="https://istack.dev59.com/nPnsV.webp"  width="300" height="300">
<img class="brightness" src="https://istack.dev59.com/nPnsV.webp"  width="300" height="300">
<img class="contrast" src="https://istack.dev59.com/nPnsV.webp"  width="300" height="300">
<img class="grayscale" src="https://istack.dev59.com/nPnsV.webp"  width="300" height="300">
<img class="huerotate" src="https://istack.dev59.com/nPnsV.webp"  width="300" height="300">
<img class="invert" src="https://istack.dev59.com/nPnsV.webp"  width="300" height="300">
<img class="opacity" src="https://istack.dev59.com/nPnsV.webp"  width="300" height="300">
<img class="saturate" src="https://istack.dev59.com/nPnsV.webp"  width="300" height="300">
<img class="sepia" src="https://istack.dev59.com/nPnsV.webp"  width="300" height="300">
<img class="shadow" src="https://istack.dev59.com/nPnsV.webp"  width="300" height="300">

</body>
</html>

鼠标悬停效果:


img:hover {
  filter: hue-rotate(250deg);
}
<img src="https://istack.dev59.com/nPnsV.webp" />


2

如果使用background-color,是无法实现这种效果的。因为应用于覆盖元素的透明背景色也会影响PNG图像的透明部分。

你需要使用CSS滤镜hue-rotate()(将图像颜色旋转到紫色)和brightness()(使图像变暗):

img {
  filter: hue-rotate(230deg) brightness(60%);
}
<img src="https://istack.dev59.com/nPnsV.webp" />

请参阅MDN获取有关CSS滤镜的更多信息。CSS Tricks上也有一篇有用的CSS滤镜文章


谢谢。所以,没有真正的方法可以将低透明度的颜色悬停在图像上,而不是完全改变图像的颜色(使用hue-rotate),使其成为另一种颜色(就像使用background-color: rgba(0,300,0,.15)一样)? - Wyvh
你可以这样做,但即使将此效果应用于覆盖元素,也始终会影响图像的透明部分... - andreas
1
哦,那很遗憾。我想到了图像映射,但你也不能在上面应用背景颜色。:/ 将其标记为最佳答案。 - Wyvh
你想要实现一个悬停效果吗? - Hash
不是的,我正在寻找一种方法,在透明图像上应用小绿色而不将其应用于透明部分,就像Andreas所说的那样。这里没有悬停效果。 - Wyvh

2
是的,您可以通过CSS滤镜来实现。

"CSS filter属性提供了在元素显示之前对其呈现进行模糊或颜色转换等效果的访问。滤镜通常用于调整图像、背景或边框的呈现。" - Chris Coyier


请查看以下网站:

CSS filter属性
滤镜


-1

你不能像你想的那样从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%);}

演示

请查看这个stackoverflow的答案。 如何通过CSS更改PNG图像的颜色?


1
请勿使用从https://dev59.com/p2s05IYBdhLWcg3wJurp复制的答案。 - Anmol Sandal
请仔细阅读@AnmolSandal的评论。"请查看这个stackoverflow答案。如何通过CSS更改PNG图像的颜色?" - lpradhap
@AnmolSandal,请查看“请检查此stackoverflow答案。通过CSS更改PNG图像的颜色?”您可以查看参考资料。因此,在您发表评论之前,请查看完整评论。 - Heshan Kit
是的,我的意思是如果我们没有答案,链接也可以在内容部分提供给用户以帮助他们。我认为这就是评论框的作用。@HeshanKit不要认为我很傲慢。我之前也犯过同样的错误,这就是我所说的。请不要复制答案,而是在评论中提到。我认为这不是一个需要提出的问题。 - Anmol Sandal
@AnmolSandal,最好是在第一条评论中解释那个错误,而不是指向我提到的同样的参考资料。无论如何,下次我会将参考资料作为评论添加。谢谢。 - Heshan Kit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接