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.

Menara
sumber
Untuk memperjelas jawaban saya, Anda benar-benar ingin memposisikan div bagian dalam.
Matt
Terkait: stackoverflow.com/q/2941189/435605
AlikElzin-kilaka

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>

Matt
sumber
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; }
Eric Wendelin
sumber
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 :)

Jimmie Lin
sumber
6

style="position:absolute"

Dave Swersky
sumber
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

nycynik
sumber
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;
}
Moses Gitau
sumber
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.

Krzysztof Jarosz
sumber
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

Raphael
sumber