如何在活动时更改 svg 图像的颜色?

Posted

技术标签:

【中文标题】如何在活动时更改 svg 图像的颜色?【英文标题】:How to change the color of a svg image on active? 【发布时间】:2020-12-25 07:52:23 【问题描述】:

我正在使用 img 元素中的 src 属性导入 svg。

例如:<img src="/images/home.svg" />

我有两种家庭形象。正常情况下使用的 home.svg 和 home 链接处于活动状态时使用的 homeActive.svg。两张图除了颜色完全一样。

目前,我使用 if 语句来动态显示一个图像。有什么方法可以改变颜色而不加载两种图像。

【问题讨论】:

你应该可以在这里找到答案 - ***.com/questions/9872947/… 可以用js动态改变图片的src @Abhishek 这就是我现在所做的,但这并不是很好的表现。 【参考方案1】:

有什么方法可以改变颜色而不加载两个 图片类型。

您可以使用CSS filters 更改悬停时的颜色

我使用了 4 个 .key 键图标实例,每个实例在悬停时都使用不同的 CSS 过滤器着色

.container 
display: -webkit-flex; 
display: flex; 
width:35%;
height:35%;

.key 
  height: 3em;
  width: 3em;
   padding: 1em;
   transition:  0.8s;
   
:hover.key
     -webkit-filter: hue-rotate(320deg);
     filter: hue-rotate(320deg);
   
.grey-out 
  opacity: 0.4;
   -webkit-filter: grayscale(100%);
    filter: grayscale(100%);

.hue-rotate 
    -webkit-filter: hue-rotate(90deg);
    filter: hue-rotate(90deg);

  

.invert 
    -webkit-filter: invert(100%);
    filter: invert(100%);
<div class="container">
<img class="key" src="https://twemoji.maxcdn.com/svg/1f511.svg"> 
  <img class="key grey-out" src="https://twemoji.maxcdn.com/svg/1f511.svg"> 
   <img class="key hue-rotate" src="https://twemoji.maxcdn.com/svg/1f511.svg"> 
    <img class="key invert" src="https://twemoji.maxcdn.com/svg/1f511.svg">
</div>

更新

您可以使用utility 来选择所需颜色的滤镜组合

例如红色:

.container 
display: -webkit-flex; 
display: flex; 
width:35%;
height:35%;

.key 
  height: 3em;
  width: 3em;
   padding: 1em;
    
:hover.key
     -webkit-filter: invert(27%) sepia(100%) saturate(7373%) hue-rotate(359deg) brightness(106%) contrast(109%);
     filter: invert(27%) sepia(100%) saturate(7373%) hue-rotate(359deg) brightness(106%) contrast(109%);
   
<div class="container">
<img class="key" src="https://twemoji.maxcdn.com/svg/1f505.svg"> 
  
</div>

【讨论】:

【参考方案2】:

Can you use CSS selectors on SVG rendered via CSS Data URI?

"宿主文档中的选择器无法查询 SVG 文档 作为外部资源嵌入,而不是与 宿主文档标记。”

如果通过 background 或 background-image 属性调用 svg 元素,则无法更改它们的填充或描边颜色。 您需要在代码中“内联”html 格式的 svg,以便能够通过 css 定位它们的各个部分。

可能还有其他方法可以通过调用单个图像来解决此问题,但是它们取决于上下文。请提供您的代码的最小可重现示例(使用 *** 提供的 sn-p 代码工具)或 codepen 或类似网站的链接。

如果/需要时,我会编辑此回复。

【讨论】:

以上是关于如何在活动时更改 svg 图像的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

使用对象时如何在鼠标悬停时更改 SVG 笔触颜色

将鼠标悬停在图像上时如何更改 SVG 的颜色?

如何在悬停事件中更改 SVG 图像中的笔触颜色? [复制]

如何使 .svg 图标对禁用状态做出反应并更改其颜色?

如何更改SVG图像的颜色[重复]

如何使用 CSS(jQuery SVG 图像替换)更改 SVG 图像的颜色?