PFAD: ./module/css/css4/

DATEI: string(25) "00Inhaltsverzeichnis4.php"
DATEI: string(21) "22CSS-Animationen.php"
DATEI: string(26) "23AnimationenUndPraxis.php"
DATEI: string(26) "24AnimationenUndKarten.php"
DATEI: string(26) "26 2D-Transformationen.php"
DATEI: string(19) "27rotateUndskew.php"
DATEI: string(30) "28Mehrere Transformationen.php"
DATEI: string(26) "29 3D-Transformationen.php"
DATEI: string(14) "30 3D-Raum.php"
DATEI: string(22) "31 3D-AchseUndRaum.php"
DATEI: string(22) "32EinUndAusblenden.php"
DATEI: string(28) "33WürfelUndBildergalerie.php"
DATEI: string(15) "34 3D-Karte.php"

css mit Adi Prinz

Um eine frei bestimmte 3D-Achse drehen

Die Funktion rotate3d()

Mit rotate3d() kann eine Drehachse frei im dreidimensionalen Raum festgelegt werden. Dazu werden drei Zahlen fĂĽr die Richtung der Achse und anschlieĂźend der Drehwinkel angegeben.

transform: rotate3d(x, y, z, winkel);
    
Parameter Aufgabe
x Anteil der x-Achse an der Drehachse
y Anteil der y-Achse an der Drehachse
z Anteil der z-Achse an der Drehachse
winkel Drehwinkel, beispielsweise in deg, rad, grad oder turn
.element {
  transform: rotate3d(1, 1, 0, 45deg);
}
    
Die ersten drei Werte sind keine Winkel und normalerweise auch keine Längenangaben. Sie beschreiben gemeinsam einen Richtungsvektor für die Drehachse.

Bekannte Drehachsen mit rotate3d() beschreiben

Auch die Funktionen rotateX(), rotateY() und rotateZ() lassen sich mit rotate3d() ausdrĂĽcken.

Kurzschreibweise Entsprechende rotate3d()-Schreibweise Drehachse
rotateX(45deg) rotate3d(1, 0, 0, 45deg) x-Achse
rotateY(45deg) rotate3d(0, 1, 0, 45deg) y-Achse
rotateZ(45deg) rotate3d(0, 0, 1, 45deg) z-Achse
Enthält nur einer der ersten drei Werte eine 1 und die beiden anderen Werte eine 0, verläuft die Drehachse genau entlang einer der drei Hauptachsen.

Unterschiedliche Drehachsen vergleichen

In allen Beispielen beträgt der Drehwinkel 55deg. Nur der Richtungsvektor der Drehachse wird verändert.

x- und y-Achse

rotate3d(1, 1, 0)
.rotate3d-xy {
  transform:
    rotate3d(1, 1, 0, 55deg);
}
        

x- und z-Achse

rotate3d(1, 0, 1)
.rotate3d-xz {
  transform:
    rotate3d(1, 0, 1, 55deg);
}
        

Alle drei Achsen

rotate3d(1, 1, 1)
.rotate3d-xyz {
  transform:
    rotate3d(1, 1, 1, 55deg);
}
        

Das Verhältnis der Achsenwerte

Entscheidend ist das Verhältnis der ersten drei Werte zueinander. Der Browser normalisiert den Richtungsvektor vor der Berechnung der Drehung.

.element-a {
  transform: rotate3d(1, 1, 0, 45deg);
}

.element-b {
  transform: rotate3d(2, 2, 0, 45deg);
}
    

Beide Beispiele erzeugen dieselbe Drehachse, weil das Verhältnis der Werte jeweils 1 : 1 : 0 beträgt.

Richtungsvektor Bedeutung
1, 1, 0 x- und y-Achse sind gleich stark beteiligt.
2, 1, 0 Die x-Richtung ist doppelt so stark gewichtet wie die y-Richtung.
1, 2, 0 Die y-Richtung ist doppelt so stark gewichtet wie die x-Richtung.
1, 1, 1 Alle drei Achsen sind gleich stark beteiligt.
Die Werte müssen nicht auf 0 und 1 beschränkt sein. Auch negative Werte und Dezimalzahlen sind möglich.

