当前位置: 首页 > 知识库问答 >
问题:

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

谢志用
2023-03-14

这是我想出的一段方便的代码的自我问答。

目前,还没有一种简单的方法来嵌入SVG图像,然后通过CSS访问SVG元素。使用JS SVG框架的方法多种多样,但如果您所做的只是制作一个带有滚动状态的简单图标,那么这些方法就过于复杂了。

所以这里是我想出的,我认为这是迄今为止在一个网站上使用SVG文件的最简单的方法。它的概念来自早期的文本到图像的替换方法,但据我所知,SVG从来没有这样做过。

这就是问题所在:

共有2个答案

朱刚捷
2023-03-14

风格

svg path {
    fill: #000;
}

脚本

$(document).ready(function() {
    $('img[src$=".svg"]').each(function() {
        var $img = jQuery(this);
        var imgURL = $img.attr('src');
        var attributes = $img.prop("attributes");

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

            // Remove any invalid XML tags
            $svg = $svg.removeAttr('xmlns:a');

            // Loop through IMG attributes and apply on SVG
            $.each(attributes, function() {
                $svg.attr(this.name, this.value);
            });

            // Replace IMG with SVG
            $img.replaceWith($svg);
        }, 'xml');
    });
});
双元魁
2023-03-14

首先,在HTML中使用IMG标记嵌入SVG图形。我使用Adobe Illustrator制作图形。

<img id="facebook-logo" class="svg social-link" src="/images/logo-facebook.svg"/>

这就像嵌入普通图像一样。请注意,您需要将IMG设置为具有SVG类。“社交链接”类只是为了举例而已。ID不是必需的,但很有用。

然后使用这段jQuery代码(在单独的文件中或在头部内联)。

    /**
     * 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');

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

            }, 'xml');

        });

上面的代码所做的是用'SVG'类查找所有的IMG,并用链接文件中的内联SVG替换它。最大的优点是它允许您现在使用CSS来更改SVG的颜色,如下所示:

svg:hover path {
    fill: red;
}

我编写的jQuery代码还跨原始图像ID和类端口。所以这个CSS也能工作:

#facebook-logo:hover path {
    fill: red;
}

或:

.social-link:hover path {
    fill: red;
}

您可以在这里看到它的工作示例:http://labs.funkhausdesign.com/examples/img-Svg/img-to-Svg.html

我们有一个包含缓存的更复杂的版本:https://github.com/funkhaus/style-guide/blob/master/template/js/site.js#L32-L90

 类似资料:
  • 问题内容: 这是我想出的一小段代码的自我问答。 当前,没有一种简单的方法可以嵌入SVG图像,然后可以通过CSS访问SVG元素。有多种使用JS SVG框架的方法,但是如果您要做的只是制作带有过渡状态的简单图标,它们将过于复杂。 所以这就是我想出的,我认为这是迄今为止在网站上使用SVG文件的最简单方法。它的概念来自早期的文本到图像替换方法,但据我所知,从未对SVG进行过处理。 这是问题: 如何在不使用

  • 我的html文件中有以下svg图像: 现在,我试图改变颜色使用这个css代码: 然而,一切都没有改变。使用css更改svg图像路径颜色的正确方法是什么?谢谢

  • 我想有相同的svg(Transfer.svg)但不同的颜色只使用css,它必须兼容IE11,Edge,FF和Chrome。 提前谢谢你。

  • 问题内容: 我想替换图像的颜色。例如,将所有蓝色变为红色而形状没有任何变形。当我尝试这样做时,我可以通过迭代每个像素来交换颜色,但是交换区域的形状变为平坦的形状。 example1输入:http: //www.tutorialwiz.com/tutorials/changing_color/images/original.jpg example1输出:http : //www.tutorialwi

  • 问题内容: 我正在尝试使用javascript更改svg图像颜色。这可能吗?我可以将其加载为对象,然后以某种方式访问​​颜色/图像数据。 每一个回应或提示都将受到高度赞赏! 问题答案: 当然,这是一个示例(省略了标准HTML样板):

  • 我从服务器接收图像,然后根据用户选择的颜色,图像颜色将发生变化。 我尝试了以下方法: 我得到了与我的目标相反的结果(UIImage外部的白色是用所选颜色着色的)。 出了什么问题? 在这个问题上我也需要这样做,提供的解决方案不能解决我的问题。如何更改iOS和WatchKit中的图像颜色