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
.container {
width: 100px;
height: 300px;
border: 1px solid red;
float: left;
}
.up {
background: green;
}
.down {
background: pink;
}
.grid.container {
display: grid;
grid-template-rows: 100px;
}
.flexbox.container {
display: flex;
flex-direction: column;
}
.flexbox.container .down {
flex-grow: 1;
}
.calc .up {
height: 100px;
}
.calc .down {
height: calc(100% - 100px);
}
.overflow.container {
overflow: hidden;
}
.overflow .down {
height: 100%;
}
<div class="grid container">
<div class="up">grid
<br />grid
<br />grid
<br />
</div>
<div class="down">grid
<br />grid
<br />grid
<br />
</div>
</div>
<div class="flexbox container">
<div class="up">flexbox
<br />flexbox
<br />flexbox
<br />
</div>
<div class="down">flexbox
<br />flexbox
<br />flexbox
<br />
</div>
</div>
<div class="calc container">
<div class="up">calc
<br />calc
<br />calc
<br />
</div>
<div class="down">calc
<br />calc
<br />calc
<br />
</div>
</div>
<div class="overflow container">
<div class="up">overflow
<br />overflow
<br />overflow
<br />
</div>
<div class="down">overflow
<br />overflow
<br />overflow
<br />
</div>
</div>
Kotak
grid
Tata letak CSS menawarkan opsi lain, meskipun mungkin tidak sesederhana model Flexbox. Namun, ini hanya membutuhkan gaya elemen penampung:
.container { display: grid; grid-template-rows: 100px }
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 Fleksibelflexbox
CSS3 ( ) sekarang didukung dengan baik dan dapat sangat mudah diterapkan. Karena fleksibel, ia bahkan berfungsi ketika #up
tidak memiliki ketinggian yang ditentukan.
#container { display: flex; flex-direction: column; }
#down { flex-grow: 1; }
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 CSS3calc
, seperti yang ditunjukkan Alvaro dalam jawabannya , tetapi membutuhkan tinggi dari anak pertama untuk menjadi nilai yang diketahui:
#up { height: 100px; }
#down { height: calc( 100% - 100px ); }
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:
#container { width: 300px; height: 300px; border: 1px solid red; display: table;}
#up { background: green; display: table-row; height: 0; }
#down { background: pink; display: table-row;}