zoukankan      html  css  js  c++  java
  • 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;}
  • 相关阅读:
    NET ERP系统架构设计
    WebApi的一种集成测试写法(in-memory)
    开发类工具
    GitHub版本控制
    TortoiseGit安装与配置(转)
    tortoisegit使用密钥连接服务器(转)
    重构一个功能块的总结
    脚本绘图工具总结(转)
    Oracle 多表关联更新
    数据结构与算法之递推算法 C++与PHP实现
  • 原文地址:https://www.cnblogs.com/coldfishdt/p/6216041.html
Copyright © 2011-2022 走看看