CSS实现两栏布局和三栏布局
1.两栏布局
1.1 什么是两栏布局

如上界面分左右两列,左侧定宽,右侧占剩余的宽。这就是典型的两栏布局,一半后台管理都是这么设计的。左侧是菜单导航,右侧是内容。
1.2 利用BFC和float的实现
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>两栏布局-float实现</title>
<style>
html,body{
margin: 0;
padding: 0;
}
.parent {
height: 400px;
overflow: hidden;
}
.left {
float: left;
width: 200px;
background-color: antiquewhite;
height: 400px;
}
.right {
margin-left: 210px;
background-color: aqua;
height: 400px;
}
</style>
</head>
<body>
<div class="parent">
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
界面如下:

1.3 利用flex实现
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>两栏布局-flex实现</title>
<style>
html,body{
margin: 0;
padding: 0;
}
.parent {
height: 400px;
display: flex;
}
.left {
width: 200px;
background-color: #d9534f;
}
.right {
flex: 1;
background-color: #e6a23c
}
</style>
</head>
<body>
<div class="parent">
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
界面如下:

2.三栏布局

2.1 两边用float中间用margin
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>三栏布局-两边用float中间用margin</title>
<style>
html,body{
margin: 0;
padding: 0;
}
.parent {
height: 400px;
overflow: hidden;
}
.left {
width: 200px;
background-color: antiquewhite;
height: 400px;
float: left;
}
.right {
width: 150px;
background-color: aqua;
height: 400px;
float: right;
}
.middle {
background-color: red;
height: 400px;
margin-left: 210px;
margin-right: 160px;
}
</style>
</head>
<body>
<div class="parent">
<div class="left"></div>
<div class="right"></div>
<div class="middle"></div>
</div>
</body>
</html>
2.2 两边用absolute中间用margin
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>三栏布局-两边用absolute中间用margin</title>
<style>
html,body{
margin: 0;
padding: 0;
}
.parent {
position: relative;
}
.left {
width: 200px;
background-color: antiquewhite;
height: 400px;
position: absolute;
top: 0;
left: 0;
}
.right {
width: 150px;
background-color: aqua;
height: 400px;
position: absolute;
top: 0;
right: 0;
}
.middle {
background-color: red;
height: 400px;
margin-left: 210px;
margin-right: 160px;
}
</style>
</head>
<body>
<div class="parent">
<div class="left"></div>
<div class="right"></div>
<div class="middle"></div>
</div>
</body>
</html>
2.3 两边用float和负margin
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>三栏布局-两边用absolute中间用margin</title>
<style>
html,body{
margin: 0;
padding: 0;
}
.left,
.right,
.main {
height: 200px;
line-height: 200px;
text-align: center;
}
.main-wrapper {
float: left;
width: 100%;
}
.main {
margin: 0 110px;
background: black;
color: white;
}
.left{
float: left;
width: 100px;
margin-left: -100%;
background: rebeccapurple;
}
.right {
float: left;
width: 100px;
margin-left: -100px;
background: red;
}
</style>
</head>
<body>
<div class="main-wrapper">
<div class="main"></div>
</div>
<div class="left"></div>
<div class="right"></div>
</body>
</html>
界面如下:

2.4 flex
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>三栏布局-flex</title>
<style>
html,body{
margin: 0;
padding: 0;
}
.wrap {
display: flex;
justify-content: space-between;
}
.left,
.right,
.middle {
height: 100px;
}
.left {
width: 200px;
background: coral;
}
.right {
width: 120px;
background: lightblue;
}
.middle {
background: #555;
flex: 1;
margin: 0 20px;
}
</style>
</head>
<body>
<div class="wrap">
<div class="left"> </div>
<div class="middle"> </div>
<div class="right"> </div>
</div>
</body>
</html>
界面如下:

3.总结
(1)两栏布局
- float实现
- 给左侧区域使用float;
- 右侧区域用margin-left:100px;
- 给父元素开BFC(overflow:hidden),防止下方元素飞到上方区域
- flex实现
- 父元素 display:flex;
- 子元素 left:width:100px;
- 子元素 right:flex:1;等同于flex:1 1 auto;
(2)三栏布局(圣杯布局)
- 两边用float,中间用margin
- 两边用position,中间用margin
- 两边用float和负margin(这个不用管)
- flex实现
- 父元素:display:flex;justify-content:space-between;
- 子元素middle{flex:1}
- grid实现(与flex类似)

632

被折叠的 条评论
为什么被折叠?



