zoukankan      html  css  js  c++  java
  • 三列布局

    中间三列布局想要的效果如图

    上、下为头部和底部,中间分成3列,左右两列为固定宽度中间的宽度随着浏览器窗口变化而变化

    按下面三个步骤顺序写这个布局,最后会有一个完整的代码

    1. 基本的布局结构(html代码)

    要把middle部分调整到left上,因为一般middle比较重要,所以让它先进行渲染加载

    <header>头部</header>
    <article>
        <div class="middle">中间</div>
        <div class="left">左边</div>
        <div class="right">右边</div>
    </article>
    <footer>底部</footer>

    2. 设置尺寸、背景颜色

    3. 调整布局位置:4种不同的方案

    关键点:

    • 为了让left可以回到middle的左侧,需要让它们脱离文档流,以便重新布局
    • 为了让几个div不会发生垂直方向的重叠,需要利用margin、padding等来预留空间
    • 当然,用flex弹性盒子就不用考虑上面问题~
    实现方法 涉及到的重要属性设置
    圣杯布局 float: left postion: relative right/left: -50px 负margin
    双飞翼布局 float: left

    middle放在一个div中,

    padding+box-sizing或margin

       
    用absolute实现 position: absolute

    top, left, right: 0;

    正margin值   
    用flex实现 display: flex order: 2/1/3    

    源码

    <!DOCTYPE html>
    <html>
    <head>
        <title>test</title>
        <meta charset="utf-8">
        <script src="./custom.modernizr.js"></script>
        <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        #grail, #wing, #flex, #absolute{
            width: 100%;
            height: 300px;
        }
        #grail header{
            width: 100%;
            height: 20%;
            background-color: grey;
        }
        #grail    article{
            height: 60%;
        /*这个不用设置宽度*/
            padding: 0 50px 0 50px;
            position: relative;
        }
        #grail    article .middle{
            height: 100%;
            width: 100%;            
            background-color: green;
            float: left;
    
        }
        #grail    article .left{
            width: 50px;
            height: 80%;
            background-color: red;
            float: left;
            margin-left: -100%;
            position: relative;
            left: -50px;
        }
        #grail    article .right{
            width: 50px;
            height: 80%;
            background-color: blue;
            float: left;
            margin-left: -50px;
            position: relative;
            right: -50px;
        }
        #grail    footer{
            width: 100%;
            height: 20%;
            background-color: gray;
        }
        #wing header{
            width: 100%;
            height: 20%;
            background-color: gray;
        }    
        #wing article{
            width: 100%;
            height: 60%;
        }    
        #wing .middle0{
            height: 100%;
            width: 100%;
            float: left;    
            /*用padding的方法给两侧留出位置
            需要设置box-sizing,因为默认设置的width是内容,padding会让盒子向外扩展,并不能满足要求*/            
            /*padding: 0 50px 0 50px;
            box-sizing: border-box;*/
        }
        #wing .middle0 .middle{
            height: 100%;
            background-color: green;
            /*用margin的方法给两侧留出空间*/
            margin: 0 50px 0 50px;
        }
        #wing .left{
            width: 50px;
            height: 80%;
            background-color: red;
            float: left;
            margin-left: -100%;
        }
        #wing .right{
            width: 50px;
            height: 80%;
            background-color: blue;
            float: left;
            margin-left: -50px;
        }    
        #wing footer{
            width: 100%;
            height: 20%;
            background-color: gray;
        }
        #flex header{
            width: 100%;
            height: 20%;
            background-color: gray;
        }    
        #flex article{
            display: flex;
            width: 100%;
            height: 60%;
        }    
        #flex .middle{
            order: 2;/*设置子元素的排列位置*/
            background-color: green;
            width: 100%;
        }
        #flex .left{
            order: 1;
            background-color: red;
            width: 50px;/*不设宽度,由内容撑开*/
            /*不设置高度默认为充满整个父元素高*/
            height: 80%;
        }
        #flex .right{
            order: 3;
            background-color: blue;
            width: 50px;
            height: 80%;
        }
        #flex footer{
            width: 100%;
            height: 20%;
            background-color: gray;
        }
        #absolute header{
            width: 100%;
            height: 20%;
            background-color: gray;
        }    
        #absolute article{
            width: 100%;
            height: 60%;
            position: relative;
        }    
        #absolute .middle{
            background-color: green;
            /* 100%;*/
            height: 100%;
            /*两侧 position 设置为absolut,脱离文档流*/
            /*当前元素的两侧就变成了article边框*/
            margin-left: 50px;
            margin-right: 50px;
        }
        #absolute .left{
            background-color: red;
            width: 50px;/*不设宽度,由内容撑开*/
            /*不设置高度默认为充满整个父元素高*/
            height: 80%;
            position: absolute;
            top: 0;
            left: 0;
        }
        #absolute .right{
            background-color: blue;
            width: 50px;
            height: 80%;
            position: absolute;
            right: 0;
            top: 0;
        }
        #absolute footer{
            width: 100%;
            height: 20%;
            background-color: gray;
        }
        </style>
    </head>
    <body>
    <div id="grail">
    <header>圣杯布局</header>
    <article>
        <div class="middle">中间</div>
        <div class="left">左边</div>
        <div class="right">右边</div>
    </article>
    <footer>底部</footer>
    </div>
    <div id="wing">
    <header>双飞翼布局</header>
    <article>
        <div class="middle0">
        <div class="middle">中间</div></div>
        <div class="left">左边</div>
        <div class="right">右边</div>
    </article>
    <footer>底部</footer>
    </div>
    <div id="flex">
    <header>用flex来实现三列布局</header>
    <article>
        <div class="middle">中间</div>
        <div class="left">左边</div>
        <div class="right">右边</div>
    </article>
    <footer>底部</footer>
    </div>
    <div id="absolute">
    <header>用absolute来实现三列布局</header>
    <article>
        <div class="middle">中间</div>
        <div class="left">左边</div>
        <div class="right">右边</div>
    </article>
    <footer>底部</footer>
    </div>
    </body>
    </html>
    View Code

    遇到两个ie的问题

    1. 怎么模拟低版本的ie

        F12—访真—文档模式—10、9、8...代表了版本号

    2. 解决低版本ie中不能使用h5标签,如header、article、footer等

    在script中引用一个js,链接地址:http://haiqiancun.com/file//demo/custom.modernizr.js

    flex布局在低版本ie中不可用~

    参考

    网上有不少圣杯布局、双飞翼布局相关的内容。后面两个应该也有,没有认真找过,写前两个的时候自己再考虑出来的

  • 相关阅读:
    'Undefined symbols for architecture i386,clang: error: linker command failed with exit code 1
    The codesign tool requires there only be one 解决办法
    XCode iOS project only shows “My Mac 64bit” but not simulator or device
    Provisioning profile XXXX can't be found 的解决办法
    UIView 中的控件事件穿透 Passthrough 的实现
    Xcode4.5出现时的OC新语法
    xcode 快捷键(持续更新)
    打越狱包
    php缓存与加速分析与汇总
    浏览器的判断
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/7262312.html
Copyright © 2011-2022 走看看