transform 2D

Zuletzt aktualisiert am 15. Februar 2026

Mit transform veränderst du die visuelle Darstellung eines Elements, ohne das Layout zu beeinflussen. Du kannst Elemente verschieben (translate), drehen (rotate), skalieren (scale) oder verzerren (skew), alles rein visuell. Das Element behält seinen ursprünglichen Platz im Dokumentfluss, nur die gerenderte Darstellung ändert sich. Transformationen lassen sich kombinieren und sind GPU-beschleunigt, was sie zur ersten Wahl für performante Animationen und Hover-Effekte macht. Mit transform-origin bestimmst du den Bezugspunkt der Transformation.

Syntax
transform: <funktion> [<funktion>]*
Initialwert
none
Vererbt
Nein
Animierbar
Ja

Grundlagen

CSS-Transformationen verändern nur die visuelle Darstellung, der eigentliche Platz im Layout bleibt unverändert. Wenn du ein Element mit translate verschiebst, fließt der nachfolgende Inhalt nicht nach, als wäre das Element noch an seiner Ursprungsposition. Deshalb eignen sich Transformationen perfekt für Animationen und Hover-Effekte, weil sie keinen Reflow auslösen.

Alle 2D-Transformationsfunktionen arbeiten in einem zweidimensionalen Koordinatensystem: die X-Achse zeigt nach rechts, die Y-Achse nach unten. Der Ursprungspunkt (0, 0) liegt standardmäßig in der Mitte des Elements: das ist der Dreh- und Angelpunkt für Rotationen und Skalierungen.

Mehrere Transformationen kannst du in einer einzigen transform-Deklaration kombinieren. Die Reihenfolge ist dabei wichtig: transform: rotate(45deg) translate(100px) ergibt ein anderes Ergebnis als transform: translate(100px) rotate(45deg), weil jede Funktion das Koordinatensystem für die nächste verändert.

Syntax & Werte

Verschieben (translate)

Wert Beschreibung Beispiel
translateX(x) Verschiebt das Element horizontal. Positive Werte nach rechts, negative nach links. transform: translateX(50px);
translateY(y) Verschiebt das Element vertikal. Positive Werte nach unten, negative nach oben. transform: translateY(-20px);
translate(x, y) Verschiebt in beide Richtungen gleichzeitig. Zweiter Wert optional (Standard: 0). transform: translate(50px, -20px);

Drehen (rotate)

Wert Beschreibung Beispiel
rotate(winkel) Dreht das Element um den Mittelpunkt. Positive Werte im Uhrzeigersinn, negative gegen den Uhrzeigersinn. transform: rotate(45deg);

Skalieren (scale)

Wert Beschreibung Beispiel
scaleX(faktor) Skaliert nur horizontal. 2 = doppelt so breit, 0.5 = halb so breit. transform: scaleX(1.5);
scaleY(faktor) Skaliert nur vertikal. transform: scaleY(0.8);
scale(x, y) Skaliert in beide Richtungen. Ein Wert = gleichmäßig skalieren. transform: scale(1.2);

Verzerren (skew)

Wert Beschreibung Beispiel
skewX(winkel) Verzerrt horizontal. Positive Werte neigen nach links, negative nach rechts. transform: skewX(15deg);
skewY(winkel) Verzerrt vertikal. transform: skewY(5deg);
skew(x, y) Verzerrt in beide Richtungen gleichzeitig. transform: skew(15deg, 5deg);

Matrix

Wert Beschreibung Beispiel
matrix(a, b, c, d, tx, ty) Kombiniert alle 2D-Transformationen in einer 2×3-Matrix. Wird hauptsächlich von Tools und Bibliotheken generiert. transform: matrix(1, 0, 0, 1, 50, 0);

transform-origin

Wert Beschreibung Beispiel
center Mittelpunkt des Elements (Standard). transform-origin: center;
top left | top right | bottom left | bottom right Ecken des Elements als Bezugspunkt. transform-origin: top left;
<länge> <länge> Exakte Position in Pixeln oder anderen Einheiten. transform-origin: 0 0;
<prozent> <prozent> Position relativ zur Elementgröße. 0% 0% = oben links, 100% 100% = unten rechts. transform-origin: 50% 50%;

Beispiele

Translate-Verschiebung

Elemente werden beim Hover verschoben. translate ist GPU-beschleunigt und löst keinen Reflow aus, perfekt für Hover-Effekte.

Translate-Varianten
.box-1:hover { transform: translateX(20px); }
.box-2:hover { transform: translateY(-15px); }
.box-3:hover { transform: translate(10px, -10px); }

Rotate-Drehungen

Elemente drehen sich beim Hover um ihren Mittelpunkt. Positive Werte drehen im Uhrzeigersinn.

