CSS z-index Property

The CSS z-index property is used to control the stacking order of the positioned elements. For example,

div.green {
    position: absolute;
    z-index: 3;
}

div.orange {
    position: absolute;
    z-index: 5;
}

Browser Output

CSS Z-index Example

Here, the div with the higher z-index value stacks on top of the div with the lower z-index value.

The z-index property only works with positioned elements and items of the flex container.

The position property value should be different from the default static value.


CSS z-index Syntax

The syntax of the z-index property is as follows:

z-index: auto | number | initial | inherit;

Here,

  • auto: determines the stacking order based on the element's position in the HTML document (default value)
  • number: sets the stacking order of an element, negative values are allowed
  • initial: sets the property value to the default
  • inherit: inherits the property value from the parent

Example: CSS z-index Property

Let's see an example of the z-index property,

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS z-index</title>
    </head>

    <body>
        <div class="greenyellow">position: absolute; <br />z-index: 3;</div>
        <div class="orange">position: absolute; <br />z-index: 10;</div>
        <div class="skyblue">position: absolute; <br />z-index: 6;</div>
    </body>

</html>
div {
    font-size: 24px;
    padding: 12px;
}

div.greenyellow {
    position: absolute;
    top: 0;
    left: 0;

    /* specifying z-index value */
    z-index: 3;

    width: 300px;
    height: 280px;
    background-color: greenyellow;
}

div.orange {
    position: absolute;
    top: 190px;
    left: 0;

    /* specifying z-index value */
    z-index: 10;

    width: 220px;
    height: 150px;
    margin-top: -120px;
    background-color: orange;
}

div.skyblue {
    position: absolute;
    top: 120px;
    left: 160px;

    /* specifying z-index value */

    z-index: 6;
    width: 280px;
    height: 150px;
    padding-left: 120px;
    background-color: skyblue;
}

Browser Output

CSS Z-Index Example

In the above example, all of the div elements have a position value of absolute. Each div element also has a different value of the z-index property.

The div having a higher z-index value is stacked on top of the other div element.

Note: Elements with the same z-index value are stacked based on their order in the HTML document. For example, if element B comes after element A then, element A will be stacked on top of element B.


CSS z-index With Negative Value

The element having a negative value of the z-index property stacks the element further behind other elements with positive values.

Let's see an example,

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS z-index</title>
    </head>

    <body>
        <div class="greenyellow">position: absolute; <br />z-index: 3;</div>
        <div class="orange">position: absolute; <br />z-index: -4;</div>
    </body>

</html>
div {
    font-size: 24px;
    padding: 12px;
}

div.greenyellow {
    position: absolute;
    top: 0;
    left: 0;

    /* specifying z-index value */
    z-index: 3;

    width: 300px;
    height: 150px;
    background: greenyellow;
}

div.orange {
    position: absolute;
    top: 190px;
    left: 0;

    /* specifying negative z-index value */
    z-index: -4;

    width: 380px;
    height: 80px;
    margin-top: -120px;
    padding-top: 120px;
    background: orange;
}

Browser Output

CSS Z-Index Negative Value Example

Here, the div element having a negative z-index value of -4 is stacked under the div with a positive z-index value of 3.


Nested Elements with Z-index Value

The z-index value behaves differently with nested elements.

Suppose we have an element with B stacked on top of element A, then the child elements of A can never be stacked higher than the element B.

Let' 's see an example,

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="style.css" />
        <title>CSS z-index</title>
    </head>

    <body>
        <!-- Creating a parent element having a child element -->
        <div class="parent">
            Parent Element<br />
            position: relative; <br />z-index: 3;

            <!-- Child elements have the highest z-index value -->

            <div class="child">
                Child Element <br />
                z-index: 50;<br />
                position: relative;
            </div>
        </div>
        <div class="outer">
            Outer Element <br />position: relative; <br />z-index: 6;
        </div>
    </body>

</html>
div {
    font-size: 24px;
    padding: 12px;
}

div.parent {
    position: relative;
    top: 0;
    left: 0;

    /* specifying z-index value */
    z-index: 3;

    width: 500px;
    height: 150px;
    background: greenyellow;
}

div.child {
    position: relative;
    left: 200px;
    top: -50px;
    background: skyblue;

    /* specifying negative z-index value */
    z-index: 50;

    width: 300px;
    height: 120px;
    padding-left: 120px;
}

div.outer {
    position: relative;
    top: -60px;
    left: 0;

    /* specifying negative z-index value */
    z-index: 6;

    width: 280px;
    height: 120px;
    background: orange;
}

Browser Output

CSS Z-Index Nested Example

In the above example, the child div element has the highest z-index value of 50 but still is stacked under the outer div element has a z-index of 6.

This happens because the outer div element has a higher z-index value than its parent element. The child element cannot stack above an element that has a higher z-index value than its parent element.

Your builder path starts here. Builders don't just know how to code, they create solutions that matter.

Escape tutorial hell and ship real projects.

Try Programiz PRO
  • Real-World Projects
  • On-Demand Learning
  • AI Mentor
  • Builder Community