Motion Lab · 10 Live-Demos

CSSAnimationenfürWebdesign– 10 Beispiele mit Code

Diese Seite erklärt CSS Animationen nicht nur – sie ist eine. Jedes Beispiel läuft live direkt vor deinen Augen, du kannst damit spielen und den Code mit einem Klick kopieren.

Valerio Di Candia18. März 2026ca. 15 Min. Lesezeit
10Live-Demos
0Libraries nötig
60fps auf der GPU
Grundlagen

Was sind CSS Animationen?

CSS Animationen sind visuelle Bewegungen und Übergänge, die du direkt mit CSS umsetzen kannst, ohne eine einzige Zeile JavaScript schreiben zu müssen. Sie machen deine Webseite lebendig, lenken die Aufmerksamkeit auf wichtige Elemente und verbessern die gesamte Nutzererfahrung.

Es gibt zwei Hauptwerkzeuge für Animationen in CSS:

In diesem Artikel zeige ich dir 10 praxiserprobte CSS Animationen, die du direkt in dein Webdesign-Projekt kopieren und einsetzen kannst. Jedes Beispiel enthält den vollständigen CSS-Code, eine Erklärung und einen Hinweis, wann du es am besten verwendest.

1

CSS Transitions: Einfache Übergänge zwischen zwei Zuständen, zum Beispiel wenn sich die Farbe eines Buttons beim Hover ändert.

2

CSS Animations mit @keyframes: Komplexere Animationen mit mehreren Schritten, die automatisch ablaufen können, ohne dass der Nutzer etwas tun muss.

Wirkung

Warum CSS Animationen im Webdesign wichtig sind

Animationen sind nicht nur hübsche Spielereien. Richtig eingesetzt, erfüllen sie wichtige Funktionen in deinem Webdesign:

Jetzt anfragen

Nutzer führen: Animationen lenken den Blick gezielt auf Call-to-Action-Buttons, Formulare oder wichtige Informationen. Ein pulsierender Button fällt sofort ins Auge und erhöht die Wahrscheinlichkeit, dass ein Besucher klickt.

Feedback geben: Wenn ein Nutzer eine Aktion ausführt, bestätigt eine Animation, dass etwas passiert ist. Ein Shake-Effekt bei einer fehlerhaften Eingabe zeigt sofort: Hier stimmt etwas nicht.

Premium

Professionalität ausstrahlen: Sanfte Übergänge und durchdachte Animationen vermitteln Kompetenz und Liebe zum Detail. Das schafft Vertrauen bei deinen Besuchern.

Ladezeiten überbrücken: Ein eleganter Loading Spinner oder eine Skeleton-Animation lässt Wartezeiten kürzer wirken und verhindert, dass Nutzer abspringen.

Storytelling unterstützen: Inhalte, die beim Scrollen sanft ins Bild gleiten, erzählen eine Geschichte und führen den Nutzer durch deine Seite.

Der grosse Vorteil von CSS Animationen gegenüber JavaScript-Animationen: Sie werden vom Browser hardwarebeschleunigt und laufen dadurch besonders flüssig. Außerdem benötigen sie keine zusätzlichen Bibliotheken und erhöhen die Ladezeit deiner Seite nicht.

Vergleich

CSS Transition vs. CSS Animation – Der Unterschied

Bevor wir in die Beispiele eintauchen, ist es wichtig, den Unterschied zwischen CSS Transitions und CSS Animations zu verstehen. Viele Entwickler verwechseln die beiden Konzepte.

Transition
LIVE/transition · 0.3s ease
Klick oder Hover: genau 2 Zustände
A⇄B

CSS Transition ist ein Übergang von einem Zustand in einen anderen. Sie wird durch ein Ereignis ausgelöst, zum Beispiel durch :hover, :focus oder eine Klasse, die per JavaScript hinzugefügt wird. Eine Transition hat immer genau zwei Zustände: Anfang und Ende.

transition.css
/* Transition: Einfacher Übergang bei Hover */
.button {
  background-color: #3498db;
  transition: background-color 0.3s ease;
}

.button:hover {
  background-color: #2980b9;
}
Animation
LIVE/animation: pulse 2s infinite
Läuft von selbst – mit beliebig vielen Zwischenschritten
@keyframes
0%scale(1)50%scale(1.05)100%scale(1)

