使用CSS属性mask修改png图片颜色

229 阅读1分钟

一、背景和意义

在前端开发中,有时需要修改一些png格式的图标的颜色,比如用户点击某个图标之前是某一种颜色,点击之后是另外一种颜色。而CSS属性mask正好可以实现这一效果,文本给出相关的示例。

二、代码示例

在这里我们使用经典的Java的图标(素材地址 https://brandlogos.net/wp-content/uploads/2021/11/java-logo-768x768.png )作为示例:

java-logo-768x768.png

相关的HTML代码为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="referrer" content="no-referrer">
    <style>
        .origin {
            width: 200px;
            height: 200px;
        }
 
        .color-changed {
            width: 200px;
            height: 200px;
            background: green;
            mask: url("java-logo-768x768.png");
            mask-size: 100% 100%;
        }
    </style>
</head>
 
<body>
    <h1>原图</h1>
    <img class="origin" src="java-logo-768x768.png">
 
    <h1>变绿的效果</h1>
    <div class="color-changed"></div>
</body>
 
</html>

需要注意的是,java-logo-768x768.png 这张图片需要下载下来放到本地或者测试服务器上,因为mask属性需要引用同域名下的图片,否则会出现跨域访问错误。

将前面的html代码保存为mask.html文件,连同 java-logo-768x768.png 一起放在本地的nginx服务器的网页文件目录下,访问 http://localhost/mask.html,看到的显示效果如下:

image.png

当然,也可以使用渐变色,相关的html代码为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="referrer" content="no-referrer">
    <style>
        .origin {
            width: 200px;
            height: 200px;
        }
 
        .color-changed {
            width: 200px;
            height: 200px;
            background: green;
            mask: url("java-logo-768x768.png");
            mask-size: 100% 100%;
        }
    </style>
</head>
 
<body>
    <h1>原图</h1>
    <img class="origin" src="java-logo-768x768.png">
 
    <h1>变绿的效果</h1>
    <div class="color-changed"></div>

    <h1>渐变色效果</h1>
    <div class="color-changed" style="background: linear-gradient(to bottom, red, green)"></div>
</body>
 
</html>

运行效果如下:

image.png