布局:上下兩個div高度固定,中間自適應


需求:經典布局 —— 頭尾固定高度中間高度自適應布局

頭部固定高度,寬度100%自適應父容器;

底部固定高度,寬度100%自適應父容器;

中間是主體部分,自動填滿,瀏覽器可視區域剩余部分,內容超出則中間部分出現流動條;

整個內容填滿瀏覽器可視區域,並且不超出此區域!

 

方法一:position:absolute定位,不設高,並改變"包含塊"的尺寸渲染

固定頭尾,所以,至少頭和尾要用到position定位。因為瀏覽器大小是可以調節的,而且不同尺寸,不同分辨率的瀏覽器可視區域的高度是不固定的,

這就決定是中間主體部分的高度不固定。所以真正的問題核心也正在此。解決了這個問題,整個布局也就解決了一多半

最重要的一段就是中間部分絕對定位,top為頭的高度,bottom為尾的高度

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="gb2312">
    <title>頭尾固定中間高度自適應布局</title>
    <style>
        html, body {
            height:100%;
            margin:0;
            padding:0
        }
        #dHead {
            height:100px;
            background:#690;
            width:100%;
            position:absolute;
            z-index:5;
            top:0;
        }
        #dBody {
            background:#FC0;
            width:100%;
            overflow:auto;
            position:absolute;
            z-index:10;
            top:100px;
            bottom:100px;
        }
        .mycontent {
            padding:20px;
        }
        #dFoot {
            height:100px;
            background:#690;
            width:100%;
            position:absolute;
            z-index:200;
            bottom:0;
        }
    </style>
</head>
<body>
    <div id="dHead">固定頭部100px;</div>
    <div id="dBody">
        <div class="mycontent">
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
            中間自適應部分<br>
        </div>
    </div>
    <div id="dFoot">固定尾部100px</div>
</body>
</html>

效果如下:

經測試:IE7+、firefox、chrome、safari、opera均通過測試!

 

 

方法二:利用boxsizing改變盒子模型

實現原理是,先為html設定box-sizing然后,加上上下padding值。布局模塊均采用position:relative定位。

然后,頭部采用負向margin向上平移(因為有了html padding),如查采用負top的話需要為每個布局版加上負top;看實現代碼:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="gb2312">
    <title>頭尾固定中間高度自適應布局</title>
    <style type="text/css">
        * {
            margin:0;
            padding:0;
        }
        html {
            -webkit-box-sizing:border-box;
            -moz-box-sizing:border-box;
            box-sizing:border-box;
            padding:100px 0;
            overflow:hidden;
        }
        html, body {
            height:100%;
        }
        .top {
            position:relative;
            top:-100px;
            height:100px;
            background:#f60;
        }
        .side {
            top:-100px;
            position:relative;
            height:100%;
            background:#fc0;
            overflow:auto;
            width:200px;
            float:left;
            margin-right:0 !important;
            margin-right:-3px;
            overflow:auto;
        }
        .main {
            top:-100px;
            position:relative;
            overflow:auto;
            height:100%;
            background:#f30;
        }
        .bottom {
            top:-100px;
            position:relative;
            height:100px;
            background:#f60;
            clear:both;
        }
    </style>
</head>
<body>
<div class="top"> top </div>
<div class="side"> side <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
</div>
<div class="main"> main <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
</div>
<div class="bottom"> bottom </div>
</body>
</html>

效果如下:

此IE6/IE7是不支持的,另外如果給頭部是absolute定位的話也是可以實現的

<style type="text/css">
    * {
        margin:0;
        padding:0;
    }
    html {
        -webkit-box-sizing:border-box;
        -moz-box-sizing:border-box;
        box-sizing:border-box;
        padding:100px 0;
        overflow:hidden;
    }
    html, body {
        height:100%;
    }
    .top {
        position:absolute;
        top:0;
        left:0;
        width:100%;
        height:100px;
        background:#f60;
    }
    .side {
        height:100%;
        background:#fc0;
        width:200px;
        float:left;
        margin-right:0 !important;
        margin-right:-3px;
        overflow:auto;
    }
    .main {
        overflow:auto;
        height:100%;
        background:#f30;
    }
    .bottom {
        position:relative;
        height:100px;
        background:#f60;
        clear:both;
    }
</style>
</head>
<body>
    <div class="top"> top </div>
    <div class="side"> 
        side 
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
    </div>
    <div class="main"> 
        main 
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
    </div>
    <div class="bottom"> bottom </div>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM