热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

imgsrcSVG改变填充颜色-imgsrcSVGchangingthefillcolor

htmlhtml<imgsrclogo.svgaltLogo>csscss.logo-imgpath{fill

html

html

Logo

css

css

.logo-img path {
  fill: #000;
}

The above svg loads and is natively fill: #fff but when I use the above css to try change it to black it doesn't change, this is my first time playing with SVG and I am not sure why it's not working.

上面的svg加载并自动填充:#fff,但是当我使用上面的css尝试将它改为黑色时,它不会改变,这是我第一次使用svg,我不确定为什么它不能工作。

10 个解决方案

#1


155  

You need to make the SVG to be an inline SVG. You can make use of this script, by adding a class svg to the image:

您需要使SVG成为内联的SVG。您可以使用这个脚本,向图像添加一个svg类:

/*
 * Replace all SVG images with inline SVG
 */
jQuery('img.svg').each(function(){
    var $img = jQuery(this);
    var imgID = $img.attr('id');
    var imgClass = $img.attr('class');
    var imgURL = $img.attr('src');

    jQuery.get(imgURL, function(data) {
        // Get the SVG tag, ignore the rest
        var $svg = jQuery(data).find('svg');

        // Add replaced image's ID to the new SVG
        if(typeof imgID !== 'undefined') {
            $svg = $svg.attr('id', imgID);
        }
        // Add replaced image's classes to the new SVG
        if(typeof imgClass !== 'undefined') {
            $svg = $svg.attr('class', imgClass+' replaced-svg');
        }

        // Remove any invalid XML tags as per http://validator.w3.org
        $svg = $svg.removeAttr('xmlns:a');

        // Check if the viewport is set, if the viewport is not set the SVG wont't scale.
        if(!$svg.attr('viewBox') && $svg.attr('height') && $svg.attr('width')) {
            $svg.attr('viewBox', '0 0 ' + $svg.attr('height') + ' ' + $svg.attr('width'))
        }

        // Replace image with new SVG
        $img.replaceWith($svg);

    }, 'xml');

});

And then, now if you do:

然后,如果你做的事:

.logo-img path {
  fill: #000;
}

Or may be:

或者可能是:

.logo-img path {
  background-color: #000;
}

This works!

这个工作!

Fiddle: http://jsfiddle.net/wuSF7/462/

Credits for the above script: How to change color of SVG image using CSS (jQuery SVG image replacement)?

上述脚本的优点:如何使用CSS改变SVG图像的颜色(jQuery SVG图像替换)?

#2


72  

If your goal is just to change the color of the logo, and you don't necessarily NEED to use CSS, then don't use Javascript or jquery as was suggested by some previous answers.

如果您的目标只是更改徽标的颜色,并且您不必使用CSS,那么就不要使用Javascript或jquery,正如前面的一些答案所建议的那样。

To precisely answer the original question, just:

要准确地回答最初的问题,只需:

  1. Open your logo.svg in a text editor.

    打开你的标志。svg在文本编辑器中。

  2. look for fill: #fff and replace it with fill: #000

    寻找填补:# fff和替换它填补:# 000

For example, your logo.svg might look like this when opened in a text editor:

例如,您的标志。svg在文本编辑器中打开时可能是这样的:


  
  

... just change the fill and save.

…只需更改填充并保存。

#3


20  

You could set your svg as a mask. That way setting a background-color would act as your fill color.

您可以将svg设置为一个遮罩。这样设置背景颜色就可以作为填充颜色。

HTML

HTML


CSS

CSS

.logo {
    background-color: red;
    -webkit-mask: url(logo.svg) no-repeat center;
    mask: url(logo.svg) no-repeat center;
}

JSFiddle: https://jsfiddle.net/KuhlTime/2j8exgcb/

JSFiddle:https://jsfiddle.net/KuhlTime/2j8exgcb/

Please note that this method is not working for the Edge browser. You can check that by going to this website: https://caniuse.com/#search=mask

请注意,此方法不适用于边缘浏览器。你可以通过这个网站查看:https://caniuse.com/#search=mask。

#4


17  

The answer from @Praveen is solid.

@Praveen的答案是可靠的。

I couldn't get it to respond in my work, so I made a jquery hover function for it.

我无法让它在我的工作中响应,所以我为它制作了一个jquery悬浮函数。

CSS

CSS

.svg path {
   transition:0.3s all !important;
}

JS / JQuery

JS / JQuery

// code from above wrapped into a function
replaceSVG();

// hover function
// hover over an element, and find the SVG that you want to change
$('.element').hover(function() {
    var el = $(this);
    var svg = el.find('svg path');
    svg.attr('fill', '#CCC');
}, function() {
    var el = $(this);
    var svg = el.find('svg path');
    svg.attr('fill', '#3A3A3A');
});

#5


7  

Why not create a webfont with your svg image or images, import the webfont in the css and then just change the color of the glyph using the css color attribute? No Javascript needed

为什么不使用svg图像或图像创建webfont,在css中导入webfont,然后使用css颜色属性更改字形的颜色呢?不需要Javascript

#6


5  

This answer is based on answer https://stackoverflow.com/a/24933495/3890888 but with a plain Javascript version of the script used there.

这个答案基于以下答案:https://stackoverflow.com/a/24933495/3890888,但是使用的脚本的普通Javascript版本。

You need to make the SVG to be an inline SVG. You can make use of this script, by adding a class svg to the image:

您需要使SVG成为内联的SVG。您可以使用这个脚本,向图像添加一个svg类:

/*
 * Replace all SVG images with inline SVG
 */
document.querySelectorAll('img.svg').forEach(function(img){
    var imgID = img.id;
    var imgClass = img.className;
    var imgURL = img.src;

    fetch(imgURL).then(function(response) {
        return response.text();
    }).then(function(text){

        var parser = new DOMParser();
        var xmlDoc = parser.parseFromString(text, "text/xml");

        // Get the SVG tag, ignore the rest
        var svg = xmlDoc.getElementsByTagName('svg')[0];

        // Add replaced image's ID to the new SVG
        if(typeof imgID !== 'undefined') {
            svg.setAttribute('id', imgID);
        }
        // Add replaced image's classes to the new SVG
        if(typeof imgClass !== 'undefined') {
            svg.setAttribute('class', imgClass+' replaced-svg');
        }

        // Remove any invalid XML tags as per http://validator.w3.org
        svg.removeAttribute('xmlns:a');

        // Check if the viewport is set, if the viewport is not set the SVG wont't scale.
        if(!svg.getAttribute('viewBox') && svg.getAttribute('height') && svg.getAttribute('width')) {
            svg.setAttribute('viewBox', '0 0 ' + svg.getAttribute('height') + ' ' + svg.getAttribute('width'))
        }

        // Replace image with new SVG
        img.parentNode.replaceChild(svg, img);

    });

});

And then, now if you do:

然后,如果你这样做:

.logo-img path {
  fill: #000;
}

Or may be:

或者可能是:

.logo-img path {
  background-color: #000;
}

JSFiddle: http://jsfiddle.net/erxu0dzz/1/

JSFiddle:http://jsfiddle.net/erxu0dzz/1/

#7


5  

To expand on @gringo answer, the Javascript method described in other answers works, but requires the user to download unnecessary image files, and IMO, it bloats your code.

要扩展@gringo应答,其他答案中描述的Javascript方法可以工作,但是需要用户下载不必要的图像文件,而且在IMO上,它会使代码膨胀。

I think a better approach would be to to migrate all 1-color vector graphics to a webfont file. I've used Fort Awesome in the past, and it works great to combine your custom icons/images in SVG format, along with any 3rd party icons you may be using (Font Awesome, Bootstrap icons, etc.) into a single webfont file the user has to download. You can also customize it, so you only include the 3rd party icons you're using. This reduces the number of requests the page has to make, and you're overall page weight, especially if you're already including any 3rd party icons libraries.

我认为更好的方法是将所有的1色矢量图形迁移到webfont文件中。我以前使用过Fort Awesome,它可以很好地将定制的SVG格式的图标/图像与您可能使用的任何第三方图标(字体Awesome、引导图标等)结合到用户必须下载的单个webfont文件中。你也可以定制它,所以你只包括你正在使用的第三方图标。这减少了页面必须发出的请求的数量,并且减少了页面的总体权重,特别是如果已经包含了任何第三方图标库的话。

If you prefer a more dev oriented option, you could Google "npm svg webfont", and use one of the node modules that's most appropriate for your environment.

如果您更喜欢面向开发的选项,那么可以使用谷歌“npm svg webfont”,并使用最适合您的环境的节点模块之一。

Once, you've done either of those two options, then you could easily change the color via CSS, and most likely, you've sped up your site in the process.

有一次,您已经完成了这两个选项中的任何一个,然后您可以通过CSS轻松地更改颜色,而且很有可能,您已经加快了您的站点的进程。

#8


0  

If you have access to JQuery, then extending to Praveen's answer one can programatically change color of different nested elements inside SVG by:

如果您可以访问JQuery,那么扩展到Praveen的答案,您可以通过以下方式改变SVG内部不同嵌套元素的颜色:

$('svg').find('path, text').css('fill', '#ffffff');

美元(svg)。找到(道路、文本)。css(“填满”,“# ffffff”);

Within find, you can mention different elements that needs to be changed in color.

在find中,您可以提到需要更改颜色的不同元素。

#9


0  

The main problem in your case is that you are importing the svg from an tag which will hide the SVG structure.

在您的例子中,主要的问题是您正在从一个将隐藏svg结构的标记导入svg。

You need to use the tag in conjunction with the to get the desired effect. To make it work, you need to give an id to the path you want to use in the SVG file to then be able to retrieve them from the tag. Try the snipped below.

您需要将 标记与 一起使用,以获得所需的效果。要使它正常工作,您需要为SVG文件 标记中检索它们。试一试下面剪掉。

.icon {
  display: inline-block;
  width: 2em;
  height: 2em;
  transition: .5s;
  fill: currentColor;
  stroke-width: 5;
  }
  .icon:hover {
    fill: rgba(255,255,255,0);
    stroke: black;
    stroke-width: 2;
    }

.red {
  color: red;
  }

.blue {
  color: blue;
  }

  
    


  
  
          
            
          
        
  
    
          
            
          
        

Note that you can put any URL before the fragment # if you want to load the SVG from an external source (and not embed it into your HTML). Also, usually you do not specify the fill into the CSS. It's better to consider using fill:"currentColor" within the SVG itself. The corresponding element's CSS color value will then be used in place.

注意,如果想从外部源加载SVG(而不是将其嵌入到HTML中),则可以将任何URL放在片段#之前。此外,通常您不会在CSS中指定填充。最好考虑在SVG内部使用fill:“currentColor”。相应元素的CSS颜色值将被使用。

#10


0  

Since SVG is basically code, you need just contents. I used PHP to obtain content, but you can use whatever you want.

因为SVG基本上是代码,所以只需要内容。我使用PHP获取内容,但是您可以使用任何您想要的内容。


Then, I've printed content "as is" inside a div container

然后,我将内容“as is”打印到div容器中

To finnaly set rule to container's SVG childs on CSS

最后,在CSS中将规则设置为容器的SVG childs

.fill-class > svg { 
    fill: orange;
}

I got this results with a material icon SVG:

我用一个材质图标SVG得到了这个结果:

Mozilla Firefox 59.0.2 (64-bit) Linux

Mozilla Firefox 59.0.2(64位)Linux

enter image description here

Google Chrome66.0.3359.181 (Build oficial) (64 bits) Linux

谷歌Chrome66.0.3359.181(编译)(64位)Linux

enter image description here

Opera 53.0.2907.37 Linux

歌剧53.0.2907.37 Linux

enter image description here


推荐阅读
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文深入解析了 jQuery 中用于扩展功能的三个关键方法:`$.extend()`、`$.fn` 和 `$.fn.extend()`。其中,`$.extend()` 用于扩展 jQuery 对象本身,而 `$.fn.extend()` 则用于扩展 jQuery 的原型对象,使自定义方法能够作为 jQuery 实例的方法使用。通过这些方法,开发者可以轻松地创建和集成自定义插件,增强 jQuery 的功能。文章详细介绍了每个方法的用法、参数及实际应用场景,帮助读者更好地理解和运用这些强大的工具。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 在HTML5应用中,Accordion(手风琴,又称抽屉)效果因其独特的展开和折叠样式而广泛使用。本文探讨了三种不同的Accordion交互效果,通过层次结构优化信息展示和页面布局,提升用户体验。这些效果不仅增强了视觉效果,还提高了内容的可访问性和互动性。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
author-avatar
chucai
这个家伙很懒,什么也没留下,只留下了这个默认个签!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有