實務上常遇到只有一些 column 要指定高度,但最後剩下的 column 自動佔據剩餘高度即可,可用 calc() 或 flex = 1 達成。
Version
CSS 3
calc()
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>HTML Lab</title>
</head>
<body>
<main class="box">
<div class="row1">row1</div>
<div class="row2">row2</div>
</main>
</body>
<style>
:root {
--row1Height: 50px;
}
.box {
height: 200px;
.row1 {
height: var(--row1Height);
}
.row2 {
height: calc(100% - var(--row1Height));
}
}
</style>
</html>
Line 15
:root {
--row1Height: 50px;
}
--col1Width:定義 CSS 變數
Line 19
.box {
height: 200px;
}
height:設定外層高度
Line 22
.row1 {
height: var(--row1Height);
}
height:使用 CSS 變數定義 row1 高度
Line 26
.row2 {
height: calc(100% - var(--row1Height));
}
height:使用calc()計算剩餘高度
flex: 1
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>HTML Lab</title>
</head>
<body>
<main class="box">
<div class="row1">row1</div>
<div class="row2">row2</div>
</main>
</body>
<style>
.box {
display: flex;
flex-flow: column;
height: 200px;
.row1 {
height: 50px;
}
.row2 {
flex: 1;
}
}
</style>
</html>
Line 15
.box {
display: flex;
flex-flow: column;
height: 200px;
}
display: flex:使用 flex 處理剩餘高度flex-grow: column:flex 以垂直排版height: 200px:設定外層高度
Line 20
.row1 {
height: 50px;
}
height:直接定義 row1 高度
Line 24
.row2 {
flex: 1;
}
flex: 1:相當於flex-grow: 1,也就是將以1比例平分剩餘高度
Conclusion
calc()算最傳統寫法,透過計算方式佔據剩餘寬度flex: 1最較新寫法,利用 flex 的flex-grow以比例方式處理剩餘寬度