Rotate-Varianten
.box-1:hover { transform: rotate(45deg); }
.box-2:hover { transform: rotate(180deg); }
.box-3:hover { transform: rotate(-90deg); }

Scale-Hover

Elemente vergrößern sich beim Hover. scale eignet sich für Button-Feedback und Card-Interaktionen.

Scale-Hover auf Cards
.card {
  transition: transform 0.3s ease;
}

.card:hover {
  transform: scale(1.08);
}

Kombinierte Transformationen

Mehrere Funktionen in einer transform-Deklaration erzeugen komplexe Effekte. Die Reihenfolge beeinflusst das Ergebnis.

Kombinierte Transforms
.box-1:hover {
  transform: rotate(10deg) scale(1.15);
}

.box-2:hover {
  transform: translateY(-10px) rotate(-5deg) scale(1.05);
}

transform-origin Vergleich

Der Drehpunkt bestimmt, um welchen Punkt das Element rotiert. Standard ist die Mitte, aber du kannst jede Ecke oder Position wählen.

transform-origin Vergleich (gelber Punkt = Drehpunkt)
.box-1 {
  transform-origin: center; /* Standard */
}

.box-2 {
  transform-origin: top left;
}

.box-3 {
  transform-origin: bottom right;
}

.box:hover {
  transform: rotate(45deg);
}

Barrierefreiheit

Transformierte Elemente behalten ihre Position im Accessibility-Tree: ein visuell verschobenes Element wird von Screenreadern an seiner ursprünglichen DOM-Position vorgelesen. Wenn du Elemente mit translate außerhalb des sichtbaren Bereichs verschiebst, bleiben sie für Screenreader trotzdem vorhanden, was verwirrend sein kann.

Respektiere prefers-reduced-motion für animierte Transformationen. Nutzer mit vestibulären Störungen können durch rotierende oder sich schnell bewegende Elemente Schwindel bekommen:

@media (prefers-reduced-motion: reduce) {
  * {
    transform: none !important;
    transition-duration: 0.01ms !important;
  }
}

Skalierte Elemente (scale) können Text unleserlich machen, wenn sie zu klein skaliert werden. Stelle sicher, dass interaktive Elemente auch nach der Transformation eine ausreichende Touch-Target-Größe von mindestens 44×44px behalten.

Häufige Fehler

  • transform auf Inline-Elemente wie <span> oder <a> anwenden: Inline-Elemente ignorieren transform. Setze display: inline-block oder display: block, damit es funktioniert.
  • Die Reihenfolge der Funktionen ignorieren. rotate(45deg) translate(100px) verschiebt entlang der rotierten Achse, translate(100px) rotate(45deg) verschiebt zuerst horizontal und dreht dann.
  • transform: translate() und transform: rotate() getrennt deklarieren: die zweite Deklaration überschreibt die erste. Kombiniere sie in einer: transform: translate(50px) rotate(45deg).
  • Zu aggressive scale-Werte bei Hover. scale(1.5) sieht bei kleinen Icons okay aus, bei großen Cards wirkt es übertrieben. Halte Hover-Scales bei 1.02 bis 1.1 für subtile Effekte.
  • Vergessen, dass transformierte Elemente einen neuen Stacking-Context erzeugen. Das kann z-index-Reihenfolgen unbeabsichtigt verändern.

Browser-Kompatibilität

transform und transform-origin werden von allen modernen Browsern vollständig unterstützt. Die individuellen Properties translate, rotate und scale (ohne transform-Wrapper) sind ab 2022 in allen Browsern verfügbar.

ClientUnterstützungHinweise
ChromeKomplett
FirefoxKomplett
SafariKomplett
EdgeKomplett
OperaKomplett

Email-Kompatibilität

transform funktioniert in HTML-Emails kaum. Nur Apple Mail und Thunderbird unterstützen es zuverlässig.

ClientUnterstützungHinweise
Apple MailKomplett
GmailKeinetransform wird komplett entfernt
OutlookKeineKein Support für CSS transform
ThunderbirdKomplett
Yahoo MailKeinetransform wird ignoriert

Verwandte Eigenschaften

Bleib auf dem Laufenden

Erhalte neue Inhalte direkt in dein Postfach

Mit der Anmeldung akzeptierst du unsere Datenschutzerklärung. Du kannst dich jederzeit über den Link in den E-Mails wieder abmelden.

Was erwartet dich?

Neue Artikel & Videos

Wenn ich was Neues veröffentliche, erfährst du's hier zuerst.

Plattform & Kurs-Updates

Neue Kurse, Referenz-Updates und gelegentlich Sonderpreise zum Launch.

Einmal die Woche in deinem Postfach

Kurz, auf den Punkt, kein Spam.