• CSS布局-圣杯布局


    圣杯布局

    圣杯布局很完美(兼容所有浏览器,包括IE6),但是使用了相对定位,布局有局限性,宽度控制要改的地方也多。

    第一种方法公用部分:

    .lgyz, .lzrg, .lrzcg, .lcgrz, .lzcrg {margin:10px 0; min-width:400px;text-align: center;color:#ffffff; }
        .left {background-color: #4DBCB0; padding:20px 0;}
        .aside, .center, .right {background-color: #E35881;padding:20px 0; }

    第二方法都不考虑兼容IE8及以下。

    左侧栏固定宽度,右侧自适应 :

    第一种写法:

    <div class="lgyz">
            <div class="left">主内容栏自适应宽度</div>
            <div class="aside">侧边栏固定宽度</div>
        </div>
    .lgyz{zoom:1;overflow:hidden;padding-left:210px;}
    .lgyz .aside{float:left;width:200px;margin-left:-100%;position:relative;left:-210px;_left:0;}
    .lgyz .left{float:left;width:100%;}

    第二种写法:

    <div class="layout">
        <aside class="layout__aside">侧边栏宽度固定</aside>
        <div class="layout__main">主内容栏宽度自适应</div>
    </div>
    .layout:after {clear: both;content: " "; display: table;}
    .layout__aside, .layout__main {float: left;}
    .layout {padding-left: 210px;}
    .layout__main {width: 100%;}
    .layout__aside {width: 200px;margin-left: -210px;}

    右侧栏固定宽度,左侧自适应 :

    第一种写法:

    <div class="lzrg">
      <div class="left">主内容栏自适应宽度</div>
       <div class="aside">侧边栏固定宽度</div>
    </div>
    .lzrg{zoom:1;overflow:hidden;padding-right:210px;}
    .lzrg .aside{float:left;width:200px;margin-left:-200px;position:relative;right:-210px;}
    .lzrg .left{float:left;width:100%;}

    第二种写法:

    <div class="layout">
        <div class="layout__main">主内容栏宽度自适应</div>
        <aside class="layout__aside">侧边栏宽度固定</aside>
    </div>
    .layout:after{clear:both;content:" ";display:table;}
    .layout{padding-right:210px;}
    .layout__main{width:100%;float:left;}
    .layout__aside{float:right;width:200px;margin-right:-210px;}

     左右固定   中间自适应 

    第一种:

    <div class="lrzcg">
            <div class="left">主内容栏自适应宽度</div>
            <div class="center">侧边栏1固定宽度</div>
            <div class="right">侧边栏2固定宽度</div>
        </div>
    .lrzcg{zoom:1;overflow:hidden;padding-left:210px;padding-right:210px;}
     .lrzcg .left{float:left;width:100%;}
     .lrzcg .center{float:left;width:200px;margin-left:-100%;position:relative;left:-210px;_left:210px;}
     .lrzcg .right{float:left;width:200px;margin-left:-200px;position:relative;right:-210px;}

    第二种:

    <div class="layout">
        <aside class="layout__aside layout__aside--left">左侧边栏宽度固定</aside>
        <div class="layout__main">主内容栏宽度自适应</div>
        <aside class="layout__aside layout__aside--right">右侧边栏宽度固定</aside>
    </div>
    .layout:after{clear:both;content:" ";display:table;}
    .layout__aside,.layout__main{float:left;}
    .layout{padding:0 210px;}
    .layout__main{width:100%;}
    .layout__aside{width:200px;}
    .layout__aside--left{margin-left:-210px;}
    .layout__aside--right{margin-right:-210px;float:right;}

    第三种:

    <div class="layout__main-wrapper">
        <div class="layout__main">主内容栏宽度自适应</div>
    </div>
    <aside class="layout__aside layout__aside--left">左侧边栏宽度固定</aside>
    <aside class="layout__aside layout__aside--right">右侧边栏宽度固定</aside>
    <footer class="clear">底部</footer>
    .clear{clear:both;}
    .layout__main-wrapper,.layout__aside{float:left;}
    .layout__main-wrapper{width:100%;}
    .layout__main{margin:0 210px;}
    .layout__aside{width:200px;}
    .layout__aside--left{margin-left:-100%;}
    .layout__aside--right{margin-left:-200px;}

    都在左边,右侧自适应 

    第一种:

    <div class="lcgrz">
            <div class="left">主内容栏自适应宽度</div>
            <div class="center">侧边栏1固定宽度</div>
            <div class="right">侧边栏2固定宽度</div>
        </div>
    .lcgrz{zoom:1;overflow:hidden;padding-left:420px;}
       .lcgrz .left{float:left;width:100%;}
       .lcgrz .center{float:left;width:200px;margin-left:-100%;position:relative;left:-420px;_left:0px;}
       .lcgrz .right{float:left;width:200px;margin-left:-100%;position:relative;left:-210px;_left:210px;}

    第二种:

    <div class="layout">
        <aside class="layout__aside layout__aside--first">第1个侧边栏宽度固定</aside>
        <aside class="layout__aside layout__aside--second">第2个侧边栏宽度固定</aside>
        <div class="layout__main">主内容栏宽度自适应</div>
    </div>
    .layout:after{clear:both;content:" ";display:table;}
    .layout__aside,.layout__main{float:left;}
    .layout{padding-left:420px;}
    .layout__main{width:100%;}
    .layout__aside{width:200px;}
    .layout__aside--first{margin-left:-420px;}
    .layout__aside--second{margin-left:-210px;}

     都在右边,左侧自适应

     

    第一种:

    <div class="lzcrg">
            <div class="left">主内容栏自适应宽度</div>
            <div class="center">侧边栏1固定宽度</div>
            <div class="right">侧边栏2固定宽度</div>
        </div>
    .lzcrg{zoom:1;overflow:hidden;padding-right:420px;}
       .lzcrg .left{float:left;width:100%;}
       .lzcrg .center{float:left;width:200px;margin-left:-200px;position:relative;right:-210px;}
       .lzcrg .right{float:left;width:200px;margin-left:-200px;position:relative;right:-420px;}

    第二种:

    <div class="layout">
        <div class="layout__main">主内容栏宽度自适应</div>
        <aside class="layout__aside layout__aside--first">第1个侧边栏宽度固定</aside>
        <aside class="layout__aside layout__aside--second">第2个侧边栏宽度固定</aside>
    </div>
    .layout:after{clear:both;content:" ";display:table;}
    .layout{padding-right:420px;}
    .layout__main{width:100%;float:left;}
    .layout__aside{width:200px;float:right;}
    .layout__aside--first{margin-right:-210px;}
    .layout__aside--second{margin-right:-420px;}

    使用flex方法圣杯布局,每种布局做法的结果同上面一模一样,但是代码减少了很多,而且适用的场景更多

    <div class="layout">
        <aside class="layout__aside">侧边栏宽度固定</aside>
        <div class="layout__main">主内容栏宽度自适应</div>
    </div>
    <div class="layout">
        <div class="layout__main">主内容栏宽度自适应</div>
        <aside class="layout__aside">侧边栏宽度固定</aside>
    </div>
    <div class="layout">
        <aside class="layout__aside">左侧边栏宽度固定</aside>
        <div class="layout__main">主内容栏宽度自适应</div>
        <aside class="layout__aside">右侧边栏宽度固定</aside>
    </div>
    <div class="layout">
        <aside class="layout__aside">第1个侧边栏宽度固定</aside>
        <aside class="layout__aside">第2个侧边栏宽度固定</aside>
        <div class="layout__main">主内容栏宽度自适应</div>
    </div>
    <div class="layout">
        <div class="layout__main">主内容栏宽度自适应</div>
        <aside class="layout__aside">第1个侧边栏宽度固定</aside>
        <aside class="layout__aside">第2个侧边栏宽度固定</aside>
    </div>
    .layout {margin:10px 0; min-width:400px;text-align: center;color:#ffffff; }
     .layout__main {background-color: #4DBCB0; padding:20px 0;}
        .layout__aside {background-color: #E35881;padding:20px 0; }
    
        .layout { display: flex;}
        .layout__main { flex: 1;}
        .layout__aside {width: 200px; }
        .layout > .layout__aside:not(:first-child),
        .layout > .layout__main:not(:first-child){ margin-left: 10px;}
  • 相关阅读:
    [CSP-S模拟测试]:reverse(模拟)
    BZOJ1559 [JSOI2009]密码 【AC自动机 + 状压dp】
    BZOJ2257 [Jsoi2009]瓶子和燃料 【裴蜀定理】
    BZOJ2729 [HNOI2012]排队 【高精 + 组合数学】
    BZOJ1857 [Scoi2010]传送带 【三分法】
    BZOJ2118 墨墨的等式 【最短路】
    BZOJ5340 [Ctsc2018]假面 【概率dp】
    BZOJ5343 [Ctsc2018]混合果汁 【二分 + 主席树】
    BZOJ4869 [Shoi2017]相逢是问候 【扩展欧拉定理 + 线段树】
    BZOJ2001 [Hnoi2010]City 城市建设 【CDQ分治 + kruskal】
  • 原文地址:https://www.cnblogs.com/coldfishdt/p/6216041.html
Copyright © 2020-2023  润新知