Negative Achsenwerte und negative Winkel

Die Richtung einer Drehung kann sowohl durch einen negativen Achsenvektor als auch durch einen negativen Drehwinkel umgekehrt werden.

.element-a {
  transform: rotate3d(1, 1, 0, -45deg);
}

.element-b {
  transform: rotate3d(-1, -1, 0, 45deg);
}
    

Diese beiden Angaben beschreiben dieselbe Drehung, weil sowohl die Richtung der Achse als auch das Vorzeichen des Winkels die Drehrichtung beeinflussen.

Negative Achsenwerte sind gültig, können die Schreibweise aber schwerer verständlich machen. Für gut lesbaren CSS-Code ist ein positiver Richtungsvektor mit einem negativen Winkel häufig übersichtlicher.

Der ungĂĽltige Nullvektor

Mindestens einer der ersten drei Werte muss ungleich 0 sein. Die folgende Angabe besitzt keine gĂĽltige Drehachse:

.element {
  transform: rotate3d(0, 0, 0, 45deg);
}
    
rotate3d(0, 0, 0, 45deg) kann keine Drehung erzeugen, weil der Vektor 0, 0, 0 keine Richtung beschreibt.

Wann ist rotate3d() sinnvoll?

Für Drehungen um eine einzelne Hauptachse sind rotateX(), rotateY() und rotateZ() meistens leichter lesbar. rotate3d() wird vor allem dann verwendet, wenn eine schräg im Raum verlaufende Drehachse benötigt wird.

  • Räumlich drehende Karten und Kacheln
  • 3D-Objekte und WĂĽrfel
  • Komplexere Hover-Effekte
  • Animationen mit einer frei bestimmten Drehachse
Verwende die einfachste verständliche Schreibweise: eine einzelne Hauptachse mit rotateX(), rotateY() oder rotateZ() und frei verlaufende Achsen mit rotate3d().

Elemente im 3D-Raum skalieren

Skalierung entlang der drei Achsen

Mit scaleX(), scaleY() und scaleZ() kann ein Element entlang einer einzelnen Achse skaliert werden. Die Funktion scale3d() fasst alle drei Achsen in einer Schreibweise zusammen.

Funktion Wirkung
scaleX() Skaliert entlang der waagrechten x-Achse.
scaleY() Skaliert entlang der senkrechten y-Achse.
scaleZ() Skaliert entlang der räumlichen z-Achse.
scale3d() Skaliert entlang der x-, y- und z-Achse gleichzeitig.
.element {
  transform: scale3d(1.2, 0.8, 1.5);
}
    
Die Skalierungswerte sind einheitslose Zahlen. Werte größer als 1 vergrößern, Werte zwischen 0 und 1 verkleinern das Element entlang der jeweiligen Achse.

Skalierung entlang der z-Achse

Mit scaleZ() wird die räumliche Tiefe eines Elements oder seiner 3D-Kindelemente skaliert.

.element {
  transform: scaleZ(1.5);
}
    
  • scaleZ(1) behält die ursprĂĽngliche Tiefe bei.
  • scaleZ(2) verdoppelt die Abstände entlang der z-Achse.
  • scaleZ(0.5) halbiert die Abstände entlang der z-Achse.
  • Ein negativer Wert kehrt zusätzlich die Richtung der z-Achse um.
Bei einem flachen einzelnen Element ist scaleZ() meistens nicht unmittelbar sichtbar. Ein HTML-Element besitzt normalerweise keine eigene geometrische Tiefe, die dadurch größer werden könnte.

Warum scaleZ() allein kaum sichtbar ist

Die Breite und Höhe einer normalen Box liegen auf der x- und y-Achse. Eine Skalierung entlang der z-Achse verändert deshalb weder ihre sichtbare Breite noch ihre sichtbare Höhe.

