我正在尝试在我的 SVG(设置为背景图像)中使用 CSS 变量来填充颜色,但很难让它工作。它显示默认的黑色,但是当我检查它时,我可以看到 css 变量在那里并显示我想要的颜色。
HTML
<div class="test">
Testing the css variable color
</div>
<div class="icon">
</div>
CSS
:root {
--primary-color: hsl(332, 61%, 78%);
}
div {
width: 100px;
height: 100px;
}
.test {
background: var(--primary-color);
}
.icon {
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 129 129'%3E%3Cpath d='m121.3,34.6c-1.6-1.6-4.2-1.6-5.8,0l-51,51.1-51.1-51.1c-1.6-1.6-4.2-1.6-5.8,0-1.6,1.6-1.6,4.2 0,5.8l53.9,53.9c0.8,0.8 1.8,1.2 2.9,1.2 1,0 2.1-0.4 2.9-1.2l53.9-53.9c1.7-1.6 1.7-4.2 0.1-5.8z' fill='var(--primary-color)' /%3E%3C/svg%3E");
}
我在 这里 看到了 SVG 中使用的 CSS 变量,但我不确定是否可以使用背景图像?我对使用 SVG 和 CSS 变量都是新手,所以我不确定我是否做错了什么……希望了解它为什么不能正确渲染颜色!
原文由 sammiepls 发布,翻译遵循 CC BY-SA 4.0 许可协议
好的,我们开始…我将首先解释为什么它不起作用,然后我将展示一个替代方案。
为什么你的方法不起作用
在您的示例中,svg 不是 DOM 的一部分。所以你不能使用css来修改svg的属性。
您正在做的是在您的 url 中为 svg 添加内联样式。由于浏览器无法将
--primary-color
识别为颜色,因此它不起作用。另一种方法
另一种方法是将 svg 放在 html 中并伪造背景。我通过绝对定位 svg 并使用 z-index 将其移动到背景来做到这一点。
请注意,您必须修改 svg 或定位以按照您想要的方式放置背景。通常你会为此使用背景大小。但是通过一些努力,您可以在 svg 中复制这种行为,或者通过使用 css 更好地定位它。