Wie du animierte SVG mit CSS Spezialeffekten entwickelst

hej, ich bin Ralf, freiberuflicher Webdesigner und Konzepter. Ich kann dich bei vielen Themen rund um deine Website unterstützen. Nachhaltigkeit und nachhaltiges Webdesign liegen mir besonders am Herzen. Hypes, die gerade im Internet kursieren, nehme ich kritisch unter die Lupe. Mein Motto lautet: "Ich muss nicht jede Welle reiten".

Ich freue mich auf unsere Zusammenarbeit.

1. Wichtige Voraussetzungen

Vorab möchte ich dir noch eine paar wichtige Voraussetzungen für die Animation von Schrift in Kombination mit grafischen Elementen nennen.

Wenn du Schrift und grafische Elemente zusammen in einer SVG animierst, ist es zwingend notwendig, den Text zuvor in Pfade umzuwandeln. Denn du kannst nicht wissen, welche Schriften auf dem System deiner Besucher*innen installiert sind. Selbst wenn du die auf deiner Website verwendeten Schriften einbindest, ist nicht sichergestellt, dass deine SVG-Animation überall einwandfrei funktioniert. Die Besucher*innen könnten mittels Browsereinstellungen deine mitgelieferten Schriften durch eigene ersetzen.

Einen weiteren Punkt solltest du berücksichtigen: Nicht alle Browser rendern deine mitgelieferten Schriften genau gleich. Schon minimale Abweichungen bei der Laufweite einer Schrift können dafür sorgen, dass Schrift und grafische Elemente nicht mehr aufeinander abgestimmt sind.

Um den Informationsgehalt deiner SVG-Animation zugänglich zu machen, solltest du im img-Tag das title- und das alt-Attribut einbinden. Für die Suchmaschinenoptimierung ist dies ebenfalls relevant.

Wenn du mit lizenzfreien Schriftenarten arbeitest, empfehle ich dir, diese zuvor in starker Vergrößerung (>100pt) zu testen. Manche liefern bei dieser Schriftgröße ein unsauberes Schriftbild, was unprofessionell aussieht.

2. SVG-Code bearbeiten

<linearGradient id="Gradient1" x2="120%">
  <stop offset="0%" stop-color="#333"></stop>
  <stop offset="85%" stop-color="#333"></stop>
  <stop offset="100%" stop-color="rgba(255, 255, 255, 0)"></stop>
  <animate attributeName="x2" begin="950ms" dur="600ms" from="0%" to="100%" repeatCount="1" />
</linearGradient>

Bei diesem Code handelt es sich um das SVG-eigene Animationsmodell SMIL (Synchronized Multimedia Integration Language) Mit linearGradient definierst du einen Farbverlauf von Anthrazit zu Weiß, x2="120%" bedeutet, dass der Pfad 20% überfüllt wird. Die Überfüllung stellt sicher, dass der Pfad nach beendeter Animation vollständig sichtbar ist. Die "stop offset"-Positionen geben an, an welcher Stelle des Verlaufs welche Farbe angezeigt werden soll. Du kannst Farben als benannte Farben, als HEX-Code oder als RGB angeben. Wenn du mit Transparenz arbeiten möchtest, kannst du auch RGBA-Werte verwenden.

Die eigentliche Animation legst du mit "animate attributeName" fest. Mit "begin" steuerst du die zeitliche Verzögerung, mit der die Animation starten soll, und "dur" gibt die Animationsdauer an. Die Angaben "from" und "to" beziehen sich auf den Pfad. Im aktuellen Beispiel soll der Pfad von links nach rechts mit Anthrazit gefüllt werden, beginnend bei 0% und endend bei 100%.

Klasse, du hast die Pfade und die animierten Farbverläufe fertiggestellt. Jetzt folgt die Animation der einzelnen Textzeilen. Dazu wechselst du zu CSS.

3. CSS-Code schreiben

Zunächst geht es darum, die einzelnen Textzeilen nacheinander einzublenden. Mit folgenden Anweisungen blendest du den Text ein:

.fade-in-w {
  fill: url(#wGradient);
  opacity: 0;
  -webkit-animation: webdesign 1ms linear 1000ms 1 forwards;
  -moz-animation: webdesign 1ms linear 1000ms 1 forwards;
  animation: webdesign 1ms linear 1000ms 1 forwards;
}

@-webkit-keyframes webdesign {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

@-moz-keyframes webdesign {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

@keyframes webdesign {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

4. Animierte SVG minifizieren

5. Wie es weitergehen kann

Dir ist das alles zu aufwändig, und du hast keine Zeit und Lust, selbst animierte SVG zu erstellen. Kein Problem, ich unterstütze dich gerne. Wie wäre es mit einem persönlichen Gespräch?