圣杯布局
圣杯布局两边跟中间同级,中间处在两边的上面。不妨假设两边的宽度为200px。
实现过程:
- 父级盒子不要给宽度,设置
padding: 0 200px; - 所有的盒子设置
float: left; - 中间盒子设置
width: 100%; - 目前左右两边的盒子都处于第二行,将左边的盒子设置
margin-left: -100%;,从而提升到第一行,再将盒子的位置往左调整一点,position: relative; left: -200px;。 - 再将右边的盒子设置
margin-right: -200px;,往上提升一行并且正好处于最右边的位置。

image.png
<div class="main">
<div class="content">content</div>
<div class="left">left</div>
<div class="right">right</div>
</div>
* {
margin: 0;
padding: 0;
}
.main {
min-height: 400px;
padding: 0 200px;
text-align: center;
}
.content,.left,.right {
float: left;
}
.content {
width: 100%;
min-height: 400px;
background: lightcoral;
}
.left,.right {
width: 200px;
min-height: 400px;
background: lightsalmon;
}
.left {
margin-left: -100%;
position: relative;
left: -200px;
}
.right {
margin-right: -200px;
}
双飞翼布局
双飞翼布局左右两边跟中间不同级,中间的盒子包含在父盒子main中,左右两边跟main 同级,左右两边通过margin-left像翅膀一样插在中间的两边
实现方式:
- 设置
main,left,right都为左浮动,脱离正常文本流,float: left;。 - 设置
main的宽度为100%,width: 100%; - 设置
left的margin-left: -100%;,从而提升到上一行的最左边 - 设置
right的margin-left: -200px;,从而提升到上一行的最右边
<div class="main">
<div class="content">content</div>
</div>
<div class="left">left</div>
<div class="right">right</div>
* {
margin: 0;
padding: 0;
}
.main {
min-height: 400px;
width: 100%;
text-align: center;
}
.main,.left,.right {
float: left;
}
.content {
margin: 0 200px;
min-height: 400px;
background: lightcoral;
}
.left,.right {
width: 200px;
min-height: 400px;
background: lightsalmon;
}
.left {
margin-left: -100%;
}
.right {
margin-left: -200px;
}
Calc实现
中间盒子与左右两边的盒子都属于同级,且按照左->中->右的顺序排列。
实现方式:
- 设置父盒子的宽度为100%,
width: 100%; - 设置子盒子全为左浮动,
float: left; - 设置中间盒子的宽度为
width: calc(100% - 400px);
<div class="main">
<div class="left">left</div>
<div class="content">content</div>
<div class="right">right</div>
</div>
* {
margin: 0;
padding: 0;
text-align: center;
}
.main {
min-height: 400px;
width: 100%;
}
.content,.left,.right {
float: left;
}
.content {
width: calc(100% - 400px);
min-height: 400px;
background: lightcoral;
}
.left,.right {
width: 200px;
min-height: 400px;
background: lightsalmon;
}
参考:css经典布局