CSS Animation

Animations & Transitions

CSS Transitions und Keyframes erwecken Interfaces ohne JavaScript zum Leben. Wenn die richtigen Properties animiert werden, bleibt die Bewegung flüssig und barrierefrei.

intermediate14 min readUpdated 15. Sept. 2026
pulse.css
css
/* pulse.css */
@keyframes pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.05); opacity: 0.8; }
}

.badge {
  animation: pulse 2s ease-in-out infinite;
  transition: transform 150ms ease;
}

.badge:hover {
  transform: scale(1.1);
}
Zustandsänderung
transition
Sequenz
@keyframes + animation
Bewegung
transform
Flüssigkeit
timing-function
Performance
transform und opacity
Barrierefreiheit
prefers-reduced-motion

Warum es wichtig ist

Warum Motion wichtig ist

Klares Feedback

Bewegung signalisiert, dass sich etwas geändert hat, wodurch sich Interfaces reaktionsschneller und verständlicher anfühlen.

Performant bei richtiger Umsetzung

Die Animation von transform und opacity läuft auf dem Compositor, sodass sie flüssig bleibt, ohne Layout- oder Paint-Prozesse auszulösen.

Respektiert Nutzer

Die Berücksichtigung von Reduced-Motion-Präferenzen verhindert, dass Bewegungen Unbehagen auslösen.

Das Gesamtbild

Die drei Werkzeuge für CSS Motion

Transitions für Zustandsänderungen, Keyframes für Sequenzen und Transforms für performante, Compositor-freundliche Bewegungen.

Transitions

Reaktion

Fließende Übergänge zwischen zwei Zuständen, ausgelöst durch Hover, Focus oder eine Klassenänderung.

Keyframes

Sequenz

Mehrstufige Animationen mit Kontrolle über jede Phase und Iteration.

Transforms

Bewegung

translate, scale und rotate ändern das Erscheinungsbild, ohne das Layout zu beeinflussen.

CSS Motion auf einen Blick

Die Kerntechniken

transition

Legt Property, Dauer, Timing und Verzögerung für Zustandsänderungen fest.

transform

translate, scale, rotate und skew, ohne ein Layout-Reflow auszulösen.

@keyframes

Definiert benannte Animationen mit Prozentwerten und lässt diese iterieren.

Timing-Funktionen

ease, linear, cubic-bezier und steps steuern das Gefühl der Bewegung.

Performance

Beschränke dich auf transform und opacity; vermeide Layout-Properties.

Reduced Motion

Deaktiviere oder vereinfache Bewegungen, wenn der Nutzer dies wünscht.

Eine kurze Geschichte

Von Hover-Fades zu View Transitions

  1. 2009

    Transitions und Transforms

    CSS erhält fließende Zustandsänderungen und 2D/3D-Transforms.

    09
  2. 2012

    CSS Animations

    Keyframes machen mehrstufige Animationen deklarativ.

    12
  3. 2015

    Hardwarebeschleunigung

    Compositor-freundliche Transforms werden zum Performance-Standard.

    15
  4. 2023

    View Transitions API

    Animierte Übergänge zwischen Seiten- und DOM-Zuständen werden nativ unterstützt.

    23
  5. Heute

    Bewegung mit Maß

    Barrierefreiheit und Performance leiten den Einsatz von Motion.

    Heute

Der vollständige Leitfaden

Animations & Transitions: Alles was Sie wissen müssen

Warum Motion wichtig ist

Motion ist Kommunikation. Ein Button, der sanft in seinen gedrückten Zustand übergeht, ein Panel, das ins Sichtfeld gleitet, und eine Liste, die sich flüssig neu sortiert – all das signalisiert dem Nutzer, was gerade passiert ist. Richtig eingesetzt, lässt Motion ein Interface reaktionsschnell und poliert wirken. Schlecht umgesetzt, lenkt es ab und frustriert.

CSS bietet dir drei Werkzeuge: transitions für Zustandsänderungen, keyframes für Sequenzen und transforms für Bewegungen. Wenn du diese beherrschst, benötigst du für alltägliche Animationen kaum noch JavaScript.

