Menumpuk DIV di atas satu sama lain?


116

Apakah mungkin menumpuk beberapa DIV seperti:

<div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>

Jadi semua DIV dalam itu memiliki posisi X dan Y yang sama? Secara default mereka semua pergi di bawah satu sama lain meningkatkan posisi Y dengan ketinggian DIV sebelumnya yang terakhir.

Saya merasa semacam float atau display atau trik lain bisa menggigit?

EDIT: DIV induk memiliki posisi relatif, jadi, menggunakan absolut posisi tampaknya tidak berfungsi.


Untuk memperjelas jawaban saya, Anda benar-benar ingin memposisikan div bagian dalam.
— Matt

Jawaban:


168

Posisikan div luar sesuka Anda, lalu posisikan div dalam menggunakan absolute. Mereka semua akan bertumpuk.

.inner {
  position: absolute;
}
<div class="outer">
   <div class="inner">1</div>
   <div class="inner">2</div>
   <div class="inner">3</div>
   <div class="inner">4</div>
</div>


1
Sepertinya tidak berhasil. Mungkin saya seharusnya menyebutkan bahwa saya memiliki skenario ini: <div style = "position: absolute ..."> <div style = "position: relative ..."> <div> tumpukan ini </div> <div> tumpukan ini </div> <div> tumpukan ini </div> <div> tumpukan ini </div> </div> </div>
— Menara

2
Anda benar-benar ingin memposisikan div yang memiliki "stack this" di dalamnya. Itu berhasil - Saya mencobanya sebelum memposting asli saya. Jika Anda tidak menempatkan pemilih kelas pada div Anda, sesuaikan metode pemilihan div dalam jawaban Eric untuk memilih div tumpukan.
— Matt

1
Tidak berhasil untuk saya juga. Terlalu banyak hal tak dikenal yang tersisa untuk pemirsa.
— yan bellavance

Saya mendapatkan div untuk menumpuk menggunakan posisi: relatif dan menentukan ketinggian
— yan bellavance

itu mungkin ada hubungannya dengan tampilan prop?
— yan bellavance

50

Untuk menambah jawaban Dave:

div { position: relative; }
div div { position: absolute; top: 0; left: 0; }

Sepertinya tidak berhasil. Mungkin saya seharusnya menyebutkan bahwa saya memiliki skenario ini: <div style = "position: absolute ..."> <div style = "position: relative ..."> <div> tumpukan ini </div> <div> tumpukan ini </div> <div> tumpukan ini </div> <div> tumpukan ini </div> </div> </div>
— Menara

Saya pikir dalam hal ini Anda ingin menyetel "top: 0; left: 0;" pada div Anda yang memiliki "position: relative". Pasti menguji IE6 itu, meskipun karena saya tidak dapat mengatakan dengan pasti bahwa itu akan berhasil.
— Eric Wendelin

10

Jika Anda bermaksud meletakkan satu di atas yang lain, satu di atas (posisi X, Y yang sama, tetapi posisi Z yang berbeda), coba gunakan z-indexatribut CSS. Ini harus bekerja (belum teruji)

<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>

Ini akan menunjukkan 4 di atas 3, 3 di atas 2, dan seterusnya. Semakin tinggi indeks-z, semakin tinggi posisi elemen pada sumbu-z. Saya harap ini membantu Anda :)



5

Saya memposisikan div sedikit diimbangi, sehingga Anda dapat melihatnya bekerja.
HTML

<div class="outer">
  <div class="bot">BOT</div>
  <div class="top">TOP</div>
</div>

CSS

.outer {
  position: relative;
  margin-top: 20px;
}

.top {
  position: absolute;
  margin-top: -10px;
  background-color: green;
}

.bot {
  position: absolute;
  background-color: yellow;
}

https://codepen.io/anon/pen/EXxKzP


4

Anda sekarang dapat menggunakan CSS Grid untuk memperbaikinya.

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

Dan css untuk ini:

.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

Saya tahu bahwa posting ini agak tua tetapi saya memiliki masalah yang sama dan mencoba memperbaikinya beberapa jam. Akhirnya saya menemukan solusinya:

jika kita memiliki 2 kotak diposisikan 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>

kami berharap akan ada satu kotak di layar. Untuk melakukan itu kita harus mengatur margin-bottom sama dengan -height, jadi lakukan seperti ini:

<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>

bekerja dengan baik untuk saya.


0

Saya memiliki persyaratan yang sama yang telah saya coba di bawah biola.

#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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.