การขยาย#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>
กริด
grid
เลย์เอาต์ของ CSS มีอีกทางเลือกหนึ่งแม้ว่าอาจจะไม่ตรงไปตรงมาเท่าโมเดล Flexbox อย่างไรก็ตามต้องมีการกำหนดสไตล์องค์ประกอบคอนเทนเนอร์เท่านั้น:
.container { display: grid; grid-template-rows: 100px }
grid-template-rows
กำหนดแถวแรกเป็นคงที่ 100px สูงและยังคงอยู่แถวโดยอัตโนมัติจะยืดไปเติมช่องว่างที่เหลืออยู่
ฉันค่อนข้างมั่นใจว่า IE11 ต้องการ-ms-
คำนำหน้าดังนั้นอย่าลืมตรวจสอบการทำงานในเบราว์เซอร์ที่คุณต้องการรองรับ
Flexbox
ตอนนี้โมดูลเค้าโครงกล่องที่ยืดหยุ่นflexbox
ของ CSS3 ( )ได้รับการสนับสนุนอย่างดีและสามารถนำไปใช้งานได้ง่ายมาก เนื่องจากมีความยืดหยุ่นจึงใช้งานได้แม้#up
ไม่มีความสูงที่กำหนดไว้
#container { display: flex; flex-direction: column; }
#down { flex-grow: 1; }
สิ่งสำคัญคือต้องทราบว่าการรองรับ IE10 และ IE11 สำหรับคุณสมบัติ Flexbox บางอย่างอาจเป็นข้อบกพร่องและ IE9 หรือต่ำกว่านั้นไม่มีการรองรับเลย
ความสูงที่คำนวณได้
วิธีแก้ปัญหาง่ายๆอีกวิธีหนึ่งคือการใช้หน่วยฟังก์ชันCSS3 calc
ตามที่ Alvaro ชี้ให้เห็นในคำตอบของเขาแต่ต้องใช้ความสูงของลูกคนแรกเป็นค่าที่ทราบ:
#up { height: 100px; }
#down { height: calc( 100% - 100px ); }
ได้รับการสนับสนุนอย่างกว้างขวางโดยมีข้อยกเว้นที่โดดเด่นเพียงอย่างเดียวคือ <= IE8 หรือ Safari 5 (ไม่รองรับ) และ IE9 (รองรับบางส่วน) ปัญหาอื่น ๆ รวมถึงการใช้calcร่วมกับการแปลงร่างหรือbox-shadowดังนั้นอย่าลืมทดสอบในหลายเบราว์เซอร์หากเป็นเรื่องที่คุณกังวล
ทางเลือกอื่น ๆ
หากต้องการการสนับสนุนที่เก่ากว่าคุณสามารถเพิ่ม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;}