简明HTML+CSS实现圣杯布局方法及要点(浮动实现)

圣杯布局这道大家都说面试会问的,涉及float 负margin position的知识点。

圣杯布局效果图:

 

 我的方案:

头部、底部直接div,主要处理在中间的的区域,这里我采用的实现方法是:先将三个部分用一个main包裹,然后三个部分使用float,进行浮动,再结合绝对定位relative将三个部分按要求排列(左右的两个分别定位到main的左右内边距中),最后再处理一些浮动、撑开的问题。

 实现代码:

html代码:

  <div class="wrap">
    <div class="top">top</div>
    <div class="main">
      <div class="left">left</div>
      <div class="content">
        content<br>
        content<br>
        content<br>
        content<br>
        content<br>
      </div>
      <div class="right">right</div>
    </div>
    <div class="foot">foot</div>
  </div>

 

完整CSS代码:

    .clearfix::after{
      clear:both;
      content:"";
      display: block;
    }
    .wrap{
      margin: 0 auto;
    }
    .top,.foot{
      height: 50px;
      background-color: orange;
    }
    .main .left,.main .right,.main .content{
      float:left;
      background-color: olive;
      position: relative;
      margin-bottom: -2000px;
      padding-bottom: 2000px;
    }
    .main .content{
      background-color: orchid;
      width: 100%;
      margin-left: -100px;  /* */
    }

    .main{
      padding: 0 100px;
      overflow: hidden;
    }
    .main .left{
      width: 100px;
      left:-100px; /* -100px将left藏在main的padding里面, 相对布局,将相对正常位置左挪100px,原位置*/
    }
    .main .right{
      width: 100px;
      left:100px;         /* -???  */
      margin-left: -100px;/* -???  */
    }

 

效果图:

 

其他问题:

要点1:

/* -???  */      content结点为什么是margin-left:-100px?

 要点2:margin-bottom: -2000px;  padding-bottom: 2000px;作用是什么?

将三个部分撑开,同时它们的父节点main使用overflow:hidden,将无内容部分切掉了

要点3:为何main需要相对布局?

为了将左右的两个分别定位到main的左右内边距中,和要点1相联系。

 

参考:https://sunra.top/2021/04/26/css-layout-grail/

posted @ 2021-06-06 23:57  进击的嘎嘣脆  阅读(245)  评论(0编辑  收藏  举报