The scale property resizes an element around its transform-origin. One value scales X and Y the same. Two values set X then Y. Three values add a Z factor for 3D.
It is an individual transform property, like translate and rotate. That lets you change size without rewriting a full transform list. The initial value is none. It is not inherited and creates a stacking context when not none.
Baseline · Widely available.
Not deprecated. Supported in modern browsers since about 2022. For very old browsers, fall back to transform: scale(…).
Syntax
CSS Syntax
syntax.css
scale:none | [<number>|<percentage>]{1,3};
Example: scale: 1.5; or scale: 2 1;. Factors above 1 grow; below 1 shrink. none matches a factor of 1.
Start at identity.scale: 1 keeps a stacking context stable before hover.
Transition only scale.transition: scale 0.25s ease animates that property.
Grow on hover.scale: 1.15 enlarges the button slightly.
Why individual helps. You did not need to rewrite a full transform list.
Edge Cases & Pitfalls
If the resize looks wrong, one of these is usually why.
layout
Does not reflow neighbors
Scaled paint can overlap nearby content. Change width/height (or grid/flex) if you need real layout space.
order
Fixed apply order with translate / rotate
Individual transforms always run as translate → rotate → scale → transform. Need a different order? Use transform functions instead.
origin
Wrong growth point
Scaling expands from transform-origin. Change it when the box grows from the wrong spot.
stack
Creates a stacking context
A non-nonescale creates a stacking context. Prefer scale: 1 in the base state if hover would otherwise change stacking suddenly.
fallback
Older browsers need transform
IE and pre-2022 engines lack scale. Use transform: scale(1.5) (or @supports) when you must support them.
Compatibility
Browser Support
scale is a browser CSS property for individual transforms. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available
scale
Chrome 104+, Edge 104+, Firefox 72+, Safari 14.1+ / iOS 14.5+. Not supported in Internet Explorer.
96%Global 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 ExplorerNo support
No support
scaleWidely supported
Bottom line: Safe for modern sites. Fall back to transform: scale() for older browsers. This is not a JavaScript runtime API.
Remember
Key Takeaways
Role: resize independently of the transform list — one, two, or three factors.
Initial:none. Visually like 1. Above 1 grows; below 1 shrinks.
Order: translate → rotate → scale → transform.
Paint only: layout box usually stays; control the pivot with transform-origin.
One line:scale resizes the painted box — without rewriting the whole transform stack.
Frequently Asked Questions
It resizes an element visually along the X and/or Y axes (and optionally Z) without using the transform shorthand. One value scales both axes. Two values set X then Y.
Both resize the painted box. scale is an individual transform property you can set and animate alone. transform: scale() lives inside the older transform list and must be rewritten with any other transform functions you keep.
The initial value is none, which means no scaling. Visually that matches a factor of 1 (or 100%).
No. It changes how the element is painted. The original layout box usually stays the same, so neighbors do not reflow.
Individual transform properties always run in a fixed order: translate, then rotate, then scale, then any transform property last — regardless of source order in your CSS.
It is Baseline Widely available: Chrome 104+, Edge 104+, Firefox 72+, Safari 14.1+. It is a browser CSS property, not a Node.js feature. Prefer transform: scale() only if you must support older browsers.