Transitions

Eine Transition interpoliert weich zwischen zwei Zuständen und wird ausgeführt, wenn sich eine Eigenschaft ändert.

/* button.css */
.button {
  background: #2563eb;
  transform: translateZ(0);
  transition: background-color 150ms ease, transform 150ms ease;
}

.button:hover {
  background: #3b82f6;
  transform: translateY(-1px);
}

.button:active {
  transform: translateY(0);
}

Die Kurzschreibweise umfasst die Eigenschaft, die Dauer, die Timing-Funktion und eine optionale Verzögerung. Transitions benötigen einen Trigger: :hover, :focus, :checked, eine Klassenänderung via JavaScript oder eine Media Query. Halten Sie die Zeitspannen kurz – 150 bis 300 Millisekunden reichen für ein Feedback normalerweise aus.

Transforms

Transforms verändern das Aussehen eines Elements, ohne das Layout anderer Elemente zu beeinflussen, weshalb sie sehr performant zu animieren sind.

/* transform.css */
.move { transform: translateX(24px); }
.grow { transform: scale(1.1); }
.turn { transform: rotate(45deg); }
.skew { transform: skewX(-10deg); }

.combo {
  transform: translateY(-4px) scale(1.02) rotate(-1deg);
}

translate, scale und rotate können auf dem Compositor ausgeführt werden, sodass sie selbst unter Last flüssig bleiben. Wenn stattdessen width, height, top oder margin animiert werden, wird der Browser gezwungen, das Layout in jedem Frame neu zu berechnen.

Keyframes

Für mehrstufige oder loopende Animationen verwenden Sie @keyframes und animation.

/* spinner.css */
@keyframes spin {
  to { transform: rotate(360deg); }
}

.spinner {
  animation: spin 800ms linear infinite;
}

@keyframes fade-up {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}

.enter {
  animation: fade-up 300ms ease-out both;
}

Die animation-Kurzschreibweise legt Name, Dauer, Timing, Verzögerung, Iterationsanzahl, Richtung und den Fill-Mode fest. both ist besonders nützlich für Einblend-Animationen, da es die Zustände des ersten und letzten Keyframes anwendet.

Timing-Funktionen

Die Timing-Funktion steuert das Gefühl der Animation. Easing sorgt dafür, dass Bewegungen natürlich und nicht mechanisch wirken.

/* easing.css */
.linear { transition-timing-function: linear; }
.ease-out { transition-timing-function: cubic-bezier(0.22, 1, 0.36, 1); }
.bounce { transition-timing-function: cubic-bezier(0.68, -0.55, 0.27, 1.55); }
  • ease-out für Elemente, die in den Bildschirm eintreten, damit sie abbremsen.
  • ease-in für Elemente, die den Bildschirm verlassen.
  • ease-in-out für Bewegungen zwischen zwei sichtbaren Zuständen.
  • steps() für Frame-ähnliche Effekte, wie zum Beispiel Tipp-Animationen oder Sprite-Animationen.

Performance

Die Regel ist simpel: animiere transform und opacity. Diese können vom Compositor verarbeitet werden, wodurch Layout und Paint übersprungen werden. Alles, was die Geometrie verändert, löst ein Layout aus, und alles, was Farben oder Schatten verändert, löst ein Paint aus.

/* hint.css */
.animated {
  will-change: transform;
}

will-change signalisiert, dass ein Element kurz vor einer Animation steht, sodass der Browser es in einen eigenen Layer verschieben kann. Nutze dies sparsam und entferne es, sobald die Animation beendet ist; zu viele promotete Layer verschwenden Arbeitsspeicher. Warum das so ist, erfährst du im Browsers & Rendering Guide.

Barrierefreiheit und reduzierte Bewegung

Einige Nutzer leiden unter Schwindel oder Übelkeit durch Animationen, und das Betriebssystem stellt diese Präferenz zur Verfügung.

/* reduced.css */
@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;
  }
}

Eine allgemeine Regel wie diese bietet eine sichere Basis. Für einen differenzierteren Ansatz können große Bewegungen durch ein einfaches Ein- und Ausblenden (Fade) ersetzt werden. Vermitteln Sie niemals Informationen ausschließlich über Bewegungen.

