圣杯布局与双飞翼布局

作用

圣杯布局和双飞翼布局解决的问题是相同的,就是两边定宽,中间自适应的三栏布局,中间栏要在文档流前面以优先渲染。

区别

  • 圣杯布局:为了让中间div内容不被遮挡,将中间div设置了左右padding-left和padding-right后,将左右两个div用相对布局position: relative并分别配合right和left属性,以便左右两栏div移动后不遮挡中间div。

  • 双飞翼布局:为了让中间div内容不被遮挡,直接在中间div内部创建子div用于放置内容,在该div里用margin-left和margin-right为左右两栏div留出位置。

1. 圣杯布局

优点:不需要添加dom节点

缺点:正常情况下是没有问题的,但是特殊情况下就会暴露此方案的弊端,如果将浏览器无限放大时,「圣杯」将会「破碎」掉。当middle部分的宽小于left部分时就会发生布局混乱。(middle<left即会变形)

在这里插入图片描述

  <div class='wrap'>
    <div class="header">header</div>
    <div class="content">
      <div class="middle">中间的</div>
      <div class="left">左边的</div>
      <div class="right">右边的</div>
    </div>
    <div class="footer">footer</div>
  </div>
{
    min-width: 600px;
    color: #ffff;
  }

  .header,
  .footer {
    height: 50px;
    width: 100%;
    background: grey;
  }

  .middle,
  .left,
  .right {
    float: left;
  }

  .content {
    overflow: hidden;
    padding: 0 200px;
  }

  .left,
  .right {
    width: 200px;
    height: 200px;
    background: pink;
  }

  .middle {
    width: 100%;
    height: 200px;
    background: yellowgreen;
  }

  .left {
    margin-left: -100%;
     //margin相对于上一个浮动盒子进行移动,margin-left的意思是子元素的左边框距离父元素右边框的距离
    position: relative;
    left: -200px;
  }

  .right {
    margin-left: -200px;
    position: relative;
    left: 200px;
  }

2. 双飞翼布局

优点:不会像圣杯布局那样变形

缺点:多加了一层dom节点

  <div class='wrap'>
    <div class="header">header</div>
    <div class="content">
      <div class="middle">
        <div class="middle-inner">
          middle-inner
        </div>
      </div>
      <div class="left">左边的</div>
      <div class="right">右边的</div>
    </div>
    <div class="footer">footer</div>
  </div>
 * {
    margin: 0;
    padding: 0;
  }

  body {
    min-width: 600px;
    color: #ffff;
  }

  .header,
  .footer {
    height: 50px;
    width: 100%;
    background: grey;
  }

  .middle,
  .left,
  .right {
    float: left;
  }

  .content {
    overflow: hidden;
  }

  .left,
  .right {
    width: 200px;
    height: 200px;
    background: pink;
  }

  .middle {
    width: 100%;
    height: 200px;
    background: yellowgreen;
  }

  .left {
    margin-left: -100%;
    position: relative;
  }

  .right {
    margin-left: -200px;
    position: relative;
  }

  .middle-inner {
    margin: 0 200px;
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值