Ohne räumliche Verschiebung

scaleZ(2)
.scale-z-only {
  transform: scaleZ(2);
}
        

Mit translateZ()

scaleZ(2) translateZ(60px)
.scale-z-translate {
  transform:
    scaleZ(2)
    translateZ(60px);
}
        
Im zweiten Beispiel wirkt scaleZ(2) auf die nachfolgende Verschiebung entlang der z-Achse. Dadurch entsteht effektiv ein größerer Abstand zum Betrachter.

Alle drei Achsen mit scale3d() skalieren

Die Funktion scale3d() erwartet drei Zahlen in der Reihenfolge x, y und z:

transform: scale3d(x, y, z);
    
Parameter Aufgabe
x Skalierungsfaktor entlang der x-Achse
y Skalierungsfaktor entlang der y-Achse
z Skalierungsfaktor entlang der z-Achse
.element {
  transform: scale3d(1.4, 0.8, 2);
}
    

Diese Angabe bedeutet:

  • Vergrößerung der Breite auf 140 %,
  • Verkleinerung der Höhe auf 80 % und
  • Verdoppelung der räumlichen Abstände entlang der z-Achse.

Unterschiedliche Skalierungen vergleichen

Breiter

x = 1.4
.scale3d-wide {
  transform:
    scale3d(1.4, 1, 1);
}
        

Höher

y = 1.4
.scale3d-high {
  transform:
    scale3d(1, 1.4, 1);
}
        

Breiter und höher

x und y = 1.3
.scale3d-large {
  transform:
    scale3d(1.3, 1.3, 1);
}
        
Der dritte Wert ist in diesen Beispielen 1. Dadurch wird die z-Achse nicht verändert.

scale3d() und die einzelnen Funktionen vergleichen

Einzelfunktion Entsprechende scale3d()-Schreibweise
scaleX(1.5) scale3d(1.5, 1, 1)
scaleY(1.5) scale3d(1, 1.5, 1)
scaleZ(1.5) scale3d(1, 1, 1.5)
scale(1.5) scale3d(1.5, 1.5, 1)
scale(1.5, 0.8) scale3d(1.5, 0.8, 1)
Werden nur Breite und Höhe verändert, sind scale(), scaleX() und scaleY() meistens leichter verständlich. scale3d() ist besonders bei kombinierten räumlichen Transformationen sinnvoll.

Null und negative Skalierungswerte

Der Wert 0 reduziert die Ausdehnung entlang der betreffenden Achse vollständig. Negative Werte skalieren das Element und spiegeln es zusätzlich entlang dieser Achse.

Waagrecht gespiegelt

Spiegelung
.scale3d-mirror-x {
  transform:
    scale3d(-1, 1, 1);
}
        

Senkrecht gespiegelt

Spiegelung
.scale3d-mirror-y {
  transform:
    scale3d(1, -1, 1);
}
        
Bei negativen Skalierungswerten wird auch der Inhalt gespiegelt. Texte sind dadurch normalerweise nicht mehr angenehm lesbar.

Reihenfolge von Skalierung und Verschiebung

Wird eine Skalierung mit einer Verschiebung kombiniert, beeinflusst die Reihenfolge der Funktionen das Ergebnis.

.element-a {
  transform:
    scaleZ(2)
    translateZ(60px);
}

.element-b {
  transform:
    translateZ(60px)
    scaleZ(2);
}
    

Im ersten Beispiel wird die nachfolgende Verschiebung entlang der z-Achse durch scaleZ(2) mit skaliert. Im zweiten Beispiel wird zuerst verschoben; die anschließende z-Skalierung verändert diese bereits ausgeführte Verschiebung nicht auf dieselbe Weise.

Transformationsfunktionen sollten nicht beliebig vertauscht werden. Auch wenn dieselben Funktionen und Werte verwendet werden, kann eine andere Reihenfolge zu einem deutlich anderen Ergebnis fĂĽhren.