The transform-style property sets whether children of an element stay in 3D space or are flattened into the parent’s plane.
The default is flat. Use preserve-3d on a parent when nested transforms (for example a child with translateZ) should share real 3D depth with that parent’s rotation. Pair it with perspective so depth is visible. It is not inherited.
Baseline · Widely available.
Not deprecated. Cross-browser since about September 2015. Not supported in Internet Explorer.
3D tip.
Set preserve-3d on every non-leaf parent in the 3D tree. One missing level flattens the children below it.
transform-style is a browser CSS property for 3D transform trees. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available
transform-style
Chrome 12+, Firefox 10+, Safari 4+, Edge 12+. Widely available since September 2015. Not in Internet Explorer.
97%Browser support
Google Chrome12+
Full support
Mozilla Firefox10+
Full support
Apple Safari4+
Full support
Microsoft Edge12+
Full support
Opera15+
Full support
Samsung Internet4+
Full support
Internet ExplorerNot supported
Not supported
transform-styleWidely supported
Bottom line: Safe for modern 3D UI. For Internet Explorer, fall back to flat 2D motion. It is not a runtime API.
Remember
Key Takeaways
Role: keep children in 3D (preserve-3d) or flatten them (flat).
Default:flat — nested Z transforms do not form a true 3D scene.
Needs perspective: depth looks better with an ancestor perspective.
Watch grouping props: overflow, opacity, filter, and friends can force flat.
One line: use transform-style: preserve-3d on parents so nested 3D transforms share real depth.
Frequently Asked Questions
It controls whether child elements stay in 3D space (preserve-3d) or are flattened into the parent’s plane (flat).
The default is flat. Nested 3D transforms are flattened onto the parent unless you set preserve-3d.
Use it on a parent when children need a shared 3D scene — cubes, card stacks, or layered rotate/translateZ effects.
For visible depth, yes. Set perspective on an ancestor (or use perspective() in a transform) so 3D children look three-dimensional.
No. Set it on each element whose children should preserve 3D space.
It is Baseline and widely available since about September 2015 (Chrome 12+, Firefox 10+, Safari 4+). It is not supported in Internet Explorer. It is a browser CSS property, not a Node.js feature.