Grow your CSS skills. Land your dream job.

How to change SVG fill color with jQuery on hover?

  • # February 8, 2013 at 9:42 pm

    Hello good people,

    I need help with changing SVG fill color on hover with jQuery. Thing is that in one SVG i can have path, circle or polygon elements and wish to change color on fill attribute on them when that particular SVG is hovered. Color should reverse back when pointer is not hovering element. I think that adding CSS class to do that is not right way because its simple color change on hover and can be done with jQuery attr() function(i found that on web). Also i found here on forum that jQuery functions mousenter() and mouseleave() should be used for hover. But i didn’t menaged to write my code. :(

    To represent real world example:

    So can someone help me, how should my jQuery code look like to achive when you hover A that fill color of path, circle, polygon changes and reverse back when you unhover. Keep in mind that i have more of SVGs on page so this should change color only on path, circle,polygon that are under hovered A element. I found on web this has to do something with $(this) jQuery but still i could not manage to write good code. :(

    Thank you in advance,
    Vladimir

    # February 9, 2013 at 8:28 pm

    Well i did it myself. I was failing on most stupid thing as it mostly be in coding… and in life. :) I didn’t targeted elements as they should be targeted. Here is the code if someone needs him.

    $(document).ready(function() {
    $(“a”).mouseenter(function() {
    $(this).find(“path, polygon, circle”).attr(“fill”, “#ccc”);
    });
    $(“a”).mouseleave(function() {
    $(this).find(“path, polygon, circle”).attr(“fill”, “#fff”);
    });
    });

    # February 10, 2013 at 4:51 pm

    I’ve done it just with CSS with just one rule. On a very simple and smart ways CSS can handle lot of things. :) Here is code.

    a:hover path, a:hover polygon, a:hover circle {
    fill: red;
    }

    # February 11, 2013 at 9:23 am

    Hi VladimirKrstic!

    I’m glad you figured this out!

    I was wondering though, I’ve had issues with getting Firefox to change the fill color, have you noticed this as well?

    # February 11, 2013 at 9:59 am

    @VladimirKrstic That’s a great result…my first thought was through jQuery but knowing that it’s possible via CSS is an definite plus.

    I do wonder about browser support for the path/polygon/circle attributes though.

    Perhaps there’s an article in there for @chriscoyier

    # February 11, 2013 at 2:32 pm

    I didn’t tested it in older browsers. Chrome 24, Firefox 18.02, Internet Explorer 10 and Opera 12.14 are all fine with it. Thought only Firefox can make CSS Transition on SVG attriributes. Chrome Canary 26 do the job too.

    # February 11, 2013 at 3:12 pm

    The `fill: red;` stuff needs to be in a `

    # February 11, 2013 at 3:48 pm

    Nah, it works without

    # November 12, 2013 at 11:01 am

    Vladi, does this only work with inline SVG…

    My SVG is called as a background-image in CSS, and I think that means I don’t have access to the ‘path’ DOM element, is that right?

    (by the way your example SVG seems not to be there anymore, i’m just guessing at your structure by inspecting element …)

Viewing 9 posts - 1 through 9 (of 9 total)

You must be logged in to reply to this topic.

*May or may not contain any actual "CSS" or "Tricks".