UX Audit

Wir trainieren dein Team? Buch unsere Workshops, Trainings und Coachings.

Zeigt her!
Close

Animierte SVGs

19. Februar 2015, von stephan
Liechtenecker Büro

Seit meinem letzten Beitrag über den Einsatz von SVGs auf Webseiten ist knapp ein Jahr vergangen. Auch wenn mittlerweile immer mehr Webseiten auf SVGs als Icons und Grafiken zurückgreifen, fristet das Format noch eher ein Nischendasein im Web.
svg_animationen_logo
Nichts desto trotz möchte ich in meinem heutigen Beitrag auf eine gute Möglichkeit eingehen, SVG Animationen ins Web zu bringen.

SVG Inline einbinden

Sieht man sich ein beliebiges .png oder .jpg-Bild mit einem Text-Editor an, wird man auf folgende (oder ähnliche) Ansammlung von unverständlichen Zahlen und Zeichenkombinationen stoßen:

ˇ¬»Ã"ˇƒˇƒˇ⁄ıI:ä9˛Ä4í iã<4É8Ä”9‡t°íòRaj(,¬`
ÓLáû4}ôAÁÒfl{∑ÓIkíÔ8@πÁ=â‡Ûfø≤ <Òw€¿rù5¿X Äcˆò7'ãh7–π6Ä6ŒqÀpÏ1π}0u;ºä¬˘ås!◊˘é£ôáf™¡eÉ•Ysk„‡c≥•[Òù47òå∞uä˙l»u∏xÄz31eŒSgŒÊMg¿o≤u-܈≥ô«≤Á/ßfl+úB¡û¥‡a⁄

Im Vergleich erkennt man einen deutlichen Unterschied bei einer SVG-Datei:

<svg x="0px" y="0px" width="60.2px" height="60px" viewBox="0 0 60.2 60">
  <circle id="circle" fill="#363636" cx="29.8" cy="29.8" r="28.8"/>
  <rect x="22.8" y="13.8" fill="#00CAE5" width="6.6" height="6.4"/>
  <polygon fill="#FFFFFF" points="29.5,35.8 29.5,22.8 22.8,22.8 22.8,41.8 29.3,41.8 40.6,41.8 40.6,35.8"/>
</svg>

Dieser XML-Syntax ermöglicht es, SVGs direkt in HTML einzubinden. Es handelt sich dann um Inline-SVGs.
Anders als bei einer SVG die über den klassischen Weg mit einem &lt;img&gt;-Attribut eingebunden wird, kann bei einer Inline-SVG sowohl über JavaScript als auch über CSS auf alle Elemente (sogenannte Nodes) der SVG zugegriffen werden.
In CSS Pseudo-Code könnte man mit der obigen SVG dann z.B. folgendes machen:
 

   svg #circle {
      transition-duration: 1s;
      transition-property: all;
   }
   svg:hover #circle {
      fill: #ffffff;
   }

In diesem Beispiel wird, sobald der User mit dem Cursor über die SVG fährt, der Kreis mit der ID „circle“ von #363636 auf #ffffff faden.
Die Animationen sind natürlich nicht auf einfache Farbanimationen beschränkt – alle CSS3 Animationen (Unterstützung des Browsers vorausgesetzt) sind auch mit Inline-SVGs möglich.

Unterstützung im Browser

Auch bei der Unterstützung von Inline-SVGs bei modernen Browsern sieht es sehr gut aus.
Bildschirmfoto 2015-02-16 um 08.10.50
Einzig der mittlerweile stark in die Jahre gekommene IE8 macht Probleme.

Ausblick

SVG bietet eine einfache, effektive und vor allem sehr performante Möglichkeit, aufwendige Animationen auf Webseiten einzusetzen, ohne dabei auf Kompatibilität verzichten zu müssen. Wie auch in meinem letzten Beitrag bleibe ich bei meiner abschließenden Meinung, dass SVG die Zukunft von Grafiken im Web darstellt – auch wenn die Verbreitung zugegeben schleppender anläuft als noch letztes Jahr angenommen.

Du willst mit jemanden über das Thema plaudern?

Einen kostenlosen Termin mit CEO Susanne vereinbaren!

Stephan

Meine Rolle bei Liechtenecker: langgedienter Frontend-Veteran Wenn es weder IT noch Digitalisierung gäbe, wäre mein Beruf: Förster ohne Kontakt zu Menschen! Mein Herz schlägt für: die Arterien.
9 Kommentare.
Kommentar verfassen
Name
Mail
Web
Captcha
Erfolgreich!
Fehler!
22. Februar 2015 um 22:16

Super Beitrag. Ich wollte nur kurz was zum Fallback für IE8 sagen. SVGMagic habe ich hier im Einsatz, weil es automatisch ein Bild aus dem SVG generiert und ich nichts mehr machen muss.

Jetzt antworten
Antwort verfassen
Name
Mail
Web
Captcha
Erfolgreich!
Fehler!
    22. Februar 2015 um 23:12

    Hi Andi, wow das klingt ja superfein. Danke für den Tipp, helps a lot! 🙂

