I have a really simple loading animation that works perfectly on Firefox and Chrome, but in IE11 it's not showing the SVG figure.
Here is the full example: JSFiddle sample
SVG:
<svg class="circular-loader" viewBox="25 25 50 50">
<circle class="loader-path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"/>
</svg>
The animation, which is a rotation, is working on IE11, but the SVG, which is a circle, is not being displayed.
Any idea?
I just can't figure out what is not being supported by IE11.
IE does not support CSS animation of SVG elements. It also doesn't support the standard built-in SMIL animations that SVG has.
If you convert your animation to native SVG animations, you could perhaps get it working using the FakeSmile library. Otherwise you will need to use some alternative fallback for IE - such as an animated gif or something.
Only Microsoft Edge will support SVG CSS Transitions and Animation.. especially
stroke-dasharray
.Please see the Microsoft Developer Docs:
https://dev.windows.com/en-us/microsoft-edge/platform/status/csstransitionsanimationsforsvgelements
As you can see in my fork of your example. You were not seeing the loader spin due to not having the
stroke
attribute on yourcircle
element.https://jsfiddle.net/z8w4vuau/50/
You can see how it can spin now. But you will have to check if the browser is IE and adjust your
stroke-dasharray
so it is larger dash. Since IE11 and below do not support animating SVGstroke-dasharray
andstroke-dashoffset
with CSS animation or transitions, unless it is Microsoft Edge build 10240+.But if you need a cross browser solution to animate SVG, especially
stroke-dasharray
andstroke-dashoffset
. Then look into using a JS animation library like the GreenSock Animation Platform (GSAP). Using the DrawSVGPluginhttps://greensock.com/drawSVG
IE11 supports CSS3 animations but not on child nodes of an SVG element. You can animate the SVG node itself so my solution is to break up the parts into separate SVGs and animate those with CSS3.
https://codepen.io/getsetbro/full/Bxeyaw/
This will even work if IE11 is in compatibility mode if you add the meta tag
For anyone having trouble with this, I have a workaround.
I had a full SVG with IDs and CSS animations, all working perfect for all the other major browsers.
I have my SVG inserted into the HTML, so I can access every item with CSS animations.
For this to work, you have to have your SVG with position:
... inside a container
.svgcontent
(or whatever you want to call it)Script:
This takes all the elements in the
objs
array, and insert them as a full SVG behind the first one (you can changeprepend
toappend
to change this behavior).And the SVG is going to have the same id as the object, so the CSS animate is going to apply to a full SVG, not an SVG object.
And that's it!