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.
/* 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 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);
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 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; }