我有一个徽标需要出现在我正在开发的网站的页眉和页脚中,并且该网站有一个在浅色和深色模式之间切换的选项。我需要徽标的黑色元素在深色模式打开时显示为黑色,在浅色模式打开时显示为浅色。我尝试过以下CSS:
svg { 填充:=“当前颜色”}
但由于某种原因,这会导致黑色元素完全消失,而不是将它们设置为默认颜色。我怎样才能做到这一点?我知道的唯一其他潜在解决方案是将 svg 转换为字体,然后将其嵌入到网站中,但如果可能的话,我想避免这样做。
She*_*aff 27
您可以直接将 CSS 添加到 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>
Run Code Online (Sandbox Code Playgroud)
警告:我的答案的以下部分未经测试,可能不适用于<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>
Run Code Online (Sandbox Code Playgroud)
小智 2
您可以简单地使用 CSS 类来完成此操作,只需在深色模式打开时将 CSS 类添加到正文,darkMode
然后根据它设置填充颜色
function myFunction() {
document.querySelector("#body").classList.toggle('darkMode');
}Run Code Online (Sandbox Code Playgroud)
.darkMode{
background:black;
height:100vh;
}
svg{ fill:black;}
.darkMode svg {fill:white;}Run Code Online (Sandbox Code Playgroud)
<div id="body">
<svg height="100" width="100">
<circle cx="50" cy="50" r="40"/>
</svg>
<br>
<button onclick="myFunction()">Toggel</button>
</div>Run Code Online (Sandbox Code Playgroud)