For example having 2 div's positioned absolute, one can put first div upon second by setting first div's z-index higher than second one's. Can we achieve such behaviour using translateZ() or translate3d?
Asked
Active
Viewed 1.2k times
21
-
6Why don't you try it and find out? – cimmanon Jul 31 '13 at 18:05
2 Answers
24
The answer now, 3 years after, is that you can.
You need to use transform-style: preserve-3d;
on the parent, but it's possible.
.container {
transform-style: preserve-3d;
}
.test1 {
width: 500px;
height: 500px;
background: red;
transform: translate3d(0, 0, 1px);
}
.test2 {
width: 500px;
height: 500px;
background: green;
left: 250px;
top: 250px;
position: absolute;
transform: translate3d(0, 0, 0);
}
<div class="container">
<div class="test1">
test
</div>
<div class="test2">
test #2
</div>
</div>

curly_brackets
- 5,491
- 15
- 58
- 102
-
1Thanks, marked this answer as accepted. It is worth noting that both envolved elements should have `transform` property applied. – mumu2 Apr 08 '16 at 11:06
-
Hey. Can you take a look at [this](https://plnkr.co/KT6raJ3rBgq8aO1y8Xlk)? The button is hidden despite having greater translate z value. Thanks. – user1203349 Jun 02 '16 at 07:14
-
-
-
-
FYI: this doesn't seem to work if `.container` has `overflow: hidden;` applied – Philippe Oct 18 '22 at 12:14
5
Short answer: No. View demo which works as of time of posting
Longer answer: It's not supposed to, but sometimes, such as when one element has a transform when its sibling doesn't, some browsers don't handle the situation well, resulting in the z-index being ignored.
Generally, however, this is because the transform
itself is applied, not because of the translateZ
. The solution in such a case it to give all relevant elements transform: translate3d(0px, 0px, 0px)
or something similar which makes the browser render the elements more carefully

Community
- 1
- 1

Zach Saucier
- 24,871
- 12
- 85
- 147