The translate property moves an element along the X, Y, and optionally Z axes — independently of the transform property.
The initial value is none. It is not inherited. A non-none value creates a stacking context. Pair it with rotate and scale for clear UI motion, or keep using transform: translate() when you need one combined list.
Baseline · Widely available.
Not deprecated. Standard-track individual transform property. Fixed apply order with siblings: translate → rotate → scale → then transform.
X % = own width.50% of an 80px-wide box is 40px right.
Y % = own height.-25% of 80px is 20px up.
Not the parent. Percentages do not use the containing block size.
Centering tip. Patterns like -50% -50% often help center overlays with absolute positioning.
Edge Cases & Pitfalls
If the box moves but layout looks “empty,” check these first.
layout
Visual move only
Neighbors do not reflow. Gaps and overlap can appear because the original box still occupies space.
percent
% is relative to itself
X % uses the element’s width; Y % uses its height — not the parent’s size.
z
Z cannot be a percentage
A third value must be a length (px, rem, …). Percentage on Z is invalid.
order
Fixed order with rotate / scale
Individual transforms always apply as translate → rotate → scale, then any transform list. Declaration order does not change that.
stack
Creates a stacking context
Any value other than none creates a stacking context, which can affect how z-index and overlays layer.
Compatibility
Browser Support
translate is a browser CSS property for individual transforms. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available
translate
Individual translate is widely supported in modern browsers (from about Chrome/Edge 104, Firefox 72, Safari 14.1). Prefer unprefixed syntax.
95%Core support
Google Chrome104+
Full support
Mozilla Firefox72+
Full support
Apple Safari14.1+
Full support
Microsoft Edge104+
Full support
Opera90+
Full support
Samsung Internet20+
Full support
Internet Explorer—
No support
translateWidely supported
Bottom line: Safe to teach for modern browsers. IE has no support — use transform: translate() if you must support legacy engines. It is not a runtime API.
Remember
Key Takeaways
Role: move an element on X / Y / Z without changing flow.
Initial value:none — no offset.
vs transform: standalone move property; pairs cleanly with rotate and scale.
% tip: based on the element’s own size; Z must be a length.
One line:translate shifts where an element is painted; layout space stays put.
Frequently Asked Questions
It moves an element visually along the X, Y, and optionally Z axes without changing document flow. It is an individual transform property separate from transform.
The initial value is none — no translation is applied.
translate is a standalone property for movement only. transform: translate() is one function inside the transform list and can sit beside rotate, scale, and skew.
No. The element keeps its original layout box. Neighbors do not reflow when it moves.
Percentages refer to the element’s own border box — width for X, height for Y. The optional Z value must be a length, not a percentage.
It is Baseline Widely available (Chrome/Edge 104+, Firefox 72+, Safari 14.1+). It is a browser CSS property, not a Node.js feature.