I was working on my code when I stumbled upon this fun fact:
z-index
doesn't work for a fixed element and, therefore, fixed elements will always be in front.
Is there a way to place a non-fixed element in front of a fixed element?
Thanks.
#fixed {
background-color: red;
width: 500px;
height: 500px;
position: fixed;
z-index: 0;
}
#normal {
background-color: blue;
width: 500px;
height: 500px;
z-index: 1;
}
<div id = 'fixed'> I'm Fixed </div>
<div id = 'normal'> I'm Normal </div>
Note: z-index only works on positioned elements (position: absolute, position: relative, position: fixed, or position: sticky) and flex items (elements that are direct children of display:flex elements).
You set z-index on a static element By default, every element has a position of static. z-index only works on positioned elements (relative, absolute, fixed, sticky) so if you set a z-index on an element with a static position, it won't work.
z-index only works on positioned elements. If you try to set a z-index on a non-positioned element, it will do nothing. However, there is one exception - flex children can use z-index even if they're non-positioned.
z-index only works for positioned elements But z-index will only take affect if the element also has a position value of absolute , relative or fixed .
Unless you're dealing with flex items or grid items, an element must be positioned for z-index
to work.1
In other words, the position
property must have a value other than static
or z-index
will be ignored.2
Your second div is not positioned. Here are two options:
position: relative
to #normal
, orz-index
value#fixed {
background-color: red;
width: 500px;
height: 500px;
position: fixed;
z-index: 0; /* a negative value here will also work */
}
#normal {
background-color: lightblue;
width: 500px;
height: 500px;
z-index: 1;
position: relative; /* new */
}
<div id = 'fixed'> I'm Fixed </div>
<div id = 'normal'> I'm Normal </div>
See also: Basics of the CSS z-index
property
1 Although z-index
, as defined in CSS 2.1, applies only to positioned elements, CSS 3 allows z-index
to work with grid items and flex items, even when position
is static
.
2z-index
property page at MDN
Use negative z-index
for the fixed element.
<div id = 'fixed'> I'm Fixed </div>
<div id = 'normal'> I'm Normal </div>
#fixed {
background-color: red;
width: 500px;
height: 500px;
position: fixed;
z-index: -1;
}
#normal {
background-color: blue;
width: 500px;
height: 500px;
z-index: 1;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With