Saya menemukan cara untuk membuat wadah div untuk menempati setidaknya satu halaman penuh, dengan menetapkan min-height: 100%;
. Namun, ketika saya menambahkan div bersarang dan mengatur height: 100%;
, itu tidak meregang ke tinggi penampung. Apakah ada cara untuk memperbaikinya?
html, body {
height: 100%;
margin: 0;
}
#containment {
min-height: 100%;
background: pink;
}
#containment-shadow-left {
height: 100%;
background: aqua;
}
<div id="containment">
<div id="containment-shadow-left">
Hello World!
</div>
</div>
display:flex
danflex-direction:column
dan berikan anakflex:1
.Jawaban:
Ini adalah bug webkit (chrome / safari) yang dilaporkan, anak-anak dari orang tua dengan ketinggian minimum tidak dapat mewarisi properti height: https://bugs.webkit.org/show_bug.cgi?id=26559
Rupanya Firefox juga terpengaruh (tidak dapat menguji di IE saat ini)
Kemungkinan solusi:
Bug tidak menunjukkan kapan elemen dalam memiliki posisi absolut.
Lihat http://jsfiddle.net/xrebB/
Edit pada 10 April 2014
Karena saat ini saya sedang mengerjakan proyek yang sangat saya butuhkan wadah induk
min-height
, dan elemen anak mewarisi ketinggian wadah, saya melakukan penelitian lebih lanjut.Pertama: Saya tidak yakin lagi apakah perilaku browser saat ini benar-benar bug. Spesifikasi CSS2.1 mengatakan:
Jika saya menempatkan ketinggian minimum pada wadah saya, saya tidak secara eksplisit menentukan ketinggiannya - jadi elemen saya harus mendapatkan
auto
ketinggian. Dan itulah yang dilakukan oleh Webkit - dan semua peramban lainnya.Kedua, solusi yang saya temukan:
Jika saya mengatur elemen kontainer saya
display:table
denganheight:inherit
itu bertindak persis dengan cara yang sama seperti jika saya akan memberikannyamin-height
100%. Dan - yang lebih penting - jika saya mengatur elemen anak kedisplay:table-cell
dalamnya akan dengan sempurna mewarisi ketinggian elemen wadah - apakah itu 100% atau lebih.CSS lengkap:
Markup:
Lihat http://jsfiddle.net/xrebB/54/ .
sumber
Tambahkan
height: 1px
ke wadah induk. Bekerja di Chrome, FF, Safari.sumber
height: 1px;
tidak akan mengesampingkan ketinggian min. Justru sebaliknya. Ini adalah solusi terbaik di sini ... demo: jsbin.com/mosaboyo/1/editheight: 1px;
bekerja stackoverflow.com/questions/2341821/height100-vs-min-height100min-height
. Misalnya, jika ada cukup banyak teks akan meluap. Lihat jsbin.com/vuyapitizo/1pikir saya akan membagikan ini, karena saya tidak melihat ini di mana pun, dan itulah yang saya gunakan untuk memperbaiki solusi saya.
SOLUSI :
min-height: inherit;
Saya memiliki orang tua dengan ketinggian minimum yang ditentukan, dan saya membutuhkan seorang anak untuk menjadi tinggi itu.
Dengan cara ini anak sekarang bertindak sebagai tinggi 100% dari tinggi minimum.
Saya harap beberapa orang menemukan ini berguna :)
sumber
min-height
. Ketika tinggi orangtua lebih besar, anak tidak akan berkembang.Ini ditambahkan dalam komentar oleh @jackocnr tapi saya melewatkannya. Untuk browser modern, saya pikir ini adalah pendekatan terbaik.
Itu membuat elemen dalam mengisi seluruh wadah jika terlalu kecil, tetapi memperluas tinggi wadah jika terlalu besar.
sumber
Solusi Kushagra Gour tidak bekerja (setidaknya di Chrome dan IE) dan menyelesaikan masalah asli tanpa harus menggunakan
display: table;
dandisplay: table-cell;
. Lihat penyedot: http://plnkr.co/edit/ULEgY1FDCsk8yiRTfOWUPengaturan
min-height: 100%; height: 1px;
pada div luar menyebabkan ketinggian aktualnya minimal 100%, sesuai kebutuhan. Ini juga memungkinkan div bagian dalam untuk mewarisi ketinggian dengan benar.sumber
Selain jawaban yang ada, ada juga unit viewport
vh
untuk digunakan. Cuplikan sederhana di bawah ini. Tentu saja itu dapat digunakan bersama dengancalc()
juga, misalnyamin-height: calc(100vh - 200px);
ketika header halaman dan footer memiliki200px
ketinggian bersama.sumber
Saya tidak percaya ini adalah bug pada browser. Semua berperilaku dengan cara yang sama - yaitu, setelah Anda berhenti menentukan ketinggian eksplisit, ketinggian minimum pada dasarnya adalah "langkah terakhir".
Tampaknya persis seperti yang disarankan oleh spesifikasi CSS 2.1: http://www.w3.org/TR/CSS2/visudet.html#the-height-property
Oleh karena itu, karena
min-height
induk tidak memilikiheight
set properti eksplisit , defaultnya adalah otomatis.Ada beberapa cara untuk mengatasi hal ini dengan menggunakan
display: table-cell
, atau gaya yang lebih baru seperti flexbox, jika itu memungkinkan untuk peramban audiens target Anda. Anda juga dapat menumbangkan ini dalam situasi tertentu dengan menggunakantop
danbottom
properti pada elemen bagian dalam yang benar-benar diposisikan, yang memberi Anda ketinggian 100% tanpa menyebutkannya.sumber
Meskipun
display: flex;
telah disarankan di sini, pertimbangkan untuk menggunakandisplay: grid;
sekarang karena didukung secara luas . Secara default, satu-satunya anak kisi akan sepenuhnya mengisi induknya.sumber
Untuk googler:
Pemecahan masalah jquery ini membuat #containment mendapatkan ketinggian secara otomatis (oleh, height: auto), lalu mendapatkan ketinggian aktual yang ditetapkan sebagai nilai piksel.
sumber
Cara terbaik untuk mencapai ini saat ini adalah menggunakan
display: flex;
. Namun Anda mungkin mengalami masalah ketika mencoba untuk mendukung IE11. Menurut https://caniuse.com menggunakan flexbox:Solusi yang kompatibel dengan Internet Explorer
Solusinya adalah untuk digunakan
display: table;
pada orang tua dandisplay: table-row;
anak dengan keduanyaheight: 100%;
sebagai penggantimin-height: 100%;
.Sebagian besar solusi yang tercantum di sini menggunakan
display:
table
,table-row
dan / atautable-cell
, tetapi mereka tidak mereplikasi perilaku yang sama denganmin-height: 100%;
, yaitu:height
propertinya);min-height
;Saat menggunakan solusi ini, perilakunya sama dan properti
min-height
tidak diperlukan yang memungkinkan untuk mengatasi bug.Penjelasan
Alasan mengapa ia bekerja adalah karena, tidak seperti kebanyakan elemen, elemen menggunakan
display:
table
dantable-row
akan selalu setinggi konten mereka. Ini membuatheight
properti mereka berperilaku serupa denganmin-height
.Solusi dalam aksi
sumber
Solusi JS lainnya, yang mudah dan dapat digunakan untuk menghindari solusi markup / hacky yang tidak mudah hanya CSS atau.
W / jQuery:
Arahan sudut:
Untuk digunakan seperti ini:
sumber
Ini biasanya bekerja untuk saya: