使用遮罩
.icon {
color: deepskyblue;
background-color: currentColor;
mask: url(./icon.svg) no-repeat center / 100%;
}
背景混合模式 background-blend-mode
/* 变色的时候改变 --fill-color 的属性值 */
.element {
--fill-color: gray;
background: linear-gradient(var(--fill-color), var(--fill-color)), url(./icon.svg), #fff;
/* 或者 lighten, normal; */
background-blend-mode: screen, normal;
}
测试下来,如果 icon.svg 图标有很多半透明的边缘像素点,screen
混合模式效果更好,如果底色不是白色,而是很淡的灰色,则screen 混合效果会有些许误差,lighten 效果没有误差。
一些限制
此方法实现的前提是元素需要设置一个浅色的底色,不然混合模式的执行就会有问题,因此,适合有背景色也无关紧要的场景,例如像是搜索框这种,就非常合适。