一. 定寬 + 自適應
期望效果: 左側寬度固定, 右側寬度自適應
公共代碼:
html:
<div class="parent">
<div class="left">
<p>left menu</p>
</div>
<div class="right">
<li>right item1</li>
<li>right item2</li>
<li>right item3</li>
</div>
</div>
css:
html, body, p, ul, li {
margin: 0;
padding: 0;
}
div.left {
background: #d2e3e3;
}
div.right {
background: #77DBDB;
}
方案一: float
.left {
float: left;
width: 100px;
}
.right {
margin-left: 100px; // 或 overflow: hidden
}
方案二: table
.parent {
display: table;
width: 100%;
table-layout: fixed; // https://blog.csdn.net/qq_36699230/article/details/80658742
.left, .right {
display: table-cell;
}
.left {
width: 100px;
}
}
方案三: flex
.parent {
display: flex;
.left {
width: 100px; // 或 flex: 0 0 100px;
}
.right {
flex: 1;
}
}
- 兩(多)列定寬 + 自適應 佈局使用上述方案均可, 對於中間一列的設置與第一列保持一致即可
- 不定寬(兩列或多列) + 自適應 佈局使用上述方案均可, 對於中間一列的設置與第一列保持一致即可, 不同的是不需要特別設置寬度, 需要特別注意的是使用table佈局時的情況, 如下:
.parent {
display: table;
width: 100%;
// 設置table-layout: fixed; 會使單元格等寬, 因此此處不設置
.left, .right {
display: table-cell;
}
.left {
width: 0.1%; // 寬度設置一個極小值, 由於沒有設置table-layout: fixed; 所以寬度由內容決定
white-space:nowrap;
}
}
二. 等寬(兩/多列)佈局
公共代碼:
html
<div class="parent">
<div class="column">
<p>1</p>
</div>
<div class="column">
<p>2</p>
</div>
<div class="column">
<p>3</p>
</div>
<div class="column">
<p>4</p>
</div>
</div>
css
html, body, div, p {
margin: 0;
padding: 0;
}
.parent {
width: 800px;
border: 1px solid coral;
.column {
height: 30px;
background: bisque;
p {
background: #f0b979;
height: 30px;
}
}
}
方案一: float (個人並不喜歡, 寫法很死, 需要知道有多少列, 而且有邊框的情況下會超出容器)
.parent {
margin-left: -20px;
overflow: hidden;
.column {
float: left;
width: 25%;
padding-left: 20px;
box-sizing: border-box;
}
}
方案二: flex (推薦)
.parent {
display: flex;
.column {
flex: 1;
&+.column {
margin-left: 10px;
}
}
}
三. 等高佈局
推薦方案:
.parent {
display: flex;
}
.left, .right {
flex: 1;
}