我有一个logo需要出现在正在制作的网站的页眉和页脚上,并且该网站有一个在浅色模式和深色模式之间切换的选项。 当暗模式开启时,我需要logo的黑色元素看起来是黑色的,而亮模式开启时则为白色。 我尝试了以下CSS:svg {fill:=“currentColor”},但由于某种原因导致黑色元素完全消失而不是设置为默认颜色。 如何使其正常工作? 我所知道的唯一其他潜在解决方案是将svg转换为字体,然后将其嵌入网站中,但如果可能的话,我想避免这样做。
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<style>
path {
fill: black;
}
@media (prefers-color-scheme: dark) {
path { fill: white; }
}
</style>
<path d="..."/>
</svg>
警告:下面部分的答案未经过测试,可能无法用于在<img>
标签中的.svg源文件,甚至不能适用于<svg>
标签。如果有人进行了测试,请在下方评论,以便我编辑我的答案并避免提供误导信息。
如果您使用其他方式“触发”暗模式,您可以将媒体查询更改为任何其他所需内容,例如全局类:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<style>
path {
fill: black;
}
body.dark-theme path {
fill: white;
}
</style>
<path d="..."/>
</svg>
img
标签内部的SVG无法访问页面的CSS样式。 - MXDVLsvg { fill=currentColor }
stroke
而不是fill
- 将您的svg文件上传以获取答案。prefers-color-scheme
css媒体查询可以实现此功能。更多信息请参考下面的链接。
darkMode
,然后根据它设置填充颜色。
function myFunction() {
document.querySelector("#body").classList.toggle('darkMode');
}
.darkMode{
background:black;
height:100vh;
}
svg{ fill:black;}
.darkMode svg {fill:white;}
<div id="body">
<svg height="100" width="100">
<circle cx="50" cy="50" r="40"/>
</svg>
<br>
<button onclick="myFunction()">Toggel</button>
</div>
svg { fill: currentColor; }
- MXDVL