#down
Çocuğu kalan alanı dolduracak şekilde genişletmek, #container
elde etmek istediğiniz tarayıcı desteğine ve #up
tanımlı bir yüksekliğe sahip olup olmadığına bağlı olarak çeşitli şekillerde gerçekleştirilebilir .
Örnekler
.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>
Kafes
CSS'nin grid
düzeni, Flexbox modeli kadar basit olmasa da, başka bir seçenek daha sunar. Ancak, yalnızca kapsayıcı öğesinin stilini gerektirir:
.container { display: grid; grid-template-rows: 100px }
grid-template-rows
Sabit bir 100 piksel yüksekliği olarak ilk satırı tanımlar ve sıralar otomatik olarak geri kalan boşluğun doldurulması için streç kalır.
IE11'in -ms-
önekler gerektirdiğinden oldukça eminim , bu yüzden desteklemek istediğiniz tarayıcılardaki işlevselliği doğruladığınızdan emin olun.
Flexbox
CSS3'ün Esnek Kutu Yerleşimi Modülü ( flexbox
) artık iyi desteklenmektedir ve uygulanması çok kolay olabilir. Esnek olduğu için, #up
belirli bir yüksekliğe sahip olmadığında bile çalışır .
#container { display: flex; flex-direction: column; }
#down { flex-grow: 1; }
Bazı flexbox özellikleri için IE10 & IE11 desteğinin hatalı olabileceğini ve IE9 veya altının hiç destek olmadığını unutmamak önemlidir.
Hesaplanan Yükseklik
Alvaro'nun cevabında belirttiği gibi bir başka kolay çözüm de CSS3calc
işlevsel birimini kullanmaktır , ancak bu, ilk çocuğun boyunun bilinen bir değer olmasını gerektirir:
#up { height: 100px; }
#down { height: calc( 100% - 100px ); }
Tek önemli istisnalar <= IE8 veya Safari 5 (destek yok) ve IE9 (kısmi destek) olmakla birlikte oldukça yaygın bir şekilde desteklenmektedir. Diğer bazı sorunlar arasında dönüşüm veya kutu gölgesi ile birlikte calc kullanımı yer alır , bu nedenle sizi ilgilendiriyorsa birden çok tarayıcıda test ettiğinizden emin olun.
Diğer Alternatifler
Eski destek gerekiyorsa, eklemek olabilir height:100%;
için #down
bir uyarı ile, pembe div tam yüksekliğini yapacaktır. Kap için taşmaya neden olur, çünkü #up
onu aşağı iter.
Bu nedenle, bunu overflow: hidden;
düzeltmek için konteynere ekleyebilirsiniz .
Alternatif olarak, yüksekliği #up
sabitse, kesinlikle kabın içinde konumlandırabilir ve bir dolgu tepesi ekleyebilirsiniz #down
.
Ve yine bir başka seçenek, bir tablo ekranı kullanmak olacaktır:
#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;}