CSS三栏布局实现,左右固定,中间自适应

2019-04-08  本文已影响0人  木子方是个小太阳

一:Float元素浮动实现三栏布局

实现方式:左右元素浮动,中间元素左右marign值撑开两边距离。
例:


    .left,.right{
        width:200px;
        height:100px;
        background: pink;
        float: left;
    }
    .center{
        background:red;
    }
    .right{
        float: right;
    }

    <body>
        <div class="left">left</div>
        <div class="right">rigth</div>
        <div class="center">今天天气好晴朗,处处好风光!今天天气好晴朗,处处好风光!今天天气好晴朗,处处好风光!</div>
    </body>

此时看似没有问题,可是如果中间内容过多,超出左右两边高度,我们将看到文字环绕问题,如下如所示。

解决办法:

①:给中间元素,设置margin值,左右margin为左右浮动元素的宽度。
.left,.right{ width:200px; height:100px; background: pink; float: left; } .center{ background:red; margin-left:200px; margin-right:200px; } .right{ float: right; }
①:如果想要三栏高度保持一致,就给三栏元素设置相同高度;超出加垂直方向滚动条overflow-y:auto;

细心的同学可能发现,我们的DOM结构为左-右-中,而不是左中右,这是因为浏览器解决代码是从上往下执行,如果把.center放在中间,解析时因为它是个块元素,所以当解析.right元素时,它会脱离当前文档流从下一行开始,这时候就出现了最右侧DOM下沉现象。

此方法缺点:DOM结构改变了加载顺序,右边DOM优于中间DOM加载。

Position定位实现三栏布局

父元素相对定位,子元素绝对定位

.wrap{
          position: relative;
      }
      .left{
          position: absolute;
          top:0;
          left: 0;
          width: 200px;
          height: 100px;
          background:pink;
      }
      .right{
          position: absolute;
          top:0;
          right: 0;
          width: 200px;
          height: 100px;
          background:pink;
      }
      .center{
          margin:0 200px;
          background:red;

      }

      <div class="wrap">
          <div class="left">left</div>
          <div class="center">今天天气好晴朗,处处好风光!</div>
          <div class="right">rigth</div>
      </div>

补充flex左右布局,左边固定,右边自适应,并且两列等高自适应

   .main{
      width: 200px;
      display: flex; 
    }
    .title{
      width: 80px;
    }
    .content{
      flex:1;
    }
    <div class="main">
      <div class="title">我是标题</div>
      <div class="content">我说内容我说内容我说内容我说内容我说内容</div>
    </div>
上一篇下一篇

猜你喜欢

热点阅读