Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cursor: pointer; on svg element is not working

In my website i use svg elements. Sometimes i need them to be clickable, therefore i want pointer cursor over them.

However adding css class or style

cursor: pointer;

not work.

That's the example element

<object id="male2" type="image/svg+xml" data="course/ani/male2.svg" style="left: 87px; bottom: 56px;" es-character="male2"></object>

It seems like it just not worki with svg. Anyone know how to fix, or how to go around it?

like image 513
Skotnik Avatar asked Oct 31 '14 10:10

Skotnik


3 Answers

As AmeliaBR's comment indicates, you should add this style inside the SVG <object>.

And unless your SVG is very simple, you may have the same issue I had: only seeing a pointer when you are hovering over one of the shapes in the SVG, but not when you're between shapes.

(In some cases you might want that behavior, but for a wordmark, for example, you typically want the whole rectangle to be clickable, not just the individual letters.)

To make the whole rectangle clickable, add svg { cursor: pointer; }. If you just want specific elements clickable, name them by class:

<svg ...>
  <style>
    svg { cursor: pointer; } /* whole rectangle */

    /* OR */

    .element-name { cursor: pointer; } /* specific elements */
  </style>
  ...
</svg>
like image 167
Zach Avatar answered Oct 11 '22 22:10

Zach


I think this is the easiest solution among the others:

  1. wrap svg into <a> or anything else that will receive clicks:
<a href="#">
    <object>
        <embed src="img.svg"></embed>
    </object>
</a>
  1. remove pointer events from <object> so all clicks will be triggered on the wrapper element:
object {
    pointer-events: none;
}
like image 26
godblessstrawberry Avatar answered Oct 12 '22 00:10

godblessstrawberry


If adding "cursor: pointer" directly to the svg element does not work, you can either try to add an transparent element (Pseudo elements directly on the object tag do not work) with the same dimensions as the SVG which is absolutely positioned over the SVG.

a.svg-cursor:before {
content: "";
display: block;
position: absolute;
background-color: transparent;
cursor: pointer;
/* plus width and height of the SVG */
}
<a href="#" class="svg-cursor">
<object id="male2" type="image/svg+xml" data="course/ani/male2.svg" es-character="male2"></object>
</a>

Or you can take an img instead of object and add the "cursor: pointer"-style to the img:

<img id="male2" src="course/ani/male2.svg" style="left: 87px; bottom: 56px;" alt="Description" />

like image 3
Herr_Schwabullek Avatar answered Oct 11 '22 22:10

Herr_Schwabullek