使用mask遮罩实现png等图标更换颜色
demo演示请看 https://blog.upupd.com/demo/png图片变色.html
代码如下:
<span class="changecolor"></span> .changecolor { display: inline-block; width: 432px; height: 99px; background-color: #dd1b14; -webkit-mask:url(./test.png) no-repeat; mask:url(./test.png) no-repeat; -webkit-mask-size: 100% 100%; mask-size: 100% 100%; }
备注,本地直接html演示会提示跨域等问题,建议在localhost服务下面运行,本地可以把png转为base64来使用。
CSS mask遮罩介绍
CSS mask属性在使用的时候就是mask: xxx,但是现在随着这个属性的规范化,mask属性实际上已经成为了诸多mask-*的缩写,这和background, border性质是一样的。
具体是哪些属性的缩写呢,可以参见下面的列表:
mask-image mask-mode mask-repeat mask-position mask-clip mask-origin mask-size mask-type mask-composite
我们写
mask: url(./haorooms.svg) no-repeat center / 100%;
实际就是 mask-image mask-repeat mask-position 的缩写。
mask-image
mask-image 的作用就是用这个图片的不透明部分镂空显示底部的颜色。
mask-mode
mask-mode属性的默认值是match-source,意思是根据资源的类型自动采用合适的遮罩模式。
例如,如果我们的遮罩使用的是SVG中的< defs >中的< mask >元素,则此时的mask-mode属性的计算值是luminance,表示基于亮度遮罩。如果是其他场景,则计算值是alpha,表示基于透明度遮罩。
因此,mask-mode支持下面3个属性值:
mask-mode: alpha;此关键字指示应使用掩码层图像的透明度(阿尔法通道)值作为掩码值。mask-mode: luminance;此关键字指示掩膜层图像的亮度值应用作掩码值。mask-mode: match-source;(默认值)根据资源的类型自动采用合适的遮罩模式。
mask-repeat,mask-position,mask-clip,mask-origin, mask-size
这些属性基本和background一样,可以对比记忆。
mask-type属性
mask-type属性功能上和mask-mode类似,都是设置不同的遮罩模式。但还是有个很大的区别,那就是mask-type只能作用在SVG元素上,本质上是由SVG属性演变而来,因此,Chrome等浏览器都是支持的。但是mask-mode是一个针对所有元素的CSS3属性,Chrome等浏览器并不支持,目前仅Firefox浏览器支持。
由于只能作用在SVG元素上,因此默认值表现为SVG元素默认遮罩模式,也就是默认值是luminance,亮度遮罩模式。如果需要支持透明度遮罩模式,可以这么设置:
mask-type: alpha;
mask-composite属性详细介绍
mask-composite表示当同时使用多个图片进行遮罩时候的混合方式。支持属性值包括:
add;遮罩累加。subtract;遮罩相减。也就是遮罩图片重合的地方不显示。意味着遮罩图片越多,遮罩区域越小。intersect;遮罩相交。也就是遮罩图片重合的地方才显示遮罩,。exclude;遮罩排除。也就是后面遮罩图片重合的地方排除,当作透明处理。
此篇内容出自haorooms博客,感谢分享。