Transitionen in CSS ermöglichen weiche Übergänge von einer Stil-Eigenschaft zu einer anderen. Sie verbessern die Benutzererfahrung, indem sie Bewegungen und Änderungen im Layout oder Styling harmonisch gestalten, beispielsweise beim Hover-Effekt, beim Anklicken von Buttons oder beim Wechsel von Layouts. Transitionen bieten eine einfache Möglichkeit, animierte Effekte zu implementieren, ohne dass dafür JavaScript erforderlich ist.
Eine Transition besteht aus vier Hauptparametern:
transition-property, transition-duration,
transition-timing-function und
transition-delay.
.element {
transition: property duration timing-function delay;
}opacity, background-color).0.5s für eine halbe Sekunde).ease, linear,
ease-in-out).0.3s für eine Verzögerung von 300
Millisekunden)..button {
background-color: #3498db;
transition: background-color 0.3s ease-in-out;
}
.button:hover {
background-color: #2ecc71;
}In diesem Beispiel ändert die
background-color-Eigenschaft beim Hover-Event ihre Farbe
von Blau zu Grün über eine Dauer von 0,3 Sekunden und nutzt dabei die
ease-in-out-Funktion für einen sanften Start und Stopp.
transition-propertyMit transition-property wird festgelegt, welche
CSS-Eigenschaft(en) animiert werden sollen. Mehrere Eigenschaften können
durch Kommas getrennt angegeben werden.
.element {
transition-property: background-color, width;
}In diesem Beispiel werden die background-color- und
width-Eigenschaften animiert.
transition-durationtransition-duration legt die Dauer des Übergangs fest.
Diese kann für jede Eigenschaft einzeln definiert werden.
.element {
transition-duration: 0.5s, 1s; /* 0.5s für die erste Eigenschaft, 1s für die zweite */
}transition-timing-functiontransition-timing-function definiert die
Beschleunigungskurve der Animation, um den Übergang dynamischer zu
gestalten.
.element {
transition-timing-function: ease-out;
}transition-delayMit transition-delay lässt sich eine Verzögerung vor dem
Start der Transition definieren.
.element {
transition-delay: 0.2s;
}In diesem Beispiel verzögert sich die Animation um 0,2 Sekunden.
Alle Übergangsparameter können auch kombiniert für mehrere Eigenschaften definiert werden. Dies ermöglicht mehr Kontrolle über die Reihenfolge und Dauer der einzelnen Übergänge.
.element {
transition: background-color 0.5s ease, width 1s linear 0.2s;
}Hier ändert background-color seine Farbe in 0,5 Sekunden
mit ease, während width 1 Sekunde mit
linear benötigt und eine Verzögerung von 0,2 Sekunden
hat.
.box {
width: 100px;
height: 100px;
background-color: #3498db;
transition: width 0.5s ease-in-out, height 0.5s ease-in-out, background-color 0.5s linear;
}
.box:hover {
width: 150px;
height: 150px;
background-color: #e74c3c;
}In diesem Beispiel werden die Breite, Höhe und Hintergrundfarbe
gleichzeitig über einen Zeitraum von 0,5 Sekunden geändert, wobei
unterschiedliche timing-functions für den Übergang genutzt
werden.
ease und ease-in-out bieten oft angenehmere
Bewegungen als linear.hover, focus oder
active reagieren, um die Interaktivität zu
unterstützen.Keyframe-Animationen in CSS bieten die Möglichkeit, komplexe, mehrstufige Animationen zu erstellen. Sie erlauben es, CSS-Eigenschaften schrittweise über einen festgelegten Zeitraum zu ändern, indem bestimmte Zwischenzustände definiert werden. Keyframe-Animationen ermöglichen flexible Bewegungen, Transformationen und Anpassungen von Stilen, die über einfache Transitionen hinausgehen.
Keyframe-Animationen werden mit dem @keyframes-Regelsatz
definiert. Innerhalb dieser Regel werden die verschiedenen
Animationszustände mit Prozentsätzen (von 0% bis
100%) oder den Schlüsselwörtern from und
to angegeben.
@keyframes animation-name {
0% {
/* Startzustand */
}
100% {
/* Endzustand */
}
}Um die Keyframe-Animation auf ein Element anzuwenden, werden die
Eigenschaften animation-name und
animation-duration benötigt.
@keyframes slideIn {
from {
transform: translateX(-100%);
}
to {
transform: translateX(0);
}
}
.element {
animation-name: slideIn;
animation-duration: 1s;
}In diesem Beispiel wird das Element von links nach rechts über eine Dauer von 1 Sekunde eingeblendet.
Mit Keyframe-Animationen können beliebig viele Zwischenzustände festgelegt werden, um eine Animation genauer zu steuern.
@keyframes bounce {
0% {
transform: translateY(0);
}
50% {
transform: translateY(-30px);
}
100% {
transform: translateY(0);
}
}
.element {
animation-name: bounce;
animation-duration: 0.5s;
animation-timing-function: ease;
animation-iteration-count: infinite;
}In diesem Beispiel wird das Element wie ein springender Ball animiert, indem es in der Mitte der Animation nach oben bewegt und dann zurück zur Ausgangsposition gebracht wird.
animation-nameDer Name der Animation, der mit der @keyframes-Regel
übereinstimmen muss.
animation-name: bounce;animation-durationDie Dauer der Animation. Sie legt fest, wie lange die gesamte
Animation dauert (z. B. 2s für 2 Sekunden).
animation-duration: 2s;animation-timing-functionDie animation-timing-function definiert die
Geschwindigkeitskurve der Animation. Gängige Werte sind
ease, linear, ease-in,
ease-out, ease-in-out oder benutzerdefinierte
Werte wie cubic-bezier.
animation-timing-function: ease-in-out;animation-delayDie Zeit, die vergeht, bevor die Animation beginnt.
animation-delay: 1s;animation-iteration-countBestimmt, wie oft die Animation wiederholt wird. Akzeptierte Werte
sind eine Zahl oder das Schlüsselwort infinite für
unendliche Wiederholung.
animation-iteration-count: infinite;animation-directionLegt fest, ob die Animation in umgekehrter Richtung wiederholt werden soll.
animation-direction: alternate;animation-fill-modeLegt fest, ob die Animation ihre Stilwerte vor und nach ihrer Ausführung beibehalten soll.
forwards und
backwards.animation-fill-mode: forwards;Alle Animationseigenschaften lassen sich in einer einzigen Zeile zusammenfassen.
.element {
animation: bounce 1s ease-in-out 0.5s infinite alternate;
}Die Kurzschreibweise umfasst in dieser Reihenfolge:
@keyframes colorChange {
0% {
background-color: #3498db;
transform: scale(1);
}
50% {
background-color: #2ecc71;
transform: scale(1.2);
}
100% {
background-color: #e74c3c;
transform: scale(1);
}
}
.element {
animation: colorChange 3s ease-in-out infinite;
}In diesem Beispiel ändert sich die Hintergrundfarbe und die Größe des Elements über eine Dauer von 3 Sekunden. Die Animation wird endlos wiederholt und verändert die Hintergrundfarbe und Skalierung in einem rhythmischen Übergang.
ease-in-out ist oft angenehmer für Benutzerinteraktionen
als linear.transform und opacity, da diese
CSS-Eigenschaften effizienter animiert werden können als z. B.
width und height.Animations-Performance ist ein entscheidender Faktor für eine flüssige und reaktionsschnelle Benutzeroberfläche. Nicht optimierte Animationen können auf schwächeren Geräten und bei großen Datenmengen zu Ruckeln und Verzögerungen führen. CSS bietet Möglichkeiten, Animationen effizient zu gestalten, insbesondere durch die richtige Auswahl von animierten Eigenschaften und die Nutzung moderner Browser-Optimierungen.
Nicht alle CSS-Eigenschaften sind für Animationen gleich gut
geeignet. Die transformierenden Eigenschaften wie
transform und opacity sind besonders
performant, da sie direkt von der GPU verarbeitet werden und keine
Reflows oder Neuzeichnungen (Repaints) des gesamten Layouts verursachen.
Andere Eigenschaften wie width, height,
margin oder left führen dagegen oft zu
aufwendigen Neuberechnungen des Layouts und sollten vermieden
werden.
transform,
opacitywidth, height, margin,
padding, top, left,
right, bottom.element {
transition: transform 0.5s ease, opacity 0.5s ease;
}
.element:hover {
transform: scale(1.1);
opacity: 0.8;
}Moderne Browser verlagern transform und
opacity-Animationen automatisch auf die GPU, was die
Render-Performance verbessert. Die GPU kann schnellere, flüssigere
Animationen darstellen, da sie sich auf das Rendering von Grafiken
spezialisiert hat. Die Nutzung von translateX und
translateY zur Verschiebung von Elementen ist z. B.
deutlich effizienter als left und top.
.element {
transition: transform 0.5s ease;
}
.element:hover {
transform: translateX(100px);
}will-change für
Performance-OptimierungDie will-change-Eigenschaft teilt dem Browser mit, dass
eine CSS-Eigenschaft in Kürze animiert wird, wodurch der Browser vorab
Optimierungen vornehmen kann. Dies sollte jedoch sparsam verwendet
werden, da es Speicherressourcen beansprucht.
.element {
will-change: transform, opacity;
}In diesem Beispiel bereitet sich der Browser darauf vor,
transform und opacity zu animieren, was die
Performance verbessert, wenn diese Eigenschaften sich tatsächlich
ändern.
Animationen, die das Layout verändern, zwingen den Browser dazu, die
Position und Größe anderer Elemente neu zu berechnen. Dies verursacht
Reflows und Repaints, die zu Leistungseinbußen führen. Eigenschaften wie
width oder height sollten deshalb möglichst
vermieden werden. Stattdessen sollten scale() oder
translate() verwendet werden, um visuelle Effekte zu
erzielen, ohne das Layout zu beeinflussen.
.element {
transition: width 0.5s ease;
}
.element:hover {
width: 300px;
}.element {
transition: transform 0.5s ease;
}
.element:hover {
transform: scaleX(1.5);
}Die zweite Variante nutzt scaleX(), wodurch die Breite
visuell verändert wird, ohne das Layout neu zu berechnen.
Die Verwendung von requestAnimationFrame in
JavaScript-basierten Animationen oder einer niedrigen Bildfrequenz für
CSS-Animationen kann ebenfalls zur Performance-Optimierung beitragen.
Zudem kann animation-timing-function: steps() verwendet
werden, um flüssige Animationen gezielt auf weniger Frames pro Sekunde
zu reduzieren.
will-change und GPU-optimierte Eigenschaften wie
transform und opacity.ease oder
ease-in-out sind häufig angenehmer und weniger belastend
für das System als linear.