CSS Animation mit @keyframes erlaubt dir, mehrere Zwischenschritte zu definieren. Die Animation kann automatisch starten, sich wiederholen und in verschiedene Richtungen laufen. Du hast volle Kontrolle über jeden Zeitpunkt der Animation.

animation.css
/* Animation: Mehrere Schritte mit @keyframes */
@keyframes pulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.05); }
  100% { transform: scale(1); }
}

.cta-button {
  animation: pulse 2s infinite;
}

Wann nutzt du was?

Verwende Transitions, wenn du einfache Zustandswechsel brauchst, zum Beispiel Hover-Effekte, Farbwechsel oder Größenänderungen. Verwende Animations, wenn du komplexere Bewegungen brauchst, die automatisch ablaufen, sich wiederholen oder mehrere Zwischenschritte haben.

Bonus-Labor

Easing-Rennstrecke: gleiche Dauer, völlig anderes Gefühl

linearlinear
easeease
ease-inease-in
ease-outease-out
ease-in-outease-in-out
back (Overshoot)cubic-bezier(.68,-.55,.27,1.55)
Live-Demos

10 CSS Animationen mit Code zum Kopieren

Hier sind 10 CSS Animationen, die du sofort in deinen Projekten verwenden kannst. Jedes Beispiel enthält den vollständigen Code, eine Erklärung der Funktionsweise und einen Hinweis zum idealen Einsatzzweck.

Fade-In beim Scrollen (Opacity + TranslateY)

LIVE/fadeInUp · 0.8s ease-out
Herodelay 0.1s
Textblockdelay 0.2s
Kartedelay 0.3s
Featuredelay 0.4s
fade-in.css
/* Fade-In Animation */
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.fade-in-up {
  opacity: 0;
  animation: fadeInUp 0.8s ease-out forwards;
}

/* Verzögerung für gestaffelte Elemente */
.fade-in-up:nth-child(1) { animation-delay: 0.1s; }
.fade-in-up:nth-child(2) { animation-delay: 0.2s; }
.fade-in-up:nth-child(3) { animation-delay: 0.3s; }
.fade-in-up:nth-child(4) { animation-delay: 0.4s; }

Der Fade-In-Effekt lässt Elemente sanft von unten ins Bild gleiten, während sie gleichzeitig von transparent zu sichtbar wechseln. Das ist einer der beliebtesten Effekte im modernen Webdesign und sorgt für ein elegantes Scroll-Erlebnis.

Um den Effekt beim Scrollen auszulösen, kannst du die Klasse .fade-in-up per Intersection Observer hinzufügen, wenn das Element in den sichtbaren Bereich scrollt. Alternativ kannst du die CSS-Eigenschaft animation-play-state: paused verwenden und auf running setzen.

Wann verwenden

Hero-Sektionen, Textblöcke, Karten-Layouts, Feature-Listen und überall dort, wo Inhalte beim Scrollen schrittweise erscheinen sollen.

