布局:上下两个div高度固定,中间自适应

需求:经典布局 —— 头尾固定高度中间高度自适应布局

头部固定高度,宽度100%自适应父容器;

底部固定高度,宽度100%自适应父容器;

中间是主体部分,自动填满,浏览器可视区域剩余部分,内容超出则中间部分出现流动条;

整个内容填满浏览器可视区域,并且不超出此区域!

方法1: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均通过测试!

方法2:利用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>
时间: 2024-10-25 05:05:45

布局:上下两个div高度固定,中间自适应的相关文章

JQuery控制两个Div高度一致

<script type="text/javascript"> $(function(){ if($("#left").height() > $("#right").height()){ $("#right").css("height",$("#left").height()); }else{ $("#left").css("height&

DIV+CSS布局问题:一个宽度不确定的DIV里面放三个水平对齐的DIV,左右两个DIV宽度固定为150px

<div style="width:500px;position:absolute;left:200px;top:100px;border:1px solid red;height:100px" > <div id="px1" style="position:absolute; left:0px;height:100px; width:150px; background-color:green;"></div>

两个DIV高度自适应方法(左右两个DIV高度一样)

html:<div id="container"> <div id="leftSide"> <p>aaaa</p> <p>aaaa</p> </div> <div id="rightSide"> </div> </div> 1.负外补丁和正内补丁{margin-bottom:-(num)px;padding-bottom:(nu

关于两个div高度保持一致的(css+js)两种解决办法

最近修改以前写的一些代码,发现点问题. 比如2个div需要动态的保持一致的高度. css的做法是: 精心开发5年的UI前端框架! .代码   <div style="overflow:hidden"> <div id="left" style="margin-bottom:-10000px; padding-bottom:10000px;"></div> <div id="right"

【css面试题】三个DIV要求水平对齐,左右两个DIV宽度固定为100px,中间那个DIV充满剩余的宽度(至少2种方法)

这是我在一家公司面试时遇到的问题,当时没有答上来!! 所以看到的小伙伴一定要注意了!! 变化浏览器宽度可看到效果: 左 右 中 然后我们来看看代码: 第一种方法:(浮动) <style type="text/css"> .left,.right,.center{ border:1px solid; height:100px; text-align: center; line-height:100px; font-size:50px; } .left{ float:left;

使左右两个DIV高度相等的方法

1 <script type="text/javascript"> 2 function height(){ 3 document.getElementById("aLeft").style.height = document.getElementById("aRight").offsetHeight + "px"; 4 } 5 window.onload = function(){ 6 height(); 7 }

如何实现两个div等高效果

如何实现两个div等高效果:在网页实际应用中,可能需要动态的实现两个div的等高效果,当然不仅限于div,例如一个网页分为左右两栏,一栏的高度可能需要根据内容自适应,也就是说高度不是固定的,而另一栏需要和它保持高度一致,那么就需要动态的设置高度.代码实例如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charse

设置一个DIV块固定在屏幕中央(两种方法)

设置一个DIV块固定在屏幕中央(两种方法) 方法一: 对一个div进行以下设置即可实现居中. <style> #a{ position: fixed; top: 0px; left: 0px; right: 0px; bottom: 0px; margin: auto; } </style> <!doctype html> <html lang="zh-cn"> <head> <meta charset="UT

css自适应布局(两列自适应布局+三列左右固定中间自适应+三列中间固定左右自适应)

1.两列自适应 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>demo</title> <style type="text/css" media="screen"> #left{float: left;background: #ccc;height: 40