三栏布局总结(左右固定宽度 中间自适应)

圣杯布局和双飞翼布局(其实是一回事)都是实现的三栏布局。

浮动布局(float + margin)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<div class="container">
<div class="left">Left</div>
<!-- 右栏部分要写在中间内容之前 -->
<div class="right">Right</div>
<div class="main">Main</div>
</div>

body,html,.container{
height: 100%;
padding:0;
margin: 0;
}
/*左边栏左浮动*/
.left{
float:left;
height:100%;
width:200px;
background:#333;
}
/*中间栏自适应*/
.main{
height:100%;
margin:0 200px;
background: red;
}
/*右边栏右浮动*/
.right{
float:right;
height:100%;
width:200px;
background:#333;
}
  • 优点:快捷 简单 兼容性较好
  • 缺点: 有局限性 脱离文档流 需要清除浮动等

绝对布局(position)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<div class="container">
<div class="left">Left</div>
<div class="main">Main</div>
<div class="right">Right</div>
</div>

body,html,.container{
height: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
/*左右进行绝对定位*/
.left,.right{
position: absolute;
height:100%;
top: 0;
background: #333;
}
.left{
left: 0;
width: 200px;
}
.right{
right: 0;
width: 200px;
}
/*中间用margin空出左右元素所占的空间*/
.main{
height:100%;
margin: 0 200px;
background: red;
}
/*或者中间也进行绝对定位*/
.main{
position: absolute;
height:100%;
left: 200px;
right:200px;
background: red;
}
  • 优点:简单粗暴
  • 缺点: 脱离文档流 高度未知会出现问题 可用性差

弹性盒子布局(flex)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<div class="container">
<div class="left">Left</div>
<div class="main">Main</div>
<div class="right">Right</div>
</div>

body,html{
height: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
.container{
display: flex;
}
.left{
width:200px;
background: red;
}
.main{
flex: 1;
background: blue;
}
.right{
width:200px;
background: red;
}
  • 优点:比较完美 移动端首选
  • 缺点: 不兼容 ie9 及以下

表格布局(table)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<div class="container">
<div class="left">Left</div>
<div class="main">Main</div>
<div class="right">Right</div>
</div>

body,html{
height: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
.container{
display: table;
width:100%;
}
.container>div{
display: table-cell;
}
.left{
width: 200px;
background: red;
}
.main{
background: blue;
}
.right{
width: 200px;
background: red;
}
  • 优点:兼容性很好(ie8 及以上) 父元素高度会被子元素撑开(不担心高度塌陷)
  • 缺点: seo 不友好 当其中一个单元格高度超出的时候,其他的单元格也是会跟着一起变高的

网格布局(Grid)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<div class="container">
<div class="left">Left</div>
<div class="main">Main</div>
<div class="right">Right</div>
</div>

body,html{
height: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
.container{
display: grid;
width: 100%;
grid-template-rows: 100px; /*设置行高*/
grid-template-columns: 200px auto 200px; /*设置列数属性*/
}
.left{
background: red;
}
.main{
background: blue;
}
.right{
background:red;
}
  • 优点:简单强大 解决二维布局问题
  • 缺点: 不兼容 ie9 及以下

总结

布局方案 实现 优点 缺点
Float布局 左右中三列,左列左浮动,右列右浮动,中间列设置左右margin 比较简单,兼容性也比较好 浮动元素脱离文档流,使用的时候只需要注意一定要清除浮

动。| |Position布局|左中右三列(无顺序),根据定位属性去直接设置各个子元素位置|快捷,设置很方便|元素脱离了文档流,后代元素也脱离了文档流,高度未知的时候, 会有问题,有效性和可使用性比较差| |Table布局|左中右三列,父元素display: table;子元素display: table-cell;居中子元素不设宽度|使用起来方便,兼容性也不存在问题|①无法设置栏边距;② 对seo不友好;③当其中一个单元格高度超出的时候,两侧的单元格也是会跟着一起变高的| |Flex布局|左中右三列,父元素display: flex;两侧元素设宽;居中子元素flex: 1;|比较完美|存在IE上兼容性问题,只能支持到IE9以上| |Grid布局|左中右三列,父元素display: grid;利用网格实现|最强大和最简单|兼容性不好,IE10+上支持,而且也仅支持部分属性|

本文结束感谢您的阅读

本文标题:三栏布局总结(左右固定宽度 中间自适应)

文章作者:陈宇(cosyer)

发布时间:2020年05月09日 - 00:05

最后更新:2020年07月17日 - 01:07

原始链接:http://mydearest.cn/2020/%E4%B8%89%E6%A0%8F%E5%B8%83%E5%B1%80%E6%80%BB%E7%BB%93.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!