transform-origin
Overview
The transform-origin property determines the reference point for an element's transformations in both 2D and 3D space. By modifying these coordinates, you can alter the pivot point around which transformations such as rotation and scaling occur, relative to the element's dimensions and position. In combination with other transformation properties, transform-origin contributes to creating diverse and complex visual effects.
Examples and Usage
Let's demonstrate the impact of the transform-origin property on an element's transformations, such as rotation. We'll showcase the usage of keywords, length, and percentage values for defining the origin point.
HTML Structure
We'll be using nested div elements where each inner div has its own class so we can show the different transform-origin effects.
<div class="container">
<div class="wrap">
<div class="element element-1">
50% 50% (default)
</div>
</div>
<div class="wrap">
<div class="element element-2">
bottom right
</div>
</div>
<div class="wrap">
<div class="element element-3">
10% 45%
</div>
</div>
<div class="wrap">
<div class="element element-4">
90px 30px
</div>
</div>
</div>
CSS Styling
Now, let's apply various transform-origin values to the elements in our example and see how their transformation behavior changes. In addition, we're also styling the general appearance of these elements for better visualization.
body {
/* Basic styling for the body element */
background-color: #FFFFFF;
color: #390d0d;
font-size: 16px;
font-family: 'UI Monospace', monospace;
}
.container {
/* Centered container with a max-width for better layout */
margin: 40px auto;
max-width: 800px;
}
.wrap {
/* Each wrap div has a width, height, and a centered margin for spacing */
width: 150px;
height: 150px;
border: 1px solid black;
display: inline-block;
margin: 100px;
}
.element {
/* Each element div is rotated 60 degrees around a pivot point */
width: 150px;
height: 150px;
position: relative;
color: white;
text-align: center;
line-height: 150px;
transform: rotate(60deg)
}
.element-1 {
/* The default transform-origin is in the center (50% 50%) */
background-color: red;
}
.element-2 {
/* The transform-origin is in the bottom right corner */
background-color: green;
transform-origin: bottom right;
}
.element-3 {
/* The transform-origin is 10% from the left and 45% from the top */
background-color: orange;
transform-origin: 10% 45%;
}
.element-4 {
/* The transform-origin is 90px from the left and 30px from the top */
background-color: blue;
transform-origin: 90px 30px;
}
In our example above, we observe the effect of the transform-origin property on the rotation of four distinct elements, each with a unique class and transform-origin value:
For
.element-1, the default value of50% 50%places the pivot point at the center of the element, causing it to rotate around its own center.For
.element-2, the keyword valuebottom rightmoves the pivot point to the bottom right corner of the element, changing the rotation to occur around that corner.For
.element-3, the percentage value10% 45%sets the pivot point 10% from the left and 45% from the top of the element, making the element rotate around that specific point.For
.element-4, the length value90px 30pxplaces the pivot point 90 pixels from the left and 30 pixels from the top of the element, resulting in rotation around that exact point.
Note that this property can be used in conjunction with other transform functions, such as scale, skew, and translate.
Values
The transform-origin property accepts the following values:
| Value | Description |
|---|---|
| x-axis | Sets the origin of transformation along the x-axis. It can take the following values: left, center, right, a specific length (like 20px), or a percentage (like 50%). |
| y-axis | Sets the origin of transformation along the y-axis. It can take the following values: top, center, bottom, a specific length (like 20px), or a percentage (like 50%). |
| z-axis (for 3D transformations) | Sets the origin of transformation along the z-axis. It can take only length values (like 20px). |
Note: When only one value is provided, it applies to both the x and y axes. If three values are provided, they apply to the x, y, and z axes in that order. Moreover, the
transform-originproperty doesn't affect the actual position of the element, only the point around which transformations occur.
Associated Properties
transformtransform-styleperspective-originperspective
Tips and Tricks
The
transform-originproperty doesn't inherit from its parent element. If you want a child element to share the same transform-origin as its parent, you must explicitly set it.Remember that the initial value for
transform-originis50% 50%, which places the origin at the center of the element.The order of
x-offsetandy-offsetvalues only matters when using mixed keywords and length values. For example,transform-origin: left bottom;andtransform-origin: bottom left;result in different origins.For 3D transforms, the third value in
transform-originspecifies the depth.Keywords can be particularly useful when you want to set the origin relative to the element's dimensions, rather than in fixed units.
Avoid using percentages for
z-offset; it will make the statement invalid. Use a<length>instead.
Browser Compatibility
Older versions of Chrome, Safari, Firefox, Opera, and IE require vendor prefixes for proper functioning. (see more in Useful Resources below)
| Browser | Chrome | Edge | Safari | Firefox | Opera | Internet Explorer |
|---|---|---|---|---|---|---|
| Support | Yes* | Yes* | Yes* | Yes* | Yes* | Yes* |
Caution: Internet Explorer support data may be incorrect since MDN browser-compat-data no longer updates it. Also, early Edge versions used EdgeHTML, leading to mismatched version numbers. From version 79, Edge uses Chromium with matching version numbers.
Useful Resources
CSS Transforms Module Level 1 Specification - transform-origin