Seperti yang Anda lihat di CSS di bawah ini, saya ingin child2
memposisikan dirinya sebelumnya child1
. Ini karena situs yang saya kembangkan saat ini juga dapat berfungsi pada perangkat seluler, di mana child2
seharusnya berada di bagian bawah, karena berisi navigasi yang saya inginkan di bawah konten pada perangkat seluler. - Kenapa tidak 2 masterpage? Ini adalah satu-satunya 2 divs
yang diposisikan ulang di seluruh HTML, jadi 2 masterpage untuk perubahan kecil ini adalah berlebihan.
HTML:
<div id="parent">
<div class="child1"></div>
<div class="child2"></div>
</div>
CSS:
parent { position: relative; width: 100%; }
child1 { width: auto; margin-left: 160px; }
child2 { width: 145px; position: absolute; top: 0px; bottom: 0px; }
child2
memiliki ketinggian dinamis, karena subsitus yang berbeda dapat memiliki lebih banyak atau lebih sedikit item navigasi.
Saya tahu bahwa elemen-elemen yang diposisikan absolut dihilangkan dari aliran, sehingga diabaikan oleh elemen-elemen lain.
Saya mencoba pengaturan overflow:hidden;
pada div induk, tetapi itu tidak membantu, begitu pula dengan clearfix
.
Pilihan terakhir saya adalah JavaScript untuk memposisikan ulang keduanya divs
, tetapi untuk sekarang saya akan mencoba dan melihat apakah ada cara non-JavaScript untuk melakukan ini.
sumber
Jawaban:
Anda menjawab sendiri pertanyaan itu: "Saya tahu bahwa elemen-elemen yang diposisikan absolut dihilangkan dari aliran, sehingga diabaikan oleh elemen-elemen lain." Jadi, Anda tidak dapat mengatur tinggi badan orang tua sesuai dengan elemen yang benar-benar diposisikan.
Anda menggunakan ketinggian tetap atau Anda harus melibatkan JS.
sumber
Meskipun peregangan ke elemen dengan
position: absolute
tidak mungkin, ada sering solusi di mana Anda dapat menghindari posisi absolut sambil mendapatkan efek yang sama. Lihatlah biola ini yang memecahkan masalah dalam kasus khusus Anda http://jsfiddle.net/gS9q7/Caranya adalah membalik urutan elemen dengan mengapung kedua elemen, yang pertama ke kanan, yang kedua ke kiri, sehingga yang kedua muncul terlebih dahulu.
Terakhir, tambahkan clearfix ke induk dan Anda selesai (lihat biola untuk solusi lengkap).
Secara umum, selama elemen dengan posisi absolut diposisikan di bagian atas elemen induk, kemungkinan besar Anda menemukan solusi dengan melayang elemen tersebut.
sumber
Feeela benar tetapi Anda bisa membuat orang tua
div
mengontrak / memperluas ke elemen anak jika Anda membalikkandiv
posisiAndaseperti ini:Ini seharusnya bekerja untuk Anda.
sumber
Ada cara yang cukup sederhana untuk menyelesaikan ini.
Anda hanya perlu menduplikasi konten child1 dan child2 di div relatif dengan tampilan: tidak ada di div induk. Ucapkan child1_1 dan child2_2. Letakkan child2_2 di atas dan child1_1 di bawah.
Ketika jquery Anda (atau apa pun) memanggil div absolut, cukup atur div relatif sesuai (child1_1 atau child2_2) dengan tampilan: blok DAN visibilitas: disembunyikan. Anak relatif akan tetap tidak terlihat tetapi akan membuat div orang tua lebih tinggi.
sumber
Dengan JavaScript murni, Anda hanya perlu mengambil tinggi
static position
elemen anak Anda.child1
menggunakan metode getComputedStyle () lalu menetapkan nilai pengambilan itu sebagaipadding-top
untuk anak yang sama menggunakan properti HTMLElement.style .Periksa dan jalankan Cuplikan Kode berikut untuk contoh praktis dari apa yang saya jelaskan di atas:
sumber
Pertanyaan ini ditanyakan pada 2012 sebelum flexbox. Cara yang benar untuk menyelesaikan masalah ini menggunakan CSS modern adalah dengan kueri media dan pembalikan kolom fleksibel untuk perangkat seluler. Tidak diperlukan penentuan posisi absolut.
https://jsfiddle.net/tnhsaesop/vjftq198/3/
HTML:
CSS:
sumber
Saya punya masalah serupa. Untuk mengatasi ini (alih-alih menghitung tinggi iframe menggunakan tubuh, dokumen atau jendela) saya membuat div yang membungkus seluruh konten halaman (misalnya div dengan id = "halaman") dan kemudian saya menggunakan ketinggiannya.
sumber
Saya datang dengan solusi lain, yang saya tidak suka tetapi menyelesaikan pekerjaan.
Pada dasarnya menduplikasi elemen anak sedemikian rupa sehingga duplikat tidak terlihat.
CSS:
Jika elemen-elemen anak tersebut mengandung sedikit markup, maka dampaknya akan kecil.
sumber
Berikut adalah contoh JS:
---------- contoh JS jQuery --------------------
sumber
Ada peretasan yang sangat sederhana yang memperbaiki masalah ini
Berikut adalah codesandbox yang menggambarkan solusinya: https://codesandbox.io/s/00w06z1n5l
HTML
CSS
Anda dapat bermain dengan posisi hack hack untuk memengaruhi posisi anak itu sendiri.
Berikut cuplikan:
sumber
Ada cara yang lebih baik untuk melakukan ini sekarang. Anda dapat menggunakan properti terbawah.
sumber
Ini sangat mirip dengan yang disarankan @ChrisC. Itu tidak menggunakan elemen posisi absolut, tetapi elemen relatif. Mungkin bisa bekerja untukmu
Dan css Anda seperti ini:
https://jsfiddle.net/royriojas/dndjwa6t/
sumber
Pertimbangkan juga pendekatan selanjutnya:
CSS:
Juga karena Anda mencoba memposisikan divs pertimbangkan css grid
sumber
Tampilan absolut memposisikan diri terhadap leluhur terdekat yang tidak diposisikan secara statis (
position: static
), oleh karena itu jika Anda ingin tampilan absolut diposisikan terhadap orang tua tertentu, atur orang tuaposition
kerelative
dan anakposition
keabsolute
sumber
Coba ini, itu berhasil untuk saya
Ini akan mengatur tinggi anak ke tinggi orang tua
sumber