====== LU13d - CSS Transforms ====== Transforms sind geometrische Operationen, die das Aussehen eines Elements verändern, **ohne den Dokumentfluss zu beeinflussen** – andere Elemente rücken nicht nach. Sie werden sehr häufig innerhalb von ''@keyframes'' und Transitions eingesetzt. ===== Die vier Grundoperationen ===== /* Verschieben: x = horizontal (positiv = rechts), y = vertikal (positiv = unten) */ transform: translate(20px, 10px); transform: translateX(20px); /* nur horizontal */ transform: translateY(-10px); /* nur vertikal, nach oben */ /* Skalieren: 1 = Originalgrösse, > 1 vergrössert, < 1 verkleinert */ transform: scale(1.5); /* gleichmässig */ transform: scale(1.2, 0.8); /* horizontal × vertikal */ /* Rotieren: positive Werte = im Uhrzeigersinn, Einheit deg immer nötig */ transform: rotate(45deg); transform: rotate(-15deg); /* gegen den Uhrzeigersinn */ /* Scheren: erzeugt einen Parallelogramm-Effekt */ transform: skewX(15deg); /* untere Kante verschoben */ transform: skewY(10deg); /* rechte Kante verschoben */ ===== Mehrere Transforms kombinieren ===== Mehrere Transformationen lassen sich in einer ''transform''-Angabe kombinieren. **Die Reihenfolge beeinflusst das Ergebnis**, weil jede Transformation das Koordinatensystem für die nächste verändert: /* Erst rotieren, dann verschieben: Die Verschiebung erfolgt im bereits rotierten Koordinatensystem */ transform: rotate(45deg) translate(50px, 0); /* Erst verschieben, dann rotieren: Die Rotation erfolgt um den Ursprung, nicht um das verschobene Element */ transform: translate(50px, 0) rotate(45deg); ===== transform-origin ===== Standardmässig liegt der Ursprungspunkt aller Transformationen in der **Mitte des Elements**. Mit ''transform-origin'' lässt er sich verschieben: /* Rotation um die obere linke Ecke */ transform-origin: left top; /* Rotation um die Mitte der Oberkante */ transform-origin: center 0px; /* Rotation um einen Punkt ausserhalb des Elements */ transform-origin: 50% 150%; Der Ursprungspunkt bleibt an seiner definierten Position – er bewegt sich **nicht mit**, wenn das Element sich bewegt. ===== Transforms in Keyframe-Animationen ===== Transforms sind der häufigste Baustein in ''@keyframes'', weil der Browser sie direkt auf der Grafikkarte berechnen kann – ohne das Layout der gesamten Seite neu zu berechnen: /* Beispiel: schwebendes Element */ @keyframes bewegen-rotieren { 0%, 100% { transform: translateY(0) rotate(-3deg); } 50% { transform: translateY(-12px) rotate(5deg); } } .deko-element { animation: bewegen-rotieren 4s ease-in-out infinite; }