Skip to main content
Dublin Library

The Publishing Project

Individual transform properties

 

To apply transforms to an element, use the CSS transform Property. The property accepts one or more s which get applied one after the other.

.target {
  transform: translateX(50%) rotate(30deg) scale(1.2);
}
CSS

One issue with this is that, if we want to update one of the properties then we have to update all of them. For example, if we want to change scale to 1.5 we need the following:

.target:hover {
  transform: 
    translateX(50%)
    rotate(30deg)
    scale(2);
}
CSS

This is tedious and error-prone, particularly if you create many of these variations.

Chrome 104, Edge 104, Firefox 72 and Safari 14.1 provide an alternative syntax to write transforms where some of the transform functions can be split out into their own attributes.

We could write the original transformation like this:

.target {
  translate: 50% 0;
  rotate: 30deg;
  scale: 1.2;
}
CSS

The hover declaration can also be simplified by only changing the declaration we need to, rather than all of them

.target:hover {
  scale: 2;
}
CSS

There are a few caveats to using transform functions:

Order Matters #

The execution order for individual transform functionss is different than the order of execution inside a transform function.

Inside a transform function, the children execute from left to right.

The example below will execute in this order:

  1. scale
  2. translateX
  3. rotate
.target {
  transform
    scale(1.2) 
    translateX(50%)
    rotate(30deg)

}
CSS

The individual function equivalent will execute the functions in a fixed order, regardless of the order they appear in:

  1. translate
  2. rotate
  3. scale
.target {
  scale: 1.2;
  translate: 50% 0;
  rotate: 30deg:
}
CSS

See how the transformation matrix should be calculated. for more information.

Only a subset of transform functions work on their own #

Only the translate, rotate, and scale transform functions will work independently.

This means that more complex animations will still requite the transform function.

See Individual Transform Properties: the translate, scale, and rotate properties

The syntax for translate() is different #

Since we don't have access to the axis-specific functions (translateX, translateY and translateZ), we use a three-parameter version of translate. Each value represents the x, y, and z axes.

Edit on Github