Z-index in Grid Layout

4 mintutorial

Hello everyone, I am Berkay and this is my first blog ever. Actually I am a chemical engineer who graduated at 2021. I enjoy while coding and seeing my code results. Therefore, I am trying to change my path from chemical engineer to Front-end developer. I just finished my HTML and CSS course from Udemy platform. I mean, I am at the beginning of the road :) In this blog, I’ll try to explain z-index in the grid element and items. I am writing this blog because I have had a problem about this z-index in grid layout while dealing with nested elements :) I hope when you read this, you’ll not have a problem. Actually, I am so beginner in front-end programming. Read this blog by taking into consideration of my beginning path :) Have a good reading….

Let’s look at the below html structure, and try to understand.

<div class="container">
  <div class="a-box"></div>
  <div class="b-box">
    <div class="c-box">
      <div class="child-box">
        <h1>hello</h1>
      </div>
    </div>
  </div>
</div>

Now let’s add some CSS, and see what is the actual preview

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
 
.container {
  position: relative;
  background: red;
  width: 400px;
  height: 400px;
}
 
.a-box {
  background: green;
  width: 175px;
  height: 175px;
}
.b-box {
  background: black;
  width: 150px;
  height: 150px;
}
 
.c-box {
  background: purple;
  width: 120px;
  height: 120px;
}
 
.child-box {
  background: orange;
  width: 100px;
  height: 100px;
}

And …. See the actual preview of these HTML and CSS.

hello

“Box-a” pushes the “box-b” since they are sibling. “Box-b” covers the “box-c” and its child because “box-b” is the parent of these.

What if, I give an absolute position to “box-a” ?? Let’s try, and see…

hello

Booom !!! When I give an absolute position to “box-a”, it gains a different dimension than other elements inside the container, and other elements(except “box-a”) pretend like there is no more “box-a”, and try to go at the first line in the container. It seems pretty :) …..

Note that, in order apply z-index property, element must have a position rather than static.

Now let’s give an absolute position value for “b-box” also, and see.

hello

Opsss !!! Now “box”-a goes to underneath of the “box-b”. The reason for that, “Stacking-order”. Briefly, if you have positioned elements, the last element will be seem at the top. You can change this situation by changing the z-index property. If you want to read more about stacking order, look at this reference [Ref1].

The reason why I am writing this blog is ;

Let me explain my situation to be a well-understandable. Think that my “box-a” will pretend like an overlay which covers the “box-b” and its child. Therefore, I am giving box-a an opacity value. Also, I want “box-b” to be a grid element in order to positioned its child according to my desire. Look at below to see CSS. I only add display grid to b-box, and opacity value for “box-a”.

hello

I want my “c-box” and ‘Hello’ type to be distinguished. Therefore, I am giving z-index=1 to “b-box”.

hello

Immm looks weird, nothing is changed. Now, let me try to give a z-index value to “box-c” instead of “box-b”,

hello

Finally, I got it :)) This is what I want to be see. Although, “box-b” covers the “box-c” and its child, nothing is changed when I give a z-index for box-b. Let me explain the reason.

Reason of that situation:

  • When I give a display=grid for “box-b”, box-b is called a **grid element**, and it gains a different dimension.
  • However, its child (“box-c”) is called a grid item which can be positioned. Since it has a position property I can apply it a z-index value.

Z-index is not valid for grid elements, but grid items can be affected by z-index value. Therefore, if you have grid element, try not to give a z-index value to bring it to front. Instead, you should give a z-index for grid-items. In my example, “box-b” (parent of “box-c”) is a grid element and “box-c” is a grid item.

I hope you can enjoy while reading my blog. Since this is my first blog, layout is a little weird. But next blogs, I will improve myself and get well-organized blogs. Have a good day :)) Also you can share your comments with me about the my first blog, I’ll be appreciated.


REFERENCE