Saya memiliki dua DIV yang harus saya posisikan tepat di atas satu sama lain. Namun, ketika saya melakukan itu, pemformatan menjadi kacau karena DIV yang berisi bertindak seperti tidak ada ketinggian. Saya pikir ini adalah perilaku yang diharapkan position:absolute
tetapi saya perlu menemukan cara untuk memposisikan kedua elemen ini di atas satu sama lain dan memiliki wadah yang meregang saat konten membentang:
Tepi kiri atas .layer2
harus persis sejajar dengan tepi kiri ataslayer1
<!-- HTML -->
<div class="container_row">
<div class="layer1">
Lorem ipsum...
</div>
<div class="layer2">
More lorem ipsum...
</div>
</div>
<div class="container_row">
...same HTML as above. This one should never overlap the .container_row above.
</div>
/* CSS */
.container_row {}
.layer1 {
position:absolute;
z-index: 1;
}
.layer2 {
position:absolute;
z-index: 2;
}
position: absolute
bukan gaya yang tepat untuk digunakan saat itu.position:absolute
rasanya tidak benar. Apa gaya yang tepat?.layer1
dan.layer2
memiliki ukuran yang diketahui?Jawaban:
Pertama-tama, Anda benar-benar harus memasukkan posisi pada elemen yang benar-benar diposisikan atau Anda akan menemukan perilaku yang aneh dan membingungkan; Anda mungkin ingin menambahkan
top: 0; left: 0
ke CSS untuk kedua elemen yang benar-benar diposisikan. Anda juga akan ingin memilikiposition: relative
pada.container_row
jika Anda ingin elemen benar-benar diposisikan untuk diposisikan sehubungan dengan orang tua mereka daripada tubuh dokumen :Masalah Anda adalah
position: absolute
menghilangkan elemen dari aliran normal :Ini berarti bahwa elemen yang diposisikan secara mutlak tidak berpengaruh apa pun pada ukuran elemen induknya dan elemen pertama Anda
<div class="container_row">
akan memiliki tinggi nol.Jadi, Anda tidak dapat melakukan apa yang Anda coba lakukan dengan elemen yang diposisikan secara absolut kecuali jika Anda mengetahui tingginya (atau, setara, Anda dapat menentukan tingginya). Jika Anda dapat menentukan tinggi badan maka Anda dapat meletakkan ketinggian yang sama di atas
.container_row
dan semuanya akan berbaris; Anda juga bisa meletakkanmargin-top
di kedua.container_row
untuk meninggalkan ruang untuk elemen yang benar-benar diposisikan. Sebagai contoh:sumber
position: absolute
perlu. Silakan periksa: stackoverflow.com/a/51949049/1736186Sebenarnya ini mungkin tanpa posisi
absolute
dan menentukan ketinggian apapun. Yang perlu Anda lakukan adalah menggunakandisplay: grid
elemen induk dan meletakkan turunannya, ke dalam baris dan kolom yang sama.Silakan periksa contoh di bawah ini, berdasarkan HTML Anda. Saya hanya menambahkan
<span>
dan beberapa warna, sehingga Anda dapat melihat hasilnya.Anda juga dapat dengan mudah mengubah
z-index
setiap elemen turunan, untuk memanipulasi visibilitasnya (yang mana yang harus di atas).sumber
display: grid
tidak ada tujuh tahun yang lalu :)flex
, yang memiliki dukungan browser yang jauh lebih baik saat ini.Jawaban yang bagus, "mu terlalu pendek". Saya mencari hal yang persis sama, dan setelah membaca posting Anda, saya menemukan solusi yang sesuai dengan masalah saya.
Saya memiliki dua elemen dengan ukuran yang sama persis dan ingin menumpuknya. Karena masing-masing memiliki ukuran yang sama, yang bisa saya lakukan adalah membuatnya
hanya pada elemen terakhir. Dengan cara ini elemen pertama dimasukkan dengan benar, "mendorong" ketinggian orang tua, dan elemen kedua ditempatkan di atas.
Semoga ini membantu orang lain yang mencoba menumpuk 2+ elemen dengan ketinggian yang sama (tidak diketahui).
sumber
position: aboslute
dengan lainnya satu.Berikut solusi lain yang menggunakan display: flex, bukan position: absolute atau display: grid.
sumber
Saya harus mengatur
Container_height = Element1_height = Element2_height
Gunakan dapat menggunakan z-index untuk mengatur mana yang akan di atas.
sumber
Berikut beberapa css yang dapat digunakan kembali yang akan menjaga tinggi setiap elemen tanpa menggunakan
position: absolute
:Elemen pertama di Anda
stack
adalah latar belakang, dan yang kedua adalah latar depan.sumber
Karena pemosisian absolut menghilangkan elemen dari posisi aliran dokumen: absolute bukanlah alat yang tepat untuk pekerjaan itu. Bergantung pada tata letak persis yang ingin Anda buat, Anda akan berhasil menggunakan margin negatif, posisi: relatif, atau bahkan mungkin transform: terjemahkan. Tunjukkan contoh apa yang ingin Anda lakukan, kami dapat membantu Anda dengan lebih baik.
sumber
Tentu saja, masalahnya adalah tentang mendapatkan kembali tinggi badan Anda. Tetapi bagaimana Anda bisa melakukannya jika Anda tidak mengetahui ketinggian sebelumnya? Nah, jika Anda tahu rasio aspek apa yang ingin Anda berikan ke penampung (dan menjaganya tetap responsif), Anda bisa mendapatkan kembali tinggi badan Anda dengan menambahkan bantalan ke turunan lain dari penampung, yang dinyatakan sebagai persentase.
Anda bahkan dapat menambahkan boneka
div
ke wadah dan mengatur sesuatu sepertipadding-top: 56.25%
untuk memberikan elemen boneka tersebut ketinggian yang merupakan proporsi dari lebar wadah. Ini akan mengeluarkan container dan memberikan rasio tinggi lebar, dalam hal ini 16: 9 (56.25%).Padding dan margin menggunakan persentase lebar, itulah triknya di sini.
sumber
Setelah banyak pengujian, saya telah memverifikasi bahwa pertanyaan asli sudah benar; hanya kehilangan beberapa pengaturan:
container_row
HARUS dimilikiposition: relative;
position: absolute; left:0;
container_row
harus memiliki gaya tambahan:height:x; line-height:x; vertical-align:middle;
text-align:center;
bisa, juga, membantu.sumber