前言
双列(两栏)布局和三列(三栏)布局是最简单的布局了,小试牛刀,并不复杂,本文布局均使用 float、position、flex、grid 四种方法实现并讲解了基本思路。
双列(两栏)布局
实现自适应双列(两栏)布局。 双列(两栏)布局一般是左侧宽度固定,右侧自适应。
页面 HTML 代码如下所示:
<div class = "container">
<div class = "left">left</div>
<div class = "right">right</div>
</div>
float 实现
container 用 overflow: hidden; 开启 BFC,解决高度塌陷。
left 设置向左浮动,right 使用 overflow: hidden; 开启 BFC 。
.container {
border: 1px solid black;
overflow: hidden;
}
.left {
float: left;
border: 1px solid black;
width: 100px;
}
.right {
overflow: hidden;
margin-left: 100px;
border: 1px solid black;
}
或者在 right 使用 margin-left: 100px; 将左边区域空开。
position 实现
使用绝对定位,父级 container 设置 relative,子集设置 absolute,左边栏设置 left: 0; 使其紧靠左边,右边栏设置 left: 100px; right: 0px; 使其自适应。
.container {
position: relative;
}
.left {
position: absolute;
left: 0;
border: 1px solid black;
width: 100px;
}
.right {
position: absolute;
left: 100px;
right: 0px;
border: 1px solid black;
}
或者 right 也可以使用 margin-left: 100px; 将左边区域空开。
flex 实现
使用 flex 布局,container 开启 flex,left 固定宽度,right 使用 flex: 1; 使其自适应。
.container {
display: flex;
border: 1px solid black;
}
.left {
border: 1px solid black;
width: 100px;
}
.right {
flex: 1;
border: 1px solid black;
}
grid 实现
使用 grid 布局实现十分简单,划分好格子就可以了,但要注意的是以下写法最后生成的是隐式网格,因为并没有定义 grid-template-rows。
.container {
display: grid;
grid-template-columns: 100px 1fr;
border: 1px solid black;
}
.left {
border: 1px solid black;
}
.right {
border: 1px solid black;
}
三列(三栏)布局
实现自适应三列(三栏)布局。 三列(三栏)布局一般是左右两侧宽度固定,中间自适应。
页面 HTML 代码如下所示:
<div class = "container">
<div class = "left">left</div>
<div class = "center">center</div>
<div class = "right">right</div>
</div>
float 实现
container 用 overflow: hidden; 开启 BFC,解决高度塌陷。
left 设置向左浮动,right 设置向左浮动,center 使用 overflow: hidden; 开启 BFC 。
这种方法的
center盒子必须写在最后,因为如果浮动元素的上边是一个没有浮动的块元素,则浮动元素无法上移。<div class = "container"> <div class = "left">left</div> <div class = "right">right</div> <div class = "center">center</div> </div>
.container {
overflow: hidden;
border: 1px solid black;
}
.left {
float: left;
border: 1px solid black;
width: 100px;
}
.center {
overflow: hidden;
/* margin: 0px 100px; */
border: 1px solid black;
}
.right {
float: right;
border: 1px solid black;
width: 100px;
}
position 实现
使用绝对定位,父级 container 设置 relative,子集设置 absolute,左边栏设置 left: 0; 使其紧靠左边,右边栏设置 right: 0px; 使其紧靠右边,中间设置 left: 100px; right: 100px; 隔开,用 margin 也可以。
.container {
position: relative;
}
.left {
position: absolute;
left: 0px;
border: 1px solid black;
width: 100px;
}
.center {
position: absolute;
left: 100px;
right: 100px;
border: 1px solid black;
}
.right {
position: absolute;
right: 0px;
border: 1px solid black;
width: 100px;
}
flex 实现
使用 flex 布局,container 开启 flex,left、right 固定宽度,center 使用 flex: 1; 使其自适应。
.container {
display: flex;
}
.left {
border: 1px solid black;
width: 100px;
}
.center {
flex: 1;
border: 1px solid black;
}
.right {
border: 1px solid black;
width: 100px;
}
grid 实现
使用 grid 布局,划分好格子,进行自适应。
.container {
display: grid;
grid-template-columns: 100px 1fr 100px;
}
.left {
border: 1px solid black;
}
.center {
border: 1px solid black;
}
.right {
border: 1px solid black;
}