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中不可用~

    参考

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

  • 相关阅读:
    StarUML3.x的破解方法
    图解git基本使用
    Elasticsearch分页查询From&Size vs scroll vs search_after
    MySQL索引及使用详解
    mysql中key 、primary key 、unique key 与index区别
    MySQL避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)
    git config配置快捷命令
    linux基础命令使用详解
    MySQL索引详解——full-text,b-tree,hash,r-tree
    Insert Interval 面试题leetcode.
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/7262312.html
Copyright © 2011-2022 走看看