常见布局方式
两栏布局
基础部分
1 | <div class="container"> |
1 | .left, .right { |
此时.left
和.right
各自独占一行
将.left
和.right
排成一行,有三种方法
设置
display
为inline-block
设置了 inline-block 的两个 div 之间会有间距
1
2
3.left, .right {
display: inline-block;
}可以通过
font-size
消除间隔,并在子元素中重新设置,同时设置.right
宽度1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16.container {
font-size: 0;
}
.left, .right {
height: 150px;
display: inline-block;
font-size: medium;
}
.left {
width: 100px;
background-color: pink;
}
.right {
width: calc(100% - 105px);
background-color: aqua;
}使用
float
,有三种实现方式设置
.left
为 左浮动,同时设置.right
的margin
值1
2
3
4
5
6
7
8
9
10
11
12.container {
overflow: hidden;
}
.left {
float: left;
width: 100px;
background-color: pink;
}
.right {
margin-left: 100px;
background-color: aqua;
}设置
.left
和.right
均向左浮动,计算.right
的宽度值1
2
3
4
5
6
7
8
9
10
11
12
13.container {
overflow: hidden;
}
.left {
float: left;
width: 100px;
background-color: pink;
}
.right {
float: left;
width: calc(100% - 100px);
background-color: aqua;
}设置
.left
向左浮动,让.right
形成BFC,.right
就不会和.left
重合了。BFC不会忽视浮动元素。1
2
3
4
5
6
7
8
9
10
11
12.container {
overflow: hidden;
}
.left {
float: left;
width: 100px;
background-color: pink;
}
.right {
overflow: auto;
background-color: aqua;
}
使用
absolute
1
2
3
4
5
6
7
8
9
10
11
12.container {
position: relative;
}
.left {
width: 100px;
background-color: pink;
position: absolute;
}
.right {
margin-left: 100px;
background-color: aqua;
}
最终结果
三栏布局
三栏布局主要是圣杯布局和双飞翼布局,两者都是两边固定宽度,中间自适应的三栏布局,并且主要内容要优先渲染,按照 DOM 从上至下的加载原则,中间的自适应部分要放在前面。
圣杯布局
基础框架
1 | <div class="container"> |
1 | body { |
样式调整
设置左浮动
1
2
3
4
5
6.container {
overflow: hidden; /* 清除浮动 */
}
.center, .left, .right {
float: left;
}让
.left
和.right
上去,因为 .center 的宽度是 100%,.left
要回到.center
的最左边,便是要向左移动.center
的宽度,即100%,.left
移动了之后,.right
会自动补上.left
的空位,此时,.right
想要达到.center
的最右边,只需要向左移动它自己本身的宽度就可以了,即200px。1
2
3
4
5
6.left {
margin-left: -100%;
}
.right {
margin-left: -200px;
}此时
.left
、.right
都覆盖在.center
的上面。圣杯布局的做法是先设置父元素.container
的padding
属性,给.left
、.right
留出空间,两者需要的空间大小便是两者的宽度,然后只需将.left
、.right
分别向左向右拉到准备的空位就好了。1
2
3
4
5
6
7
8
9
10
11
12.container {
padding-left: 100px;
padding-right: 200px;
}
.left {
position: relative;
left: -100px;
}
.right {
position: relative;
right: -200px;
}
双飞翼布局
双飞翼布局与圣杯布局的前部分一样,在给左右两边元素留出位置的思路有区别。圣杯布局是设置了父元素的padding
留出空间,之后利用relative
来归位。双飞翼则是多加了一个div
,将中间自适应部分包裹起来,利用子div
的margin
来给左右元素留空间。
1 | <div class="container"> |
1 | body { |
在圣杯布局中,无限缩小屏幕(假设没有设置 body 的最小宽度),当 .main 的宽度小于 .left 时,会出现布局错乱