Bert Bos | CSS masterclass – Amsterdam 2012
To use the transform 3d keywords, we need an ancestor with a 3d rendering context.
.container { perspective: 500px; } .container .transformed_rotate_x { transform: rotatex(50deg); }
The value of the perspective represents the distance beetween the user and the screen.
From the demo:
.transformed_rotate_y:target{ transform: rotateY(50deg); } .transformed_rotate_x:target { transform: rotateX(50deg); } .transformed_rotate_x_y:target { transform:rotateX(50deg) rotateY(50deg); }
If a transformed element has a child itself transformed, the parent should preserve the 3D context for its children with 'transform-style: preserve-3d'
From the demo:
.parent { transform: rotateY(50deg); transform-style: preserve-3d } .yellow_child { transform: rotateX(50deg) }
TranslateY and translateX are 2D transforms. Only translateZ uses the 3D context.
.transformed_translate_y:target { transform:translateY(40px) } .transformed_translate_x:target { transform: translateX(40px) } .transformed_translate_xy:target { transform:translateY(40px) translateX(20px) } .transformed_translate_z { transform:translateZ(80px) }
Changing the perspective origin
(Like in a renaissance painting, we can change the vanishing point)
From the demo:
.container.un { perspective-origin: 50% 50% /* default */ } .container.deux { perspective-origin: 0 50%; }
From the demo:
.container { perspective: 500px; transform-style: preserve-3d; perspective-origin: 65% 10%; } .child { transform-origin:top left; transform: rotateX(90deg); transition:height 1s ease; /* movement */ } .container:hover .child { height:472px; transition:height 1s ease; }
transform-origin:top right;
transform-origin:top left;
translateZ:200px;
Turn around an arbitrary axis (x,y,z)
.rotated { transform: rotate3d(1, -1, 0, 60deg); }
What's that fish!?
.fish{ translate3d(-10px,40px,100px); } .open-face{ transform: rotatez(-50deg) rotatey(90deg); }