CSS Animationen und Transitions | Enjyn Gruppe
Hallo Welt
→
→
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

330 Dokumentationen verfügbar

Wissensdatenbank

CSS Animations Transitions

Zuletzt aktualisiert: 14.07.2026 um 12:30 Uhr

CSS Animationen und Transitions

CSS ermöglicht flüssige Animationen ohne JavaScript. Lernen Sie Transitions für einfache Übergänge und Keyframe-Animationen für komplexe Effekte.

Transitions vs. Animations

Aspekt Transition Animation
Trigger State-Änderung (hover, class) Automatisch oder manuell
Kontrolle Start → Ende Mehrere Keyframes
Wiederholung Nur bei erneuter Änderung Unbegrenzt möglich
Komplexität Einfach Komplex möglich

Transitions - Grundlagen

.button {
    background: blue;
    color: white;
    padding: 10px 20px;

    /* Transition definieren */
    transition: background 0.3s ease;
}

.button:hover {
    background: darkblue;
}

/* Mehrere Properties */
.card {
    transition: transform 0.3s ease,
                box-shadow 0.3s ease,
                opacity 0.3s ease;
}

.card:hover {
    transform: translateY(-5px);
    box-shadow: 0 10px 20px rgba(0,0,0,0.2);
}

/* Alle Properties */
.element {
    transition: all 0.3s ease;
    /* ⚠️ Performance: Besser spezifische Properties angeben */
}

Transition-Syntax

/* Einzelne Properties */
transition-property: transform;
transition-duration: 0.3s;
transition-timing-function: ease;
transition-delay: 0.1s;

/* Kurzform */
transition: property duration timing-function delay;
transition: transform 0.3s ease 0.1s;

/* Timing Functions */
transition: all 0.3s ease;        /* Standard, langsam→schnell→langsam */
transition: all 0.3s linear;      /* Konstante Geschwindigkeit */
transition: all 0.3s ease-in;     /* Langsam starten */
transition: all 0.3s ease-out;    /* Langsam enden */
transition: all 0.3s ease-in-out; /* Beides */

/* Cubic Bezier für eigene Kurven */
transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
/* "Back" Effekt - überschwingt leicht */

/* Mehrere Transitions */
transition: transform 0.3s ease,
            opacity 0.5s ease 0.1s;

Keyframe Animationen

/* Animation definieren */
@keyframes fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}

/* Mit Prozent für mehr Kontrolle */
@keyframes bounce {
    0% {
        transform: translateY(0);
    }
    50% {
        transform: translateY(-20px);
    }
    100% {
        transform: translateY(0);
    }
}

/* Komplexe Animation */
@keyframes slideInBounce {
    0% {
        transform: translateX(-100%);
        opacity: 0;
    }
    60% {
        transform: translateX(10%);
        opacity: 1;
    }
    80% {
        transform: translateX(-5%);
    }
    100% {
        transform: translateX(0);
    }
}

/* Animation anwenden */
.element {
    animation: fadeIn 0.5s ease forwards;
}

.bouncing {
    animation: bounce 1s ease infinite;
}

Animation-Properties

/* Einzelne Properties */
animation-name: fadeIn;
animation-duration: 0.5s;
animation-timing-function: ease;
animation-delay: 0.2s;
animation-iteration-count: 1;        /* Anzahl oder 'infinite' */
animation-direction: normal;         /* normal, reverse, alternate */
animation-fill-mode: forwards;       /* none, forwards, backwards, both */
animation-play-state: running;       /* running, paused */

/* Kurzform */
animation: name duration timing-function delay iteration-count direction fill-mode;
animation: fadeIn 0.5s ease 0.2s 1 normal forwards;

/* Mehrere Animationen */
animation: fadeIn 0.5s ease,
           slideIn 0.5s ease 0.2s;

Transform-Funktionen

/* Translate - Verschieben */
transform: translateX(20px);
transform: translateY(-10px);
transform: translate(20px, -10px);
transform: translateZ(50px);         /* 3D */
transform: translate3d(20px, 10px, 50px);

/* Scale - Skalieren */
transform: scale(1.5);               /* Beide Achsen */
transform: scaleX(2);
transform: scaleY(0.5);
transform: scale(1.5, 0.8);

