我有一个白色图像用作 div 的背景,我想上色以匹配主题主色。我知道我可以这样做:
filter: sepia() saturate(10000%) hue-rotate(30deg);
并循环 hue-rotate
找到一种颜色,但是否可以提前计算出这个值?鉴于指定的十六进制值非常暗,我想我还需要包括 invert(%)
过滤器。
给定 #689d94
的十六进制值--- 我需要做哪些数学运算来计算所需的 hue-rotate
和 invert
图像转换为相同的颜色- 背景图像?
编辑
这是 div
的一个片段,白色背景图像被过滤成绿色。这里的技巧是过滤整个 div
,而不仅仅是图像。如果我要在 div
中输入一些文本,文本颜色也会变成绿色。
div {
background:url(http://richard.parnaby-king.co.uk/basket.svg) no-repeat scroll 0 0 transparent;
background-size:5em;
width:5em;
height:5em;
-webkit-filter: invert(25%) sepia() saturate(100000%) hue-rotate(174deg);
filter: invert(25%) sepia() saturate(100000%) hue-rotate(174deg);
}
<div></div>
<p style="background: #689d94"></p>
原文由 Richard Parnaby-King 发布,翻译遵循 CC BY-SA 4.0 许可协议
获得精确匹配的唯一方法是使用 SVG 颜色矩阵过滤器。
对于 RGB 颜色
#689d94
,即rgb(104, 157, 148)
,将每个原色的值除以 255:将这些权重放入 SVG
<filter>
矩阵 (前 3 行中的 5ᵗʰ 列) :<filter>
必须有 id (我使用了 RGB 十六进制代码689d94
),因此我们可以将其用作参考。如果 SVG 元素的
display
属性设置为none
并且在 HTML 代码中包含此 SVG 元素,则某些浏览器(例如 Firefox)看不到/使用 SVG 过滤器不方便占用一些空间,最好的办法是将这个 SVG 转换成纯内联 CSS 滤镜。要获取 内联过滤器 值,请采用上面列出的 SVG 代码,通过删除换行符和不必要的空格将其转换为单行,然后添加
url('data:image/svg+xml,
并将前面提到的 id 附加为#689d94')
: