2019-1-2

作者: RomanticAir | 来源:发表于2019-01-02 23:27 被阅读0次

    学习圣杯和双飞翼布局

    圣杯和双飞翼布局即是可以实现三栏中两端宽度固定,中间宽度自适应布局效果的两种方式的叫法。下面三个例子将以经典三栏布局作为我们的学习参考案例。

    一、圣杯布局

    浮动 + 外边距

    结构如下:

    <div class="wrapper">
      <div class="left">left</div>
      <div class="center">center</div>
      <div class="right">right</div>
    </div>
    

    样式如下:

    .wrapper {
      overflow: hidden;
      padding: 0 100px;
    }
    
    .left {
      float: left;
      width: 100px;
      height: 300px;
      /*原本在距父级盒子左侧100px的位置,现将其拉到最左侧,刚好遮住left-padding区域*/
      margin-left: -100px;
      background: red;
    }
    
    .center {
      float: left;
      /*宽度为父盒子box-content的100%,从而达到自适应*/
      width: 100%;
      height: 300px;
      background: pink;
    }
    
    .right {
      float: left;
      width: 100px;
      height: 300px;
      /*紧贴center盒子,但由于它占据了100%,导致right盒子掉到了下方。现将其拉到距父级盒子右侧100px的位置,刚好遮住right-padding区域*/
      margin-right: -100px;
      background: blue;
    }
    

    定位法

    结构同上

    样式如下:

    .wrapper {
      position: relative;
      /*水平方向具有流动性,宽度自动填充(width: auto)*/
      height: 300px;
    }
    
    .left {
      position: absolute;
      height: 300px;
      width: 100px;
      background: red;
    }
    
    .center {
      /*method 1 -- 同一方向对称属性设置后,盒子具有该方向上的流动特性,从而自动填充*/
      /*
      position: absolute;
      left: 100px;
      right: 100px;
      */
      height: 300px; 
      /*method 2 -- 未脱离文档流,本身具有流动特性,依靠外边距撑开 left right 的宽度即可*/
      margin: 0 100px;
      /*end*/
      background: pink;
    }
    
    .right {
      position: absolute;
      right: 0;
      /*method 2 -- 没加 top 时,垂直方向是层流动性的,自身会被 center 盒子挤下来*/
      top: 0;
      /*end*/
      width: 100px;
      height: 300px;
      background: blue;
    }
    

    二、双飞翼布局

    浮动 + 外边距

    结构如下:

    <div class="wrapper">
      <div class="center">
        <div class="msg">center</div>
      </div>
      <div class="left">left</div>
      <div class="right">right</div>
    </div>
    

    样式如下:

    .wrapper {
      overflow: hidden;
    }
    
    .wrapper > div {
      float: left;
      height: 300px;
    }
    
    .left {
      width: 100px;
      /*相对父级盒子的宽度计算*/
      margin-left: -100%;
      background: red;
    }
    
    .center {
      width: 100%;
      background: pink;
    }
    
    .right {
      width: 100px;
      /*本身被挤下去了,现拉回距父盒子右侧100px的位置*/
      margin-left: -100px;
      background: blue;
    }
    
    /*踹空,让 left right 盒子来填*/
    .center .msg {
      margin: 0 100px;
    }
    



    End.
    若有不足,还请高人指教。

    相关文章

      网友评论

          本文标题:2019-1-2

          本文链接:https://www.haomeiwen.com/subject/sfbhlqtx.html