/* Rotate - Drehen */
transform: rotate(45deg);
transform: rotateX(45deg);           /* 3D */
transform: rotateY(45deg);
transform: rotateZ(45deg);
transform: rotate3d(1, 1, 0, 45deg);

/* Skew - Verzerren */
transform: skewX(20deg);
transform: skewY(10deg);
transform: skew(20deg, 10deg);

/* Kombinieren */
transform: translateX(20px) rotate(45deg) scale(1.2);
/* ⚠️ Reihenfolge wichtig! */

/* Transform Origin */
transform-origin: center;            /* Standard */
transform-origin: top left;
transform-origin: 50% 100%;

Praktische Beispiele

/* Hover-Button mit mehreren Effekten */
.fancy-button {
    padding: 15px 30px;
    background: linear-gradient(135deg, #667eea, #764ba2);
    color: white;
    border: none;
    border-radius: 8px;
    cursor: pointer;
    transition: transform 0.2s ease,
                box-shadow 0.2s ease;
}

.fancy-button:hover {
    transform: translateY(-3px);
    box-shadow: 0 10px 25px rgba(102, 126, 234, 0.4);
}

.fancy-button:active {
    transform: translateY(-1px);
    box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4);
}

/* Loading Spinner */
@keyframes spin {
    to { transform: rotate(360deg); }
}

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

/* Pulse Effekt */
@keyframes pulse {
    0% { transform: scale(1); }
    50% { transform: scale(1.05); }
    100% { transform: scale(1); }
}

.pulse {
    animation: pulse 2s ease infinite;
}

/* Shake Effekt (für Fehler) */
@keyframes shake {
    0%, 100% { transform: translateX(0); }
    10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
    20%, 40%, 60%, 80% { transform: translateX(5px); }
}

.error-shake {
    animation: shake 0.5s ease;
}

/* Fade In Up (für Scroll-Animationen) */
@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(30px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.animate-on-scroll {
    animation: fadeInUp 0.6s ease forwards;
}

Performance-Optimierung

/* ✅ GPU-beschleunigte Properties (performant) */
transform: translateX(100px);
transform: scale(1.5);
transform: rotate(45deg);
opacity: 0.5;

/* ❌ Löst Layout/Paint aus (langsam) */
width: 200px;
height: 100px;
top: 50px;
left: 100px;
margin: 20px;
padding: 10px;
border-width: 2px;

/* ✅ will-change für Voraboptimierung */
.animated-element {
    will-change: transform, opacity;
}

/* ⚠️ will-change sparsam einsetzen! */
/* Nach Animation entfernen */

/* ✅ contain für Isolierung */
.animation-container {
    contain: layout style paint;
}

/* ✅ Hardware-Beschleunigung erzwingen */
.gpu-accelerated {
    transform: translateZ(0);
    /* oder */
    backface-visibility: hidden;
}

Animation mit JavaScript steuern

/* CSS */
.element {
    animation: slideIn 0.5s ease forwards;
    animation-play-state: paused;
}

.element.playing {
    animation-play-state: running;
}
// JavaScript
const element = document.querySelector('.element');

// Animation starten
element.classList.add('playing');

// Animation-Ende erkennen
element.addEventListener('animationend', (e) => {
    console.log('Animation beendet:', e.animationName);
});

// Transition-Ende erkennen
element.addEventListener('transitionend', (e) => {
    console.log('Transition beendet:', e.propertyName);
});

// Animation neu starten
function restartAnimation(el) {
    el.style.animation = 'none';
    el.offsetHeight; // Reflow triggern
    el.style.animation = null;
}

Reduced Motion berücksichtigen

/* Animationen für Nutzer mit Bewegungsempfindlichkeit reduzieren */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
}

/* Oder gezielt */
@media (prefers-reduced-motion: reduce) {
    .animated-element {
        animation: none;
        transition: none;
    }
}
💡 Performance-Regel: Animieren Sie nur transform und opacity für 60fps-Animationen. Diese Properties lösen kein Layout oder Paint aus. Nutzen Sie will-change sparsam und respektieren Sie prefers-reduced-motion.

Weitere Informationen

Texterstellung mit KI-Unterstützung

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
LLMs können Fehler machen. Ihre Nachrichten werden an Google Gemini weitergeleitet.
120