两边固定中间自适应的解决方案及其区别

方式一:左右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;
在这里插入图片描述

  1. 没有margin:0 80px; 的效果 ,左右块元素虽然脱离文档流,当时中间的自适应没有从最左边开始,有一种环绕的效果。
  2. 中间的自适应要放在第三个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;的效果
在这里插入图片描述
在这里插入图片描述

  1. 没有margin:0 30px; 的效果 ,左右块元素虽然脱离文档流,当时中间的自适应从最左边开始,被压在了左边的浮动块下面。

  2. 中间的自适应要放在第三个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 111px的情况下,左右2边都变短了,但是中间是要在非常窄的情况,一般状态下,左右不会变化

margin:0 -45px的情况下,左右2边也被污染了。

  1. 有margin:0 30px; 的效果 ,左右块元素不会脱离文档流,当时中间的自适应块元素会污染左右的块元素。

区别:没有margin:0 80px 的效果

左右固定,没有污染
在这里插入图片描述

  1. 中间的自适应要放在第二个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;在这里插入图片描述

  1. 中间层margin:0 -21px,中间层在左边的上面,中间层在右边的下面。

中间的margin: 0 36px;左右的不受影响
中间的margin: 0 221px;左右的受影响

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值