W3cubDocs

/CSS

transform

The transform CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.

If the property has a value different than none, a stacking context will be created. In that case, the object will act as a containing block for any position: fixed elements that it contains.

Only elements positioned by the box model can be transformed. As a rule of thumb, an element is positioned by the box model if it has display: block.

Syntax

/* Keyword values */
transform: none;

/* Function values */
transform: matrix(1.0, 2.0, 3.0, 4.0, 5.0, 6.0);
transform: translate(12px, 50%);
transform: translateX(2em);
transform: translateY(3in);
transform: scale(2, 0.5);
transform: scaleX(2);
transform: scaleY(0.5);
transform: rotate(0.5turn);
transform: skew(30deg, 20deg);
transform: skewX(30deg);
transform: skewY(1.07rad);
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
transform: translate3d(12px, 50%, 3em);
transform: translateZ(2px);
transform: scale3d(2.5, 1.2, 0.3);
transform: scaleZ(0.3);
transform: rotate3d(1, 2.0, 3.0, 10deg);
transform: rotateX(10deg);
transform: rotateY(10deg);
transform: rotateZ(10deg);
transform: perspective(17px);

/* Multiple function values */
transform: translateX(10px) rotate(10deg) translateY(5px);

/* Global values */
transform: inherit;
transform: initial;
transform: unset;

The transform property may be specified as either the keyword value none or as one or more <transform-function> values.

Values

<transform-function>
One or more of the CSS transform functions to be applied. The transform functions are multiplied in order from left to right, meaning that composite transforms are effectively applied in order from right to left.
none
Specifies that no transform should be applied.

Formal syntax

none | <transform-list>

where
<transform-list> = <transform-function>+

where
<transform-function> = <matrix()> | <translate()> | <translateX()> | <translateY()> | <scale()> | <scaleX()> | <scaleY()> | <rotate()> | <skew()> | <skewX()> | <skewY()> | <matrix3d()> | <translate3d()> | <translateZ()> | <scale3d()> | <scaleZ()> | <rotate3d()> | <rotateX()> | <rotateY()> | <rotateZ()> | <perspective()>

where
<matrix()> = matrix( <number> [, <number> ]{5,5} )
<translate()> = translate( <length-percentage> [, <length-percentage> ]? )
<translateX()> = translateX( <length-percentage> )
<translateY()> = translateY( <length-percentage> )
<scale()> = scale( <number> [, <number> ]? )
<scaleX()> = scaleX( <number> )
<scaleY()> = scaleY( <number> )
<rotate()> = rotate( <angle> )
<skew()> = skew( <angle> [, <angle> ]? )
<skewX()> = skewX( <angle> )
<skewY()> = skewY( <angle> )
<matrix3d()> = matrix3d( <number> [, <number> ]{15,15} )
<translate3d()> = translate3d( <length-percentage> , <length-percentage> , <length> )
<translateZ()> = translateZ( <length> )
<scale3d()> = scale3d( <number> , <number> , <number> )
<scaleZ()> = scaleZ( <number> )
<rotate3d()> = rotate3d( <number> , <number> , <number> , <angle> )
<rotateX()> = rotateX( <angle> )
<rotateY()> = rotateY( <angle> )
<rotateZ()> = rotateZ( <angle> )
<perspective()> = perspective( <length> )

where
<length-percentage> = <length> | <percentage>

Examples

HTML

<div>Transformed element</div>

CSS

div {
  border: solid red;
  transform: translate(30px, 20px) rotate(20deg);
  width: 140px;
  height: 60px;
}

Result

Please see Using CSS transforms and <transform-function> for more examples.

Specifications

Specification Status Comment
CSS Transforms Level 2
The definition of 'transform' in that specification.
Editor's Draft Adds 3D transform functions.
CSS Transforms Level 1
The definition of 'transform' in that specification.
Working Draft Initial definition.
Initial value none
Applies to transformable elements
Inherited no
Percentages refer to the size of bounding box
Media visual
Computed value as specified, but with relative lengths converted into absolute lengths
Animation type a transform
Canonical order the unique non-ambiguous order defined by the formal grammar
Creates stacking context yes

Browser compatibilityUpdate compatibility data on GitHub

Desktop
Chrome Edge Firefox Internet Explorer Opera Safari
Basic support 36
36
Yes
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
12
Prefixed
12
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
16
16
49
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
44
Prefixed Disabled
Prefixed Implemented with the vendor prefix: -webkit-
Disabled From version 44: this feature is behind the layout.css.prefixes.webkit preference (needs to be set to true). To change preferences in Firefox, visit about:config.
10
10
Internet Explorer does not support the global values initial and unset.
11
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
9
Prefixed
Prefixed Implemented with the vendor prefix: -ms-
Internet Explorer 5.5 or later supports a proprietary Matrix Filter which can be used to achieve a similar effect.
12.1
12.1
15
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
10.5 — 15
Prefixed
Prefixed Implemented with the vendor prefix: -o-
9
9
3.1
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
3D support 12 12 10 10
10
Internet Explorer 9.0 or earlier has no support for 3D transforms. Mixing 3D and 2D transform functions, such as -ms-transform:rotate(10deg) translateZ(0);, will prevent the entire property from being applied.
15 4
Mobile
Android webview Chrome for Android Edge Mobile Firefox for Android Opera for Android iOS Safari Samsung Internet
Basic support 2
Prefixed
2
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
Android 2.3 has a bug where input forms will "jump" when typing, if any container element has a -webkit-transform.
Yes
Prefixed
Yes
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
Yes
Prefixed
Yes
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
16
16
49
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
44
Prefixed Disabled
Prefixed Implemented with the vendor prefix: -webkit-
Disabled From version 44: this feature is behind the layout.css.prefixes.webkit preference (needs to be set to true). To change preferences in Firefox, visit about:config.
11.5
Prefixed
11.5
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
9
9
3.2
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
Yes
3D support 3
Prefixed
3
Prefixed
Prefixed Implemented with the vendor prefix: -webkit-
Yes Yes Yes 22 3.2 Yes

See also

© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/transform