LIVE/slideInLeft + slideInRight · 0.7s
← translateX(-100px)
translateX(100px) →
slide-in.css
/* Slide-In von links */
@keyframes slideInLeft {
  from {
    opacity: 0;
    transform: translateX(-100px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* Slide-In von rechts */
@keyframes slideInRight {
  from {
    opacity: 0;
    transform: translateX(100px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

.slide-in-left {
  opacity: 0;
  animation: slideInLeft 0.7s ease-out forwards;
}

.slide-in-right {
  opacity: 0;
  animation: slideInRight 0.7s ease-out forwards;
}

Der Slide-In-Effekt lässt Elemente von der Seite ins Bild gleiten. Das eignet sich hervorragend für Layouts, bei denen Text und Bild nebeneinander stehen und abwechselnd von links und rechts erscheinen sollen.

Durch die Kombination von opacity und translateX wirkt die Bewegung natürlich und angenehm. Der forwards-Wert bei animation-fill-mode sorgt dafür, dass das Element nach der Animation sichtbar bleibt.

Wann verwenden

Zweispaltige Layouts mit Bild und Text, Vorher-Nachher-Vergleiche, Timeline-Elemente oder Feature-Sektionen.

Bounce-Effekt für Buttons

LIVE/bounce · 0.8s ease
Fahr mit der Maus über den Button
bounce.css
/* Bounce-Effekt für Buttons */
@keyframes bounce {
  0%, 20%, 50%, 80%, 100% {
    transform: translateY(0);
  }
  40% {
    transform: translateY(-15px);
  }
  60% {
    transform: translateY(-7px);
  }
}

.bounce-button {
  display: inline-block;
  padding: 12px 30px;
  background-color: #e74c3c;
  color: #ffffff;
  border: none;
  border-radius: 5px;
  cursor: pointer;
  transition: background-color 0.3s ease;
}

.bounce-button:hover {
  animation: bounce 0.8s ease;
  background-color: #c0392b;
}

Der Bounce-Effekt lässt einen Button beim Hover leicht springen. Das fühlt sich spielerisch an und zieht die Aufmerksamkeit auf sich, ohne aufdringlich zu wirken. Dieser Effekt eignet sich besonders für Call-to-Action-Buttons.

Die Keyframes definieren mehrere Positionen, wodurch der typische Bounce-Effekt entsteht: Das Element springt hoch, fällt zurück, springt nochmal etwas kleiner und kommt dann zur Ruhe. Die Prozentwerte steuern das Timing der einzelnen Phasen.

Wann verwenden

Call-to-Action-Buttons, Download-Buttons, Anmelde-Buttons oder überall dort, wo du maximale Aufmerksamkeit auf ein klickbares Element lenken willst.

Pulsierender Effekt (z.B. für CTAs)

LIVE/pulse · 2s infinite
Hover pausiert die Animation
3
pulse.css
/* Pulsierender Effekt */
@keyframes pulse {
  0% {
    transform: scale(1);
    box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.7);
  }
  50% {
    transform: scale(1.05);
    box-shadow: 0 0 0 15px rgba(231, 76, 60, 0);
  }
  100% {
    transform: scale(1);
    box-shadow: 0 0 0 0 rgba(231, 76, 60, 0);
  }
}

.pulse-cta {
  display: inline-block;
  padding: 15px 35px;
  background-color: #e74c3c;
  color: #ffffff;
  border: none;
  border-radius: 5px;
  cursor: pointer;
  animation: pulse 2s infinite;
}

.pulse-cta:hover {
  animation-play-state: paused;
}

Ein pulsierender Effekt lässt ein Element rhythmisch größer und kleiner werden. Das zieht den Blick an und signalisiert: Hier gibt es etwas Wichtiges. Besonders effektiv bei Call-to-Action-Buttons oder Benachrichtigungs-Icons.

Der Trick bei diesem Effekt ist die Kombination aus transform: scale() und einem sich ausbreitenden box-shadow. Der Schatten dehnt sich aus und wird dabei transparent, was einen Welleneffekt erzeugt. Mit animation-play-state: paused beim Hover stoppst du die Animation, damit der Nutzer in Ruhe klicken kann.

Wann verwenden

Primäre Call-to-Action-Buttons, Benachrichtigungs-Badges, wichtige Hinweise oder Elemente, die sofortige Aufmerksamkeit erfordern.

Typing-Effekt für Überschriften

LIVE/typing · steps(39, end)
$Hallo, ich bin dein neuer Website-Hero.
typing.css
/* Typing-Effekt */
@keyframes typing {
  from {
    width: 0;
  }
  to {
    width: 100%;
  }
}

@keyframes blink-caret {
  from, to {
    border-color: transparent;
  }
  50% {
    border-color: #333333;
  }
}

.typing-effect {
  overflow: hidden;
  border-right: 3px solid #333333;
  white-space: nowrap;
  margin: 0 auto;
  font-size: 1.5rem;
  font-family: monospace;
  animation:
    typing 3.5s steps(40, end),
    blink-caret 0.75s step-end infinite;
}

/* Variante: Typing stoppt nach Abschluss */
.typing-effect-once {
  overflow: hidden;
  border-right: 3px solid #333333;
  white-space: nowrap;
  font-size: 1.5rem;
  font-family: monospace;
  width: 0;
  animation:
    typing 3.5s steps(40, end) forwards,
    blink-caret 0.75s step-end infinite;
}

Der Typing-Effekt simuliert das Tippen auf einer Tastatur. Text erscheint Buchstabe für Buchstabe, was besonders auf Landing Pages oder Hero-Sektionen einen starken ersten Eindruck hinterlässt.

Dieser Effekt funktioniert rein mit CSS, hat aber eine Einschränkung: Die Breite muss zum Text passen. Der steps()-Wert sollte ungefähr der Anzahl der Buchstaben entsprechen. Für dynamische Texte oder mehrere Zeilen empfiehlt sich eine JavaScript-Erweiterung.

Wichtig: Setze die Zeichenanzahl im steps()-Wert passend zu deinem Text. Bei einem Text mit 20 Zeichen verwendest du steps(20, end).

Wann verwenden

Hero-Sektionen, Landing Pages, Portfolio-Webseiten oder überall dort, wo du einen dramatischen Einstieg willst.

Shake-Animation für Fehlerhinweise

LIVE/shake · 0.5s ease-in-out
Leer absenden = Fehler auslösen

shake.css
/* Shake-Animation */
@keyframes shake {
  0%, 100% {
    transform: translateX(0);
  }
  10%, 30%, 50%, 70%, 90% {
    transform: translateX(-5px);
  }
  20%, 40%, 60%, 80% {
    transform: translateX(5px);
  }
}

.shake {
  animation: shake 0.5s ease-in-out;
}

/* Anwendung auf Formularfelder */
.input-error {
  border: 2px solid #e74c3c;
  animation: shake 0.5s ease-in-out;
}

/* Variante: Subtilere Version */
@keyframes shake-subtle {
  0%, 100% {
    transform: translateX(0);
  }
  25% {
    transform: translateX(-3px);
  }
  75% {
    transform: translateX(3px);
  }
}

.shake-subtle {
  animation: shake-subtle 0.3s ease-in-out;
}

Die Shake-Animation schüttelt ein Element kurz hin und her. Das ist die intuitivste Art, einem Nutzer mitzuteilen, dass etwas schiefgegangen ist, zum Beispiel bei einer falschen Passworteingabe oder einem nicht ausgefüllten Pflichtfeld.

Die Animation bewegt das Element abwechselnd nach links und rechts. Je mehr Keyframe-Schritte du definierst, desto intensiver wird das Schütteln. Die subtile Variante mit weniger Schritten eignet sich für weniger kritische Hinweise.

Tipp: Kombiniere die Shake-Animation mit einer Farbänderung des Rahmens zu Rot, damit der Fehler auch visuell durch Farbe kommuniziert wird. Das ist wichtig für die Barrierefreiheit, da sich nicht alle Nutzer auf Bewegung verlassen können.

Wann verwenden

Formularvalidierung, Login-Fehler, fehlerhafte Eingaben, Pflichtfeld-Hinweise oder überall dort, wo du auf einen Fehler aufmerksam machen willst.

LIVE/::after · transition 0.3s
Hover über die Links
underline.css
/* Smooth Underline Effekt */
.smooth-underline {
  position: relative;
  text-decoration: none;
  color: #333333;
  padding-bottom: 2px;
}

.smooth-underline::after {
  content: '';
  position: absolute;
  width: 0;
  height: 2px;
  bottom: 0;
  left: 0;
  background-color: #3498db;
  transition: width 0.3s ease-in-out;
}

.smooth-underline:hover::after {
  width: 100%;
}

/* Variante: Linie von der Mitte aus */
.smooth-underline-center {
  position: relative;
  text-decoration: none;
  color: #333333;
  padding-bottom: 2px;
}

.smooth-underline-center::after {
  content: '';
  position: absolute;
  width: 0;
  height: 2px;
  bottom: 0;
  left: 50%;
  background-color: #3498db;
  transition: all 0.3s ease-in-out;
}

.smooth-underline-center:hover::after {
  width: 100%;
  left: 0;
}

Statt der klassischen Text-Unterstreichung kannst du mit CSS eine animierte Unterstreichung erstellen, die beim Hover sanft von links nach rechts wächst. Das sieht deutlich eleganter aus und ist ein beliebter Effekt in modernen Navigationen.

Der Effekt nutzt ein ::after Pseudo-Element, das als Linie unter dem Text positioniert wird. Im Normalzustand hat es eine Breite von 0, beim Hover wächst es auf 100%. Die Variante von der Mitte aus ist etwas aufwendiger, da sowohl width als auch left gleichzeitig animiert werden.

Wann verwenden

Navigation, Linksammlungen, Footer-Links, Sidebar-Menüs oder überall dort, wo du Links elegant hervorheben willst.

Card Flip (Karten umdrehen)

LIVE/rotateY(180deg) · perspective 1000px
Hover oder Tippen zum Umdrehen
flip-card.css
/* Card Flip Effekt */
.flip-card {
  width: 300px;
  height: 200px;
  perspective: 1000px;
}

.flip-card-inner {
  position: relative;
  width: 100%;
  height: 100%;
  transition: transform 0.6s ease;
  transform-style: preserve-3d;
}

.flip-card:hover .flip-card-inner {
  transform: rotateY(180deg);
}

.flip-card-front,
.flip-card-back {
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 10px;
}

.flip-card-front {
  background-color: #3498db;
  color: #ffffff;
}

.flip-card-back {
  background-color: #2c3e50;
  color: #ffffff;
  transform: rotateY(180deg);
}
flip-card.html
<div class="flip-card">
  <div class="flip-card-inner">
    <div class="flip-card-front">
      <p>Vorderseite</p>
    </div>
    <div class="flip-card-back">
      <p>Rückseite</p>
    </div>
  </div>
</div>

Der Card-Flip-Effekt dreht eine Karte beim Hover um und zeigt die Rückseite. Das eignet sich perfekt für Team-Mitglieder-Karten, Produkt-Features oder FAQ-Elemente, bei denen du zusätzliche Informationen auf der Rückseite platzieren willst.

Das HTML für diesen Effekt benötigt drei verschachtelte Elemente: Den Container (.flip-card), einen inneren Wrapper (.flip-card-inner) und die Vorder- und Rückseite (.flip-card-front und .flip-card-back). Die perspective-Eigenschaft erzeugt den 3D-Effekt, und backface-visibility: hidden verhindert, dass die Rückseite durchscheint.

Wann verwenden

Team-Karten, Produkt-Features, FAQ-Karten, Spielelemente oder überall dort, wo du zusätzliche Informationen interaktiv präsentieren willst.

Loading Spinner

LIVE/spin · linear infinite
.spinner
.spinner-double
.dot-spinner
spinner.css
/* Loading Spinner */
@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

.spinner {
  width: 50px;
  height: 50px;
  border: 4px solid #ecf0f1;
  border-top: 4px solid #3498db;
  border-radius: 50%;
  animation: spin 1s linear infinite;
}

/* Variante: Doppelter Spinner */
.spinner-double {
  width: 50px;
  height: 50px;
  border: 4px solid transparent;
  border-top: 4px solid #3498db;
  border-bottom: 4px solid #e74c3c;
  border-radius: 50%;
  animation: spin 1s linear infinite;
}

/* Variante: Drei Punkte */
@keyframes dot-pulse {
  0%, 80%, 100% {
    transform: scale(0);
    opacity: 0;
  }
  40% {
    transform: scale(1);
    opacity: 1;
  }
}

.dot-spinner {
  display: flex;
  gap: 8px;
}

.dot-spinner span {
  width: 12px;
  height: 12px;
  background-color: #3498db;
  border-radius: 50%;
  animation: dot-pulse 1.4s infinite ease-in-out;
}

.dot-spinner span:nth-child(1) { animation-delay: -0.32s; }
.dot-spinner span:nth-child(2) { animation-delay: -0.16s; }
.dot-spinner span:nth-child(3) { animation-delay: 0s; }

Ein Loading Spinner zeigt dem Nutzer, dass Inhalte geladen werden. Statt einer langweiligen Warteanzeige kannst du mit CSS einen professionellen Spinner erstellen, der zu deinem Design passt.

Der klassische Spinner nutzt einen Rahmen, bei dem nur eine Seite eingefärbt ist. Durch die Rotation entsteht der Ladeeffekt. Die Punkt-Variante verwendet drei span-Elemente mit versetzten Animationsverzögerungen, sodass die Punkte nacheinander pulsieren.

Wann verwenden

Ladebildschirme, AJAX-Anfragen, Formular-Absendung, Seitenwechsel oder überall dort, wo der Nutzer auf etwas warten muss.

Parallax Scroll-Effekt

LIVE/perspective: 1px · translateZ
Scrolle in diesem Fenster ↓
translateZ(0)

Tiefe durch Geschwindigkeit

✦ parallax-float

Der Himmel bewegt sich langsamer als die Berge – und die Berge langsamer als dieser Text.

Genau dieses Tempo-Gefälle erzeugt die räumliche Tiefe.

Alles nur mit perspective und translateZ – ganz ohne JavaScript.

parallax.css
/* Parallax Scroll-Effekt */
.parallax-container {
  height: 100vh;
  overflow-x: hidden;
  overflow-y: auto;
  perspective: 1px;
}

.parallax-layer-back {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  transform: translateZ(-1px) scale(2);
}

.parallax-layer-front {
  position: relative;
  transform: translateZ(0);
}

/* Einfache Variante mit background-attachment */
.parallax-simple {
  background-image: url('dein-bild.jpg');
  background-attachment: fixed;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
  min-height: 400px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.parallax-simple h2 {
  color: #ffffff;
  font-size: 3rem;
  text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
}

/* Sanfte Scroll-Bewegung für Elemente */
@keyframes parallax-float {
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-20px);
  }
}

.parallax-float {
  animation: parallax-float 6s ease-in-out infinite;
}

Der Parallax-Effekt sorgt dafür, dass Hintergrund und Vordergrund sich beim Scrollen mit unterschiedlicher Geschwindigkeit bewegen. Das erzeugt einen Tiefeneffekt und lässt deine Webseite dreidimensional wirken.

Es gibt zwei Ansätze für den Parallax-Effekt. Die einfache Variante mit background-attachment: fixed funktioniert in den meisten Browsern zuverlässig. Die erweiterte Variante mit perspective und translateZ erzeugt einen echteren 3D-Effekt, kann aber auf manchen mobilen Geräten Probleme machen.

Wichtig: Auf iOS-Geräten funktioniert background-attachment: fixed nicht. Verwende hier stattdessen die perspective-Methode oder deaktiviere den Effekt für mobile Geräte mit einer Media Query.

Wann verwenden

Hero-Sektionen, Trennbereiche zwischen Inhaltsblöcken, Portfolio-Seiten, Landing Pages oder überall dort, wo du visuellen Tiefeneffekt erzeugen willst.

Performance

Performance-Tipps für CSS Animationen

Animationen können deine Webseite verlangsamen, wenn du sie falsch einsetzt. Hier sind die wichtigsten Regeln für performante CSS Animationen:

Experiment

transform vs. left – was passiert, wenn der Browser ins Schwitzen kommt?

GPUtransform: translateX()
Layoutleft: 0 → 100%
Tipp: Starte das Experiment und vergleiche beide Kugeln.
01

Nur transform und opacity animieren: Diese beiden Eigenschaften werden vom Browser hardwarebeschleunigt und laufen auf der GPU. Animationen von width, height, margin, padding, top, left oder font-size lösen ein Reflow aus und sind deutlich langsamer.

02

will-change sparsam nutzen: Die CSS-Eigenschaft will-change: transform teilt dem Browser mit, dass ein Element animiert werden wird. Der Browser kann sich darauf vorbereiten. Aber setze diese Eigenschaft nur auf Elemente, die tatsächlich animiert werden, nicht pauschal auf alles.

will-change.css
/* Gut: will-change gezielt einsetzen */
.animated-element {
  will-change: transform, opacity;
}

/* Schlecht: will-change auf alles setzen */
* {
  will-change: transform; /* Niemals so! */
}
03

Animationen reduzieren für prefers-reduced-motion: Manche Nutzer haben in ihren Systemeinstellungen angegeben, dass sie weniger Bewegung bevorzugen. Respektiere diese Einstellung:

reduced-motion.css
/* Animationen für Nutzer deaktivieren, die weniger Bewegung bevorzugen */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

Diese Seite macht es vor: Unten links kannst du alle Animationen jederzeit pausieren – bei aktivierter Systemeinstellung passiert das automatisch.

04

Anzahl gleichzeitiger Animationen begrenzen: Wenn zu viele Elemente gleichzeitig animiert werden, kann die Seite ruckeln. Staffele Animationen mit animation-delay und animiere nur Elemente, die gerade im sichtbaren Bereich sind.

Composite Layers vermeiden: Jedes animierte Element mit will-change oder transform erzeugt einen eigenen Composite Layer im Browser. Zu viele Layer verbrauchen viel GPU-Speicher. Entferne will-change nach Abschluss der Animation, wenn möglich.

Stolperfallen

Häufige Fehler bei CSS Animationen

Auch erfahrene Entwickler machen bei CSS Animationen immer wieder die gleichen Fehler. Hier sind die häufigsten Stolperfallen und wie du sie vermeidest:

Falsche Eigenschaften animieren: Das Animieren von width, height, top oder left führt zu einem Layout-Reflow und macht die Animation ruckelig. Verwende stattdessen immer transform: translateX(), translateY(), scale() oder rotate().

Zu viele Animationen gleichzeitig: Wenn alles blinkt, pulsiert und sich bewegt, weiss der Nutzer nicht mehr, wohin er schauen soll. Setze Animationen gezielt ein und beschränke dich auf maximal zwei bis drei gleichzeitig sichtbare Animationen pro Viewport.

Animation-fill-mode vergessen: Ohne animation-fill-mode: forwards springt ein Element nach der Animation in seinen Ausgangszustand zurück. Das führt zu einem hässlichen Flackern. Setze forwards, wenn das Element im Endzustand bleiben soll.

Keine Fallbacks für ältere Browser: Nicht alle Browser unterstützen alle CSS-Animationseigenschaften gleich. Teste deine Animationen in verschiedenen Browsern und stelle sicher, dass die Seite auch ohne Animation funktioniert.

Mobile Geräte ignorieren: Viele Animationen, die am Desktop toll aussehen, ruckeln auf Smartphones. Teste auf echten Geräten und reduziere die Komplexität für mobile Nutzer. Deaktiviere rechenintensive Animationen auf Geräten mit kleinem Bildschirm:

mobile.css
/* Animationen auf mobilen Geräten vereinfachen */
@media (max-width: 768px) {
  .parallax-simple {
    background-attachment: scroll;
  }

  .fade-in-up {
    animation-duration: 0.4s;
  }
}

Barrierefreiheit vernachlässigen: Schnelle Animationen und Blinken können bei manchen Menschen epileptische Anfälle auslösen. Halte dich an die WCAG-Richtlinien: Keine Inhalte, die mehr als dreimal pro Sekunde blinken, und biete immer die Möglichkeit, Animationen zu deaktivieren (siehe prefers-reduced-motion).

Zu lange Animationsdauer: Eine Animation, die länger als eine Sekunde dauert, fühlt sich träge an. Halte die meisten Animationen zwischen 200ms und 500ms. Nur dekorative Hintergrundanimationen oder Loops dürfen länger sein.

Zusammenfassung

Fazit

CSS Animationen sind ein mächtiges Werkzeug für modernes Webdesign. Mit den 10 Beispielen aus diesem Artikel hast du eine solide Grundlage, um deine Webseiten lebendiger und professioneller zu gestalten.

Hier die wichtigsten Punkte zusammengefasst:

Setze Animationen gezielt ein. Jede Animation sollte einen klaren Zweck haben, sei es Nutzer führen, Feedback geben oder die Marke stärken. Animationen ohne Zweck sind nur Ablenkung.

Performance hat Priorität. Animiere nur transform und opacity, begrenze die Anzahl gleichzeitiger Animationen und teste auf echten Geräten.

Denke an alle Nutzer. Respektiere prefers-reduced-motion, teste auf verschiedenen Geräten und Browsern, und stelle sicher, dass deine Seite auch ohne Animationen voll funktionsfähig ist.

Starte einfach. Du musst nicht alle 10 Animationen auf einer Seite verwenden. Beginne mit einem Fade-In für deine Inhalte und einem Hover-Effekt für deine Buttons. Das allein macht bereits einen grossen Unterschied.

Mit der Zeit wirst du ein Gefühl dafür entwickeln, wann und wo Animationen den größten Mehrwert bringen. Die Beispiele aus diesem Artikel kannst du direkt kopieren, anpassen und in deinen Projekten verwenden.

Kostenloses Erstgespräch · 30 Minuten

Bereit für mehr Sichtbarkeit?

Vereinbare jetzt dein kostenloses 30-minütiges Erstgespräch. Gemeinsam finden wir heraus, wie ich dir helfen kann, mehr Kunden zu gewinnen.

Was erwartet dich?
  • Analyse deiner aktuellen Online-Präsenz
  • Individuelle Empfehlungen für dein Unternehmen
  • Konkrete nächste Schritte
  • Unverbindlich & kostenlos
Mo – Fr: 9:00 – 18:00 Uhr
Termin wählen · 30 Minuten · kostenlos
Termin direkt online buchen

Der Buchungskalender wird von Calendly (USA) bereitgestellt. Beim Laden wird deine IP-Adresse an Calendly übertragen. Mehr dazu in der Datenschutzerklärung.

Lieber ohne Calendly? Anrufen oder E-Mail schreiben