Florian
20. Februar 2015 um 11:55

Hi Stephan, cooler Beitrag! Ich wollte noch fragen ob Du auch eine unkomplizierte IMG-Fallback Variante für ebendiesen IE8 parat hast? Bzw. wie löst Ihr das momentan? Viele Grüße, Florian

Jetzt antworten
Antwort verfassen
Name
Mail
Web
Captcha
Erfolgreich!
Fehler!
    Stephan Fletzberger
    20. Februar 2015 um 14:10

    Hi Florian,
    da sind wir zunächst etwas länger gehangen weil der IE8 eingebettete SVGs überhaupt nicht verträgt (und sämtliche Versuche das SVG einfach nur auszublenden fehlschlagen). Wir sind dann auf eine simple aber sehr effektive Methode gekommen: Mittels IE-Conditional Tags haben wir statt dem SVG dann einfach ein -Attribut eingebunden.
    Hoffe meine Antwort hilft,
    liebe Grüße,
    Stephan

    Florian
    20. Februar 2015 um 14:18

    Alles klar, vielen lieben Dank! 🙂

19. Februar 2015 um 19:22

Hallo! Super Artikel, jedoch fehlt ein nicht unwichtiger Punkt. Der Support von SVG ist zwar prinzipiell schon sehr gut, allerdings sind „animierte SVG“-Grafiken so gut wie nicht cross-browser konform einzusetzen. Grund: Kein einziger Internet Explorer (auch nicht 11) unterstützt dieses Feature. Siehe:
http://caniuse.com/#feat=svg-smil

Jetzt antworten
Antwort verfassen
Name
Mail
Web
Captcha
Erfolgreich!
Fehler!
    19. Februar 2015 um 20:14

    Wenn man die SVGs mit React animiert kann man vielleicht IE auch supporten:
    https://www.youtube.com/watch?v=uT_nuvKArk0
    Disclaimer: haven’t tried it yet.

    Stephan Fletzberger
    20. Februar 2015 um 08:16

    Hallo Johannes,
    das stimmt natürlich. Wir waren schon immer Verfechter des „Progressive Enhancement“-Prinzips. Für Webseiten, bei denen es essentiell ist, dass alle Nutzer mit aktuellen Browsern die Animationen sehen würden wir mit Sicherheit auf andere Methoden setzen. Auf anderen Seiten, bei denen die Animation nur ein netter Effekt sind, kann es natürlich je nach Anforderung auch vertretbar sein, animierte SVGs einzusetzen.
    Mal sehen was der neue Microsoft-Browser bringen wird – vielleicht können wir ja bald auch SVG Animationen für Windows-Default-Browser anbieten!
    Schöne Grüße, Stephan

    5. März 2015 um 01:04

    Es gibt leider ein paar Dinge, die bei CSS Animationen mit SVG Grafiken nicht in allen Browsern gleich funktionieren. Firefox unterstützt z.B. leider keinen transform-origin in Prozent (aber px sollten gehn). Beim Rotieren oder Skalieren kann das recht wichtig sein, weil der Mittelpunkt bei SVG Objekten ja immer Links Oben ist und nicht in der Mitte.
    Ich habe die Greensock.js für eine Animation verwendet, weils so am einfachsten in allen Browsern funktionierte. Der CSS-Tricks Artikel vom Autor der Library hat mich überzeugt es mal auszuprobieren: https://css-tricks.com/svg-animation-on-css-transforms/
    Es gibt natürlich auch noch andere Möglichkeiten wie Snap.svg oder Velocity.js, aber das transform-origin Problem ist mit Greensock wahrscheinlich am einfachsten zu lösen, ohne sich mit transform matrix Befehlen auseinandersetzen zu müssen.
    Clip-paths lassen sich leider in Firefox leider auch nicht animieren 🙁

Technologie – Blogbeitrag

Generative AI: Eine Web-App in 50 Bahn-Kilometern

18. April 2024, von stephan

Es ist früher Donnerstagabend am Wiener Franz-Josefs-Bahnhof. Schwärme an Pendlern strömen in die Züge. Die Menschen wirken erschöpft und müde. Viele nutzen die Zeit im Zug um ein Buch zu lesen oder einfach nur aus dem Fenster zu schauen. Die Zugfahrt nach dem Büro ist für mich meistens die Zeit, offene Tasks abzuschließen, Tickets zu verschieben und zu kommentieren oder E-Mails zu beantworten. Doch heute soll das anders sein.

Jetzt lesen
Liechtenecker Leseliste #62 mit Susanne Liechtenecker
Inspiration – Podcasts

Folge #62 mit Susanne Liechtenecker

27. November 2020

In Folge 62 besinnt sich Susanne auf die Anfänge dieses Podcasts und begrüßt keinen Gast, sondern erzählt über das Buch "Jäger, Hirten, Kritiker" von Richard David Precht und warum es sie inspiriert hat.

Jetzt anhören
Close