Stacking DIVs on top of each other?

前端 未结 9 2263
暗喜
暗喜 2020-12-02 07:59

Is it possible to stack up multiple DIVs like:

&l
相关标签:
9条回答
  • 2020-12-02 08:14

    I had the same requirement which i have tried in below fiddle.

    #container1 {
    background-color:red;
    position:absolute;
    left:0;
    top:0;
    height:230px;
    width:300px;
    z-index:2;
    }
    #container2 {
    background-color:blue;
    position:absolute;
    left:0;
    top:0;
    height:300px;
    width:300px;
    z-index:1;
    }
    
    #container {
    position : relative;
    height:350px;
    width:350px;
    background-color:yellow;
    }
    

    https://plnkr.co/edit/XnlneRFlvo1pB92UXCC6?p=preview

    0 讨论(0)
  • 2020-12-02 08:20

    If you mean by literally putting one on the top of the other, one on the top (Same X, Y positions, but different Z position), try using the z-index CSS attribute. This should work (untested)

    <div>
        <div style='z-index: 1'>1</div>
        <div style='z-index: 2'>2</div>
        <div style='z-index: 3'>3</div>
        <div style='z-index: 4'>4</div>
    </div>
    

    This should show 4 on the top of 3, 3 on the top of 2, and so on. The higher the z-index is, the higher the element is positioned on the z-axis. I hope this helped you :)

    0 讨论(0)
  • 2020-12-02 08:21

    I know that this post is a little old but I had the same problem and tried to fix it several hours. Finally I found the solution:

    if we have 2 boxes positioned absolue

    <div style='left: 100px; top: 100px; position: absolute; width: 200px; height: 200px;'></div>
    <div style='left: 100px; top: 100px; position: absolute; width: 200px; height: 200px;'></div>
    

    we do expect that there will be one box on the screen. To do that we must set margin-bottom equal to -height, so doing like this:

    <div style='left: 100px; top: 100px; position: absolute; width: 200px; height: 200px; margin-bottom: -200px;'></div>
    <div style='left: 100px; top: 100px; position: absolute; width: 200px; height: 200px; margin-bottom: -200px;'></div>
    

    works fine for me.

    0 讨论(0)
  • 2020-12-02 08:27

    To add to Dave's answer:

    div { position: relative; }
    div div { position: absolute; top: 0; left: 0; }
    
    0 讨论(0)
  • 2020-12-02 08:27

    You can now use CSS Grid to fix this.

    <div class="outer">
      <div class="top"> </div>
      <div class="below"> </div>
    </div>
    

    And the css for this:

    .outer {
      display: grid;
      grid-template: 1fr / 1fr;
      place-items: center;
    }
    .outer > * {
      grid-column: 1 / 1;
      grid-row: 1 / 1;
    }
    .outer .below {
      z-index: 2;
    }
    .outer .top {
      z-index: 1;
    }
    
    0 讨论(0)
  • 2020-12-02 08:28

    All the answers seem pretty old :) I'd prefer CSS grid for a better page layout (absolute divs can be overridden by other divs in the page.)

    <div class="container">
      <div class="inner" style="background-color: white;"></div>
      <div class="inner" style="background-color: red;"></div>
      <div class="inner" style="background-color: green;"></div>
      <div class="inner" style="background-color: blue;"></div>
      <div class="inner" style="background-color: purple;"></div>
      <div class="inner no-display" style="background-color: black;"></div>
    </div>
    
    <style>
    .container {
      width: 300px;
      height: 300px;
      margin: 0 auto;
      background-color: yellow;
      display: grid;
      place-items: center;
      grid-template-areas:
                      "inners";
    }
    
    .inner {
      grid-area: inners;
      height: 100px;
      width: 100px;
    }
    
    .no-display {
      display: none;
    }
    </style>
    

    Here's a working link

    0 讨论(0)
提交回复
热议问题