两边固定中间自适应的解决方案及其区别
方式一:左右float浮动脱离文档流,中间水平居中布局(中间层放第三个位置)
*{
margin:0;
padding:0;
}
.left,.right {
width:80px;
background:rgba(190, 18, 46,0.3);
}
.left {
float:left;
}
.right {
float:right;
}
.middle {
background:olive;
margin:0 80px;
}
<body>
<div class="left">left</div>
<div class="right">right</div>
<div class="middle">float布局,中间的自适应要放在第三个位置,float布局,左右的div块元素会脱离文档流</div>
<p>目前观察,该自适应只适合pc端,不适合移动端,有待进一步论证。</p>
<p>移动端不能自适应的原因是因为之前设的左右的宽度太宽了,不能超过375宽度</p>
</body>
区别:有margin:0 80px 的居中效果
区别:没有margin:0 80px 的居中效果
- 没有margin:0 80px; 的效果 ,左右块元素虽然脱离文档流,当时中间的自适应没有从最左边开始,有一种环绕的效果。
- 中间的自适应要放在第三个div标签的位置,如果放在中间,就会占据一格,把right挤下去。
方式二:左右display:absolute脱离文档流,中间水平居中布局(中间层放第三个位置)
*{
margin:0;
padding:0;
}
.left,.right {
position:absolute;
width:30px;
height:20px;
background:rgba(112, 160, 17,0.4);
}
.left {
left:0;
}
.right {
right:0;
}
.middle {
margin: 0 30px;
background:wheat;
}
<div class="left">left</div>
<div class="right">right</div>
<div class="middle">绝对定位布局,也会脱离文档流,如果不设置左右居中,布局就会从最左边开始</div>
区别:有margin:0 30px 的居中效果
区别:没有margin:0 30px 的效果
-
没有margin:0 30px; 的效果 ,左右块元素虽然脱离文档流,当时中间的自适应从最左边开始,被压在了左边的浮动块下面。
-
中间的自适应要放在第三个div标签的位置,如果放在中间,就会占据一格,把right挤下去。
方式三:父容器display:flex不脱离文档流,中间水平居中布局(中间层放第二个位置)
*{
margin:0;
padding:0;
}
.parent {
display:flex;
}
.left,.right {
width:80px;
height:20px;
background:rgba(146, 16, 38,0.4);
}
.middle{
flex:1;
margin:0 80px;
background:saddlebrown;
}
<div class="parent">
<div class="left">left</div>
<div class="middle">父容器display为flex的弹性布局</div>
<div class="right">right</div>
</div>
区别:有margin:0 80px 的居中效果
- 有margin:0 30px; 的效果 ,左右块元素不会脱离文档流,当时中间的自适应块元素会污染左右的块元素。
区别:没有margin:0 80px 的效果
- 中间的自适应要放在第二个div标签的位置,如果放在第三个位置,就会最左边自适应。
方式四:父容器display:table不脱离文档流,中间水平居中布局(中间层放第二个位置)
*{
margin:0;
padding:0;
}
.parent {
display:table;
width:100%;
}
.left,.right{
display:table-cell;
width:40px;
height:40px;
background:darkblue;
}
.middle{
background:saddlebrown;
}
<div class="parent">
<div class="left">left</div>
<div class="middle">父容器display:table的布局方式</div>
<div class="right">right</div>
</div>
区别没有给父元素设置width:100%
区别 有父容器设置为width:100%;
区别 中间的层放在第三个位置
区别 中间层margin:0 -21px;![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/877ab4b706b69f30a432873b1b53932e.png)
- 中间层margin:0 -21px,中间层在左边的上面,中间层在右边的下面。