Saya memiliki wadah div
dengan dua anak. Anak pertama memiliki tinggi tertentu. Bagaimana cara membuat anak kedua menempati "ruang kosong" wadah div
tanpa memberikan ketinggian tertentu?
Sebagai contoh, warna merah muda div
juga harus menempati ruang putih.
Mirip dengan pertanyaan ini: Bagaimana membuat div menempati ketinggian yang tersisa?
Tapi saya tidak mau memberikan posisi absolut .
Jawaban:
Memperluas
#down
anak untuk mengisi ruang yang tersisa#container
dapat dilakukan dengan berbagai cara tergantung pada dukungan browser yang ingin Anda capai dan apakah#up
memiliki ketinggian yang ditentukan atau tidak .Sampel
Tampilkan cuplikan kode
Kotak
grid
Tata letak CSS menawarkan opsi lain, meskipun mungkin tidak sesederhana model Flexbox. Namun, ini hanya membutuhkan gaya elemen penampung:The
grid-template-rows
mendefinisikan baris pertama sebagai 100px tinggi tetap, dan tetap baris otomatis akan meregang untuk mengisi ruang yang tersisa.Saya cukup yakin IE11 membutuhkan
-ms-
prefiks, jadi pastikan untuk memvalidasi fungsionalitas di browser yang ingin Anda dukung.Flexbox
Modul Tata Letak Kotak Fleksibel
flexbox
CSS3 ( ) sekarang didukung dengan baik dan dapat sangat mudah diterapkan. Karena fleksibel, ia bahkan berfungsi ketika#up
tidak memiliki ketinggian yang ditentukan.Penting untuk dicatat bahwa dukungan IE10 & IE11 untuk beberapa properti flexbox dapat bermasalah, dan IE9 atau yang lebih rendah tidak memiliki dukungan sama sekali.
Tinggi Terhitung
Solusi lain yang mudah adalah dengan menggunakan unit fungsional CSS3
calc
, seperti yang ditunjukkan Alvaro dalam jawabannya , tetapi membutuhkan tinggi dari anak pertama untuk menjadi nilai yang diketahui:Ini cukup banyak didukung, dengan satu-satunya pengecualian penting adalah <= IE8 atau Safari 5 (tidak ada dukungan) dan IE9 (dukungan parsial). Beberapa masalah lain termasuk menggunakan calc dalam hubungannya dengan transform atau box-shadow , jadi pastikan untuk menguji di beberapa browser jika itu menjadi perhatian Anda.
Alternatif Lain
Jika dukungan yang lebih lama diperlukan, Anda dapat menambahkan
height:100%;
ke#down
akan membuat div merah muda setinggi penuh, dengan satu peringatan. Ini akan menyebabkan penampung meluap, karena#up
mendorongnya ke bawah.Oleh karena itu, Anda dapat menambahkan
overflow: hidden;
ke wadah untuk memperbaikinya.Sebagai alternatif, jika ketinggiannya
#up
tetap, Anda dapat memposisikannya secara mutlak di dalam wadah, dan menambahkan bantalan ke atas#down
.Dan, opsi lain adalah menggunakan tampilan tabel:
sumber
position: relative;
posisinya relatif terhadap wadah, bukan jendela. Jadi, itu harus menjadi opsi yang layak.Sudah hampir dua tahun sejak saya menanyakan pertanyaan ini. Saya baru saja menemukan css calc () yang menyelesaikan masalah yang saya alami ini dan berpikir akan lebih baik untuk menambahkannya jika seseorang memiliki masalah yang sama. (Ngomong-ngomong saya akhirnya menggunakan posisi absolut).
http://jsfiddle.net/S8g4E/955/
Ini cssnya
Dan informasi lebih lanjut tentang itu di sini: http://css-tricks.com/a-couple-of-use-cases-for-calc/
Dukungan browser: http://caniuse.com/#feat=calc
sumber
calc
mana dukungan browser lebar tidak begitu penting (IE8 ke bawah dan Safari 5 tidak mendukungnya).#up
ketinggian dinamis ?Jawaban saya hanya menggunakan CSS, dan tidak menggunakan overflow: hidden atau display: table-row. Ini mensyaratkan bahwa anak pertama benar-benar memiliki tinggi tertentu, tetapi dalam pertanyaan Anda, Anda menyatakan bahwa hanya kebutuhan anak kedua yang tingginya tidak ditentukan, jadi saya yakin Anda harus menganggap ini dapat diterima.
html
css
http://jsfiddle.net/S8g4E/288/
sumber
periksa demo - http://jsfiddle.net/S8g4E/6/
gunakan css -
sumber
height: 1px
ke#up
untuk memastikan ketinggian minimum yang dibutuhkan. Berikut dukungan browser untukdisplay: table
: caniuse.com/css-tableKecuali saya salah paham, Anda bisa menambahkan
height: 100%;
danoverflow:hidden;
ke#down
.DEMO langsung
Edit: Karena Anda tidak ingin menggunakan
overflow:hidden;
, Anda dapat menggunakandisplay: table;
skenario ini; namun, ini tidak didukung sebelum IE 8. (display: table;
dukungan )DEMO langsung
Catatan: Anda telah mengatakan bahwa Anda ingin
#down
tingginya menjadi#container
tinggi dikurangi#up
tinggi. Thedisplay:table;
solusi tidak tepat dan jsfiddle ini akan memerankan yang cukup jelas.sumber
overflow:hidden
ke untuk menyembunyikan konten ekstra.Anda dapat menggunakan pelampung untuk mendorong konten ke bawah:
http://jsfiddle.net/S8g4E/5/
Anda memiliki wadah ukuran tetap:
Konten dibiarkan mengalir di samping pelampung. Kecuali kita menyetel float ke lebar penuh:
Sementara
#up
dan#down
berbagi posisi teratas,#down
konten hanya dapat dimulai setelah bagian bawah mengambang#up
:sumber
#up
sebenarnya mencakup bagian atas#down
: jsfiddle.net/thirtydot/S8g4E/9#up
, maka itu mungkin bisa diterima.Abstrak
Saya tidak menemukan jawaban yang memuaskan jadi saya harus mencari tahu sendiri.
Persyaratan saya:
calc()
tidak boleh digunakan karena elemen lainnya tidak boleh tahu apa - apa tentang ukuran elemen lain;Solusinya
flex-grow: 1
untuk semua orang tua langsung dengan tinggi yang dihitung (jika ada) dan elemen sehingga mereka akan menggunakan semua ruang yang tersisa saat ukuran konten elemen lebih kecil;flex-shrink: 0
untuk semua item fleksibel dengan tinggi tetap sehingga tidak akan menjadi lebih kecil saat ukuran konten elemen lebih besar dari ukuran ruang yang tersisa;overflow: hidden
untuk semua orang tua langsung dengan tinggi yang dihitung (jika ada) untuk menonaktifkan pengguliran dan melarang menampilkan konten melimpah;overflow: auto
untuk elemen untuk mengaktifkan bergulir di dalamnya.JSFiddle (elemen memiliki induk langsung dengan tinggi yang dihitung)
JSFiddle (kasus sederhana: tidak ada orang tua langsung dengan tinggi yang dihitung)
sumber
Saya tidak yakin itu bisa dilakukan murni dengan CSS, kecuali Anda merasa nyaman memalsukannya dengan ilusi. Mungkin menggunakan jawaban Josh Mein ini, dan set
#container
keoverflow:hidden
.Untuk apa nilainya, inilah solusi jQuery:
sumber