主题
染色效果
基于滤镜的方案
不完全支持
使用多个滤镜组合,形成自己想要的染色效果

原图如第一张
html<img src="avatar.jpg" />给图片增加i一种
降低饱和度的橙黄色染色效果(如第二张),几乎所有色相都会被收敛到35~40 之间cssimg { filter: sepia(1); }提高主色调的饱和度(如第三张),这种变化一般需要手动慢慢调整cssimg { filter: sepia(1) saturate(4); }最后将每个像素的色相以指定角度偏移(如第四张)
cssimg { filter: sepia(1) saturate(4) hue-rotate(295deg); }添加动画,实现图片染色即鼠标移动后回复的效果

上面效果看不去不是太好看
基于混合模式的方案
不完全支持
luminosity 混合模式会保留上层的 HSL 亮度信息,并从它的下层西区色相和饱和度信息,再将这两层混合
mix-blend-mode:需要把图片包裹在一个容器中,并把容器的背景色设置为我们想要的主色调,但这种动画会不生效html<div class="box"> <img src="avatar.jpg" /> </div>css.box { background: hsl(335, 100%, 50%); } .box img { mix-blend-mode: luminosity; }
background-blend-mode:不用图片元素,而是用<div></div>元素,把这个元素的第一层背景设置为要染色的图片,第二层背景设置为主色调,这种动画生效html<div class="box" style="background-image: url(avatar.jpg)" />css.box { width: 100px; height: 100px; background-size: cover; background-color: hsl(335, 100%, 50%); background-blend-mode: luminosity; transition: background-color .5s; } .box:hover { background-color: transparent; }这种自然的多,但图片尺寸需要设死