View Transitions

Die View Transitions API ermöglicht native Animationen zwischen zwei DOM-Zuständen oder Seiten.

// navigate.js
document.startViewTransition(() => {
  updateTheDOM();
});

Der Browser erstellt Snapshots des alten und des neuen Zustands und animiert den Übergang dazwischen, wobei du den Effekt über CSS-Pseudo-Elemente steuerst. Sie ist ideal für die Seitennavigation und das Neusortieren von Listen. Biete einen einfachen Fallback für Browser an, die diese Funktion nicht unterstützen.

Patterns

  • Hover- und Focus-Feedback. Kurze Transitions für Farben und Transformationen.
  • Entrance-Animationen. Einblenden und Einschieben mit both fill mode.
  • Staggered Lists. Jedes Element leicht verzögert einblenden, oft über eine CSS-Variable und Inline-Styles gesteuert.
  • Skeletons und Spinner. Loopende Keyframes, um Ladevorgänge zu signalisieren.
  • Accordions und Drawers. Transition der Höhe via grid-template-rows von 0fr zu 1fr, was eine saubere Animation ermöglicht.

Best Practices

  • Animiere transform und opacity; vermeide Layout-Properties.
  • Halte die Durations kurz: 150–300ms für Feedback, länger für Akzente.
  • Nutze ease-out für Einblendungen und ease-in für Ausblendungen.
  • Beachte prefers-reduced-motion.
  • Nutze will-change sparsam und räume nach der Animation auf.
  • Bevorzuge CSS für einfache Fälle und JavaScript für komplexe Sequenzen.
  • Teste auf schwächeren Geräten, nicht nur auf einem schnellen Desktop.

Häufige Fehler

  • Animation von width, height oder top, was zu Rucklern (Jank) führt.
  • will-change dauerhaft aktiviert lassen und dadurch Speicher verschwenden.
  • Lange, langsame Animationen, die das UI träge wirken lassen.
  • Ignorieren von reduced-motion-Einstellungen.
  • Endlose Animationen, die vom Inhalt ablenken.
  • Sich darauf verlassen, dass Animationen essenzielle Informationen vermitteln.

Wie geht es weiter?

CSS-Animationen decken die meisten Anforderungen an Benutzeroberflächen ab. Wenn du Timelines, scrollgesteuertes Storytelling oder präzisere Kontrolle benötigst, schau dir den Guide für fortgeschrittene Animationen an. Erfahre mehr über die Performance-Kosten in Browsers & Rendering, halte deine Seite schnell mit Web Performance oder beginne ganz von vorne mit den CSS-Grundlagen.

Wahl der zu animierenden Properties

transform und opacity können auf dem Compositor laufen. Die Animation von width oder top löst in jedem Frame ein Layout aus und führt zu Rucklern (Jank).

Bevorzugt
.card {
  transition: transform 200ms ease, opacity 200ms ease;
}
.card:hover {
  transform: translateY(-4px);
}
Vermeiden
.card {
  transition: top 200ms ease, width 200ms ease;
}
.card:hover {
  top: -4px;
  width: 320px;
}

Berücksichtigung von Motion-Präferenzen

Nutzer, die Reduced Motion anfordern, sollten eine vereinfachte oder sofortige Erfahrung erhalten, keine übelkeitserregende.

Bevorzugt
.panel {
  transition: transform 300ms ease;
}

@media (prefers-reduced-motion: reduce) {
  .panel {
    transition: opacity 150ms ease;
  }
}
Vermeiden
.panel {
  animation: slide 600ms ease infinite;
}
/* ignores the user's
   motion preference */

Häufig gestellte Fragen

Häufig gestellte Fragen

Keep learning

Related topics from the roadmap.

$ Lernen Sie jetzt

Bereit, Animations & Transitions zu lernen?

Unser interaktives Tutorial führt Sie Schritt für Schritt durch Animations & Transitions — mit Quizzen und echtem Code, den Sie im Browser ausführen können.