Making elements look different under certain conditions has always been possible in CSS, initiated by simple pseudo-classes like :hover. CSS transforms, coupled with keyframe animations and transitions, simply extend this capability into movement.

This ability runs up against traditional uses of and Flash, and is beginning to supplement and replace both in these areas. As a result, JavaScript is slowly being shifted back to where it is most appropriate: in browser interaction and scripting, rather than appearance and effects.

Transforms are officially still in working draft status at the W3C. All modern browser versions use the established spec; Safari 8 (mobile and desktop), IE9 and Android 4.4.4 (and earlier) use vendor prefixes on the property. The base transformations are rotate, skew, scale and translate, with a matrix property to allow all four transformations to be implemented at once. In many ways, scale and translate are just handy alternatives to manipulating the properties left, top, right, bottom, width and height, but skew and rotate are completely new:

By default, transforms take place from the computed centre of an element. In order to change this, you must alter the transform-origin property.

To create a transformation, use the transform property and attach the transform you wish to use, with the appropriate values in parentheses:

body { transform: rotate(9deg); }

There are also 3D CSS transforms, which are the subject of an entire reading list.