中间自适应,两边固定的布局三种实现方式
2021-03-16 本文已影响0人
夏liao夏天
圣杯布局
圣杯布局两边跟中间同级,中间处在两边的上面。不妨假设两边的宽度为200px
。
实现过程:
- 父级盒子不要给宽度,设置
padding: 0 200px;
- 所有的盒子设置
float: left;
- 中间盒子设置
width: 100%;
- 目前左右两边的盒子都处于第二行,将左边的盒子设置
margin-left: -100%;
,从而提升到第一行,再将盒子的位置往左调整一点,position: relative; left: -200px;
。 - 再将右边的盒子设置
margin-right: -200px;
,往上提升一行并且正好处于最右边的位置。
<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经典布局