面试经常考的布局(CSS布局 -- 圣杯布局 & 双飞翼布局)

按照我的理解,其实圣杯布局跟双飞翼布局的实现,目的都是左右两栏固定宽度,中间部分自适应。

在这里,实现了左(300px) 右(300px) 宽度固定,中间自适应,container部分高度保持一致。

下面我写了物种常用的方式:

通用样式

      html *{
        margin:0;
        padding:0;
      }
      .layout{
        height:200px;
        background:yellow;
        margin-bottom:20px;
        color:#fff;
        font-size:22px;
        line-height:200px;
        text-align:center;
      }
复制代码

一:float布局

<!--float布局-->
      <article class="float layout">
        <div class="left">float布局-left</div>
        <div class="right">float布局-right</div>
        <div class="middle">float布局-middle</div>
      </article>复制代码

/*float布局*/
      .float div{
        height:200px;
      }
      .float div.left{
        background:red;
        float:left;
        width:300px;
      }
      .float div.middle{
        background:#000;
      }
      .float div.right{
        background:green;
        float:right;
        width:300px;
      }
复制代码

二:position 布局

<!--position布局-->
      <article class="position layout">
        <div class="left">position布局-left</div>
        <div class="middle">position布局-middle</div>
        <div class="right">position布局-right</div>
      </article>
复制代码

/*position 布局*/
      .layout{
        position: relative;
      }
      .position div{
        height:200px;
      }
      .position div.left{
        position: absolute;
        background:red;
        width:300px;
        left:0;
        top:0;
      }
      .position div.middle{
        position: absolute;
        background:#000;
        right:300px;
        top:0;
        left:300px;
      }
      .position div.right{
        position: absolute;
        background:green;
        width:300px;
        right:0;
        top:0;
      }
复制代码

三:table-cell布局

<!--table-cell布局-->
      <article class="table-cell layout">
        <div class="left">table-cell布局-left</div>
        <div class="middle">table-cell布局-middle</div>
        <div class="right">table-cell布局-right</div>
      </article>
复制代码

/*table-cell布局*/
      .table-cell{
        display:table;
        width:100%;
      }
      .table-cell div{
        height:200px;
        display:table-cell;
      }
      .table-cell div.left{
        width:300px;
        background:red;
      }
      .table-cell div.middle{
        background:#000;
      }
      .table-cell div.right{
        width:300px;
        background:green;
      }
复制代码

四:flex 布局

<!--flex布局-->
      <article class="flex layout">
        <div class="left">flex布局-left</div>
        <div class="middle">flex布局-middle</div>
        <div class="right">flex布局-right</div>
      </article>
复制代码

/*flex 布局*/
      .flex{
        display:flex;
      }
      .flex div{
        height:200px;
      }
      .flex div.left{
        background:red;
        width:300px;
      }
      .flex div.right{
        width:300px;
        background:green;
      }
      .flex div.middle{
        background:#000;
        flex:1;
      }
复制代码

五:grid 网格布局

<!--grid网格布局-->
      <article class="grid layout">
        <div class="left">grid网格布局-left</div>
        <div class="middle">grid网格布局-middle</div>
        <div class="right">grid网格布局-right</div>
      </article>
复制代码

/*grid 网格布局*/
      .grid{
        display:grid;
        grid-template-columns: 300px auto 300px;
      }
      .grid div.left{
        background:red;
      }
      .grid div.middle{
        background:#000;
      }
      .grid div.right{
        background:green;
      }
复制代码

当然了还可以用其他方式,这里只写了常规的,面试经常会问到,能说出这几种也还是不错的,这个题还可以延伸,比如Dom渲染顺序的调整,需要将middle 自动调整宽度的内容先渲染出来,这样Dom的顺序就必须放在其他left、right两个div模块的前面排第一,这样你又能写出几种。

github地址:github.com/miqidian/la…


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值