三栏布局

601 阅读3分钟
三栏布局特点:整体高度已知,左右两边宽度固定,中间内容宽度自适应。

而实现这一布局有多种方法

1.左右绝对定位,中间用margin留出

<!-- html页面 -->  <div id="container">    <div id="left">Left</div>    <div id="right">Right</div>    <div id="main">Main</div>  </div>

//css部分
<style>body,html{        height: 100%;        padding: 0;        margin: 0;        overflow: hidden;    }    /*左右进行绝对定位,脱离文档流*/    #left,#right{        position: absolute;        top: 0;        background: blueviolet;    }    #left{        left: 0;        width: 100px;    }    #right{        right: 0;        width: 100px;    }    /*中间用margin空出左右元素所占的空间*/    #main{        margin: 0 100px 0 100px ;        background: deeppink;
        text-align: center;
     }                                                                    </style>

2、浮动布局: float 浮动固定  margin撑开

<!-- html页面 -->  <div id="container">    <div id="left">Left</div>    <div id="right">Right</div>    <div id="main">Main</div>  </div>

//css部分
 <style>body,html{        height: 100%;        padding: 0;        margin: 0;        overflow: hidden;    }    #left,#right{        background: blueviolet;    }    #left{        float: left;        width: 100px;    }    #right{        float: right;        width: 100px;    }    #main{        margin: 0 100px 0 100px ;        background: deeppink;        text-align: center;    }  </style>

3、flex布局

<!-- html页面 -->  <div id="container">      <div id="left">left</div>      <div id="main">center</div>      <div id="right">right</div>  </div>

<style>    /* css部分 */        #container{            display: flex;        }        #left{            width:200px;            background: blueviolet;        }        #main{            flex: 1;            background: deeppink;        }        #right{            width:200px;            background: blueviolet;        }  </style>

4、圣杯布局

<!-- html页面 -->  <div class="container">      <div class="main col">Main</div>      <div class="left col">Left</div>      <div class="right col">Right</div>  </div>

 /* css部分 */        /* 两边定宽,中间自适用 */        body,html,.container{            height: 100%;            padding:0;            margin: 0;        }        .col{            float: left;   /* 三个col都设置float: left,为了把left和right定位到左右部分 */            position:relative;        }        /*父元素空出左右栏位子: 因为上一步中,左右栏定位成功了,但是中间栏的内容会被遮盖住*/        .container{            padding:0 100px 0 100px;        }        /*左边栏*/        .left{            left:-100px;            width: 100px;            height:100%;            margin-left: -100%;            background: #ff69b4;        }        /*中间栏*/        .main{            width:100%;            height: 100%;            background: #659;        }        /*右边栏*/        .right{            right:-100px;            width:100px;            height:100%;            margin-left: -100px;            background: #ff69b4;        }  </style>

5、双飞翼布局

  <!-- html页面 -->  <div class="container">      <div class="main col ">          <div class="main_inner">Main</div>      </div>      <div class="left col ">Left</div>      <div class="right col ">Right</div>  </div>

<style>    /* css部分 */    body,html,.container{            height: 100%;            padding:0;            margin: 0;        }        .col{             float: left; /* 把left和right定位到左右部分 */        }        .main{             width:100%;            height:100%;            background: #659;        }        .main_inner{             /* 处理中间栏的内容被遮盖问题 */            margin:0 200px 0 100px;        }        .left{            width: 100px;            height: 100%;            margin-left: -100%;            background: #ff69b4;        }        .right{            height:100%;            width:200px;            margin-left: -200px;            background: #ff69b4;        }  </style>

双飞翼布局的好处:

(1)主要的内容先加载的优化。

 (2)兼容目前所有的主流浏览器,包括IE6在内。

 (3)实现不同的布局方式,可以通过调整相关CSS属性即可实现。


关于BFC

 BFC就是一个独立容器 封闭容器,能够使内部与外部隔绝不受影响。 

如何触发BFC (父级)

1.float不为none 

2.overflow不为visibile

3.dispaly为inline-block table-cell flex等等 

4.posittion为absolute或者relative 

 主要用途 :

1,清除浮动 

 2, 解决外边距合并问题 

3,制作右侧盒子自适应问题。 text-align必须在block下才有效。