#down
शेष स्थान को भरने के लिए बच्चे का विस्तार करना #container
विभिन्न तरीकों से पूरा किया जा सकता है जो उस ब्राउज़र समर्थन पर निर्भर करता है जिसे आप प्राप्त करना चाहते हैं और #up
उसकी परिभाषित ऊंचाई है या नहीं ।
नमूने
.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>
ग्रिड
CSS का grid
लेआउट अभी तक एक और विकल्प प्रदान करता है, हालांकि यह फ्लेक्सबॉक्स मॉडल की तरह सीधा नहीं हो सकता है। हालाँकि, इसके लिए केवल कंटेनर तत्व को स्टाइल करना आवश्यक है:
.container { display: grid; grid-template-rows: 100px }
grid-template-rows
एक निश्चित 100px ऊंचाई के रूप में पहली पंक्ति को परिभाषित करता है, और रहने पंक्तियों स्वचालित रूप से शेष स्थान को भरने के खिंचाव जाएगा।
मुझे पूरा यकीन है कि IE11 को -ms-
उपसर्गों की आवश्यकता होती है, इसलिए उन ब्राउज़रों में कार्यक्षमता को मान्य करना सुनिश्चित करें जिन्हें आप समर्थन करना चाहते हैं।
flexbox
CSS3 का लचीला बॉक्स लेआउट मॉड्यूल ( flexbox
) अब अच्छी तरह से समर्थित है और इसे लागू करना बहुत आसान हो सकता है। क्योंकि यह लचीला है, यह तब भी काम करता है जब #up
इसकी कोई परिभाषित ऊंचाई नहीं होती है।
#container { display: flex; flex-direction: column; }
#down { flex-grow: 1; }
यह ध्यान रखना महत्वपूर्ण है कि कुछ फ्लेक्सबॉक्स गुणों के लिए IE10 और IE11 समर्थन छोटी गाड़ी हो सकती है, और IE9 या नीचे का कोई समर्थन नहीं है।
परिकलित ऊँचाई
एक और आसान उपाय CSS3 कीcalc
कार्यात्मक इकाई का उपयोग करना है , जैसा कि अल्वारो अपने उत्तर में बताते हैं , लेकिन इसके लिए पहले बच्चे की ऊंचाई ज्ञात मूल्य की आवश्यकता होती है:
#up { height: 100px; }
#down { height: calc( 100% - 100px ); }
यह बहुत व्यापक रूप से समर्थित है, एकमात्र उल्लेखनीय अपवाद <= IE8 या Safari 5 (कोई समर्थन नहीं) और IE9 (आंशिक समर्थन) है। कुछ अन्य मुद्दों में ट्रांसफ़ॉर्म या बॉक्स-शैडो के साथ संयोजन में कैल्क का उपयोग करना शामिल है , इसलिए यदि आपकी चिंता है तो कई ब्राउज़रों में परीक्षण करना सुनिश्चित करें।
अन्य विकल्प
बड़े समर्थन की जरूरत है, तो आप जोड़ सकते हैं height:100%;
करने के लिए #down
एक चेतावनी के साथ गुलाबी div पूरी ऊंचाई कर देगा। यह कंटेनर के लिए अतिप्रवाह का कारण होगा, क्योंकि #up
इसे नीचे धकेल रहा है।
इसलिए, आप overflow: hidden;
इसे ठीक करने के लिए कंटेनर में जोड़ सकते हैं ।
वैकल्पिक रूप से, यदि ऊँचाई #up
तय की गई है, तो आप इसे कंटेनर के भीतर पूरी तरह से रख सकते हैं, और एक पेडिंग-टॉप को जोड़ सकते हैं #down
।
और, फिर भी एक अन्य विकल्प तालिका प्रदर्शन का उपयोग करना होगा:
#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;}