zoukankan      html  css  js  c++  java
  • CSS实现经典的三栏布局

    实现效果: 左右栏定宽,中间栏自适应 (有时候是固定高度)

    1 . 绝对定位布局:position + margin

    1 <div class="container">
    2     <div class="left"></div>
    3     <div class="right"></div>
    4     <div class="main"></div>
    5 </div>
     1 body,html{
     2     height: 100%;
     3     padding: 0;
     4     margin: 0;
     5    overflow: hidden;
     6 }
     7     /*左右进行绝对定位*/
     8 .left,.right{
     9     position: absolute;
    10     height:100%;  
    11     top: 0;
    12 }
    13 .left{
    14     left: 0;
    15     width: 100px;
    16     background: red;
    17 }
    18 .right{
    19     right: 0;
    20     width: 100px;
    21     background: blue;
    22 }
    23     /*中间用margin空出左右元素所占的空间*/
    24 .main{
    25    height:100%; 
    26    margin: 0 100px 100px 0;   /* 也可让 position的 left和right分别为100px;*/
    27    background: yellow;
    28 }
    29      

    缺点: 如果中间栏含有最小宽度限制,或是含有宽度的内部元素,当浏览器宽度小到一定程度,会发生层重叠的情况

    2 . 浮动布局:  float + margin

    方法类似 position, 改成 float: left 和 float: right即可

    .left {
      float: left;
    }
    
    .right {
      float: right;
    }
    
    .main {
      margin: 0 100px;   // 如不设置margin, main部分将会占满整个父容器
    }

    3 . flex布局

      

    .container {
      display: flex;
    }
    
    .main {
      flex: 1;
    }

    4  .  table 布局

    原理: 将父容器当作表格,子容器当作表格的单元格。

    1 .container {
    2    display: table;  
    3 }
    4 
    5 .container > div {
    6   display: table-cell;
    7 }

    5 . grid网格布局

      父容器设置为网格,网格的子元素行高rows为100px; 网格子元素列宽分别为 100px auto 100px;

    1 .container {
    2   display: grid;
    3   grid-template-rows: 100px;
    4   grid-template-columns: 100px auto 100px;  
    5 }

    6. 圣杯布局 (想象成圣杯的主体和两只耳朵)

      圣杯布局是2006年提出的布局模型概念,在国内由淘宝UED工程师改进并传播, 布局要求:

      1 ) 三列布局, 中间宽度自适应,两边定宽

      2 ) 中间栏要在浏览器中优先渲染

      3 ) 允许任意列的高度最高

    参考

    <div class="container"> 
      <div class="main">main</div> 
      <div class="left">left</div> 
      <div class="right">right</div> 
    </div>
     1   .container {
     2         padding: 0 150px 0 100px;
     3     }
     4     .left, .main, .right {
     5         position: relative;
     6         min-height: 100px;
     7         float: left;
     8     }
     9     .left {
    10         left: -100px;
    11         margin-left: -100%;
    12         background: green;
    13         width: 100px;
    14     }
    15     .right {
    16         right: -150px;
    17         margin-left: -150px;
    18         background-color: red;
    19         width: 100px;
    20     }
    21     .main {
    22         background-color: blue;
    23         width: 100%;
    24     }

    思路: 圣杯布局用到了浮动float、负边距、相对定位relative,不添加额外标签

    1 . 父容器设置内边距,供两边子容器占位 padding: 0 100px 0 150px;

    2 . 所有子容器向左浮动 float: left

    3 . 设置左右子容器的负外边距,使所有子容器同一行 .left { margin-left: -100%} .right {margin-left: -150px;} , 此时会有部分重叠

    4 . 使用相对定位分别移动左右子容器到父容器的左右内边距留白部分 position: relative; left: -100px;  / position: relative; right: -150px;

     

     

    7. 双飞翼布局(想象成鸟的身体和两只翅膀)

      1 ) 双飞翼布局是对圣杯布局基础上进行修改 , 将原本的内边距padding 留白改成在自适应栏内部新增DOM节点, 并设置其外边距margin

      2 )   然后再对左右栏的左外边距设置为负值。比圣杯布局少了position相对定位

      3 )  相比圣杯布局, 中间栏内容不会被“遮挡”, 圣杯布局使用中间栏的padding给左右栏占位,双飞翼布局使用中间栏子元素的margin给左右栏占位 

    1 <div class="container"> 
    2   <div class="main">
    3       <div class="content">main</div> 
    4     </div>
    5   <div class="left">left</div> 
    6   <div class="right">right</div> 
    7 </div>
     1 .left, .main, .right {
     2         float: left;
     3         min-height: 100px;
     4         text-align: center;
     5     }
     6     .left {
     7         margin-left: -100%;
     8         background: green;
     9         width: 100px;
    10     }
    11 
    12     .right {
    13         margin-left: -150px;
    14         background-color: red;
    15         width: 150px;
    16     }
    17     .main {
    18         background-color: blue;
    19         width: 100%;
    20     }
    21     .content{
    22         margin: 0 150px 0 100px;
    23     }

    基本思路已经理清楚,可以在实践中看效果。

  • 相关阅读:
    Android中开发习惯
    Activity、Window和View三者间的关系有一定的见解
    Android底层有一定的认识,研究过相关的Android源码
    安卓工程的启动过程
    OAuth2认证有一定的了解
    屏幕适配经验
    NOIP模拟赛14
    NOIP模拟赛13
    NOIP模拟赛12
    NOIP模拟赛11
  • 原文地址:https://www.cnblogs.com/hughes5135/p/10388456.html
Copyright © 2011-2022 走看看