Ein Würfel besteht aus einem gemeinsamen 3D-Container und sechs
Flächen. Jede Fläche wird gedreht und anschließend entlang der
z-Achse an ihre räumliche Position verschoben.
Fläche
Drehung
Verschiebung
Vorderseite
rotateY(0)
translateZ(75px)
Rückseite
rotateY(180deg)
translateZ(75px)
Rechte Seite
rotateY(90deg)
translateZ(75px)
Linke Seite
rotateY(-90deg)
translateZ(75px)
Oberseite
rotateX(90deg)
translateZ(75px)
Unterseite
rotateX(-90deg)
translateZ(75px)
Der Würfel ist 150px breit und hoch. Die Flächen werden
deshalb um die halbe Kantenlänge – also 75px – vom
Mittelpunkt entfernt.
HTML-Struktur des Würfels
Der äußere Bereich stellt die Perspektive bereit. Darin befindet sich
der eigentliche Würfel mit seinen sechs Flächen.
Alle Flächen sind Kindelemente desselben 3D-Containers. Durch
transform-style: preserve-3d bleiben ihre unterschiedlichen
räumlichen Positionen erhalten.
Die sechs Flächen positionieren
Die Ausgangsfläche liegt in der x-y-Ebene. Für die Vorderseite genügt
deshalb eine Verschiebung entlang der z-Achse.
Die negative Drehung um die x-Achse richtet die Fläche als
Unterseite aus.
Warum zuerst gedreht und dann verschoben wird
CSS-Transformationsfunktionen werden als zusammengehörige
Transformationsliste ausgewertet. Die Verschiebung bezieht sich dabei
auf das durch die Drehung ausgerichtete Koordinatensystem der Fläche.
Die Fläche wird seitlich ausgerichtet. Anschließend bewegt
translateZ(75px) sie entlang ihrer nun seitlich zeigenden
lokalen z-Achse an die rechte Würfelseite.
Werden Drehung und Verschiebung vertauscht, entsteht eine andere
Position. Bei zusammengesetzten 3D-Objekten ist die Reihenfolge der
Transformationsfunktionen deshalb besonders wichtig.
Die halbe Kantenlänge berechnen
Jede Fläche muss vom Mittelpunkt des Würfels bis zu seiner Außenseite
verschoben werden. Dieser Abstand entspricht der halben Kantenlänge.
Kantenlänge: 150px
Abstand zum Mittelpunkt: 150px / 2 = 75px
Wird die Größe des Würfels geändert, muss auch der Wert für
translateZ() angepasst werden.
Kantenlänge
translateZ()
100px
50px
150px
75px
200px
100px
Sind Kantenlänge und Verschiebung nicht aufeinander abgestimmt,
entstehen Lücken zwischen den Flächen oder die Flächen überschneiden
sich.
Die Würfelgröße mit einer CSS-Variable steuern
Statt Größe und Verschiebung mehrfach einzutragen, kann eine
benutzerdefinierte CSS-Eigenschaft verwendet werden.
Wird --cube-size geändert, passen sich die Kantenlänge und
der Abstand der Flächen automatisch an.
Den gesamten Würfel animieren
Die Animation wird auf den gemeinsamen Würfelcontainer gelegt. Die
sechs Flächen behalten dabei ihre festen Positionen innerhalb des
Würfels.
.cube-animation {
animation: rotate-cube 10s linear infinite;
}
@keyframes rotate-cube {
from {
transform:
rotateX(-20deg)
rotateY(0);
}
to {
transform:
rotateX(340deg)
rotateY(360deg);
}
}
Während der Animation wird der Würfel einmal vollständig um die x- und
y-Achse gedreht.
Die einzelnen Flächen benötigen keine eigene Animation. Sie bewegen
sich gemeinsam mit ihrem Elternelement.
Transparente und undurchsichtige Flächen
Leicht transparente Hintergründe machen auch weiter hinten liegende
Flächen sichtbar. Dadurch lässt sich der räumliche Aufbau des Würfels
besonders gut erkennen.
Hintere Flächen scheinen teilweise durch die vorderen Flächen
hindurch.
Undurchsichtig
.cube-face {
background-color: #0d6efd;
}
Nur jene Flächen sind sichtbar, die aus der aktuellen Perspektive
nicht verdeckt werden.
Wird opacity auf dem gesamten Würfelcontainer verwendet,
kann das die 3D-Darstellung beeinflussen. Transparente Farben direkt
auf den einzelnen Flächen sind für dieses Beispiel besser geeignet.
Rückseiten der Würfelflächen
Bei einem geschlossenen Würfel sind normalerweise die Außenseiten der
Flächen sichtbar. Mit backface-visibility kann gesteuert
werden, ob die Rückseiten zusätzlich dargestellt werden.
.cube-face {
backface-visibility: hidden;
}
Mit hidden werden die nach innen gerichteten Rückseiten
nicht dargestellt.
Mit visible können die Flächen auch von ihrer Rückseite
sichtbar sein.
Für einen normalen geschlossenen Würfel ist
backface-visibility: hidden meistens sinnvoll.
Animation und reduzierte Bewegung
Dauerhafte Drehbewegungen können für manche Benutzer unangenehm sein.
Die Einstellung prefers-reduced-motion sollte deshalb
berücksichtigt werden.
Die Animation dient nur zur Veranschaulichung. Wichtige Inhalte dürfen
nicht davon abhängig sein, dass der Benutzer den drehenden Würfel
beobachten oder bedienen kann.
Eine drehbare 3D-Bildergalerie erstellen
Aufbau der 3D-Bildergalerie
Die Galerie besteht aus einem äußeren Perspektivbereich, einem drehbaren
3D-Container und mehreren Bildern. Jedes Bild wird um die y-Achse gedreht
und anschließend entlang der z-Achse nach außen verschoben.
Die Dateinamen und Alternativtexte der Bilder müssen an die tatsächlich
verwendeten Bilddateien angepasst werden.
Vollständige drehbare Bildergalerie
Die sechs Bilder werden gleichmäßig auf einem Kreis verteilt. Bewege den
Mauszeiger über die Galerie oder setze mit der Tastatur den Fokus darauf,
um die Animation anzuhalten.
BergeSeeWaldKüsteSonnenuntergangWinter
Alle Bilder bleiben durch
transform-style: preserve-3d räumlich angeordnet. Animiert
wird nur der gemeinsame Galeriecontainer.
Den Winkel der Bilder berechnen
Ein vollständiger Kreis besitzt 360deg. Bei sechs Bildern
beträgt der Abstand zwischen zwei Bildern daher:
Jedes Bild benötigt einen passenden und aussagekräftigen
alt-Text.
Die Galerie muss auch ohne Animation verständlich bleiben.
Der Tastaturfokus muss deutlich sichtbar sein.
Wichtige Inhalte dürfen nicht ausschließlich auf verdeckten
Bildflächen stehen.
Die 3D-Darstellung ist ein visueller Zusatzeffekt. Bildbeschreibungen und
wichtige Informationen müssen unabhängig von der Animation zugänglich
bleiben.