方法一:偽列布局法(利用背景圖)
所謂偽列布局法,就是設(shè)計(jì)一個(gè)背景圖像,利用背景圖像來模擬欄目的背景。如,使用Photoshop設(shè)計(jì)一個(gè)長方形的背景圖,長度與頁面寬度保持一致,高度任意。
代碼中要用到的背景圖:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>設(shè)計(jì)多欄高度自適應(yīng)頁面_偽列布局法</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
body { text-align: center; }
#model {
width: 800px;
margin-left: auto;
margin-right: auto;
text-align: left;
}
#header { background: #FF00FF; }
#main {
position: relative;
width: 100%;
background: url(images/bg.gif) center repeat-y
}
#content {
margin-left: 25%;
margin-right: 20%;
}
#subplot {
width: 20%;
position: absolute;
right: 0;
top: 0;
}
#serve {
width: 25%;
position: absolute;
left: 0;
top: 0;
}
#footer {
background: #FF99FF;
}
</style>
<script type="text/javascript" language="javascript">
/*解決#subplot #serve 因絕對定位脫離文檔流,使#mian包含框的高度就為#content的高
度,此腳本會(huì)使#mian的高度為三個(gè)子欄最高的一欄的高度
即#serve的高度;*/
window.onload = function(){
var main = document.getElementById("main");
// 定義即將控制的外框div
var left = document.getElementById("subplot").offsetHeight;
// 獲得內(nèi)部三欄中ID = subplo的div高度
var right = document.getElementById("serve").offsetHeight;
// 獲得內(nèi)部三欄中ID = serve的div高度
var middle = document.getElementById("content").offsetHeight;
// 獲得內(nèi)部三欄中ID = content的div高度
var height = 0;
// 定義變量來儲(chǔ)存最大值
height = left - right > 0 ? left : right;
// 數(shù)值比較
height = middle - height > 0 ? middle : height;
// 數(shù)值比較
main.style.height = height + "px";
// 設(shè)定外框div的高度為 得出的最大高度
}
</script>
</head>
<body>
<div id="model">
<div id="header">
<h1>網(wǎng)頁標(biāo)題</h1>
<h2>網(wǎng)頁副標(biāo)題</h2>
</div>
<div id="main">
<div id="content">
<h3>主信息區(qū)域</h3>
<p>正文內(nèi)容</p>
<p>正文內(nèi)容</p>
</div>
<div id="subplot">
<h3>次信息區(qū)域</h3>
<p>正文內(nèi)容</p>
</div>
<div id="serve">
<dl>
<dt>功能服務(wù)區(qū)域</dt>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
</dl>
</div>
</div>
<div id="footer">
<p>版權(quán)信息區(qū)域</p>
</div>
</div>
</body>
</html>
瀏覽器效果截圖:
提示:在使用這種方法時(shí),一定要確保頁面寬度是固定的且與背景圖的寬度一只,不能夠設(shè)計(jì)為彈性頁面(百分比寬度),或?qū)挾戎禐閍uto;
方法二:補(bǔ)白padding邊界margin重疊法
這種設(shè)計(jì)方法的思想是設(shè)計(jì)三列欄目的底部不帶為無窮大,這樣在有限的窗口內(nèi)都能夠顯示欄目的背景色,因此也就不用擔(dān)心欄目高度無法自適應(yīng)。然后為了避免補(bǔ)白過大產(chǎn)生的空白區(qū)域,在設(shè)計(jì)底部邊界為負(fù)無窮大,從而覆蓋掉多出來的補(bǔ)白區(qū)域,最后再在中間行包含框中定義overflow:hidden;聲明剪切到多出的區(qū)域即可。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>設(shè)計(jì)多欄高度自適應(yīng)頁面_補(bǔ)白邊界重疊法</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
body { text-align: center; }
#model {
width: 800px;
margin-left: auto;
margin-right: auto;
text-align: left;
}
#header { background: #FF00FF; }
#main {
position: relative;
width: 100%;
border:1px solid black;
overflow:hidden;/*在父元素添加 溢出隱藏 就可以隱藏超出的背景圖了*/
}
#content { /*此包含框會(huì)隨著內(nèi)容的增加而增加*/
margin-left: 25%;
margin-right: 20%;
padding-bottom: 9999px;
margin-bottom: -9999px;
background:#fc0;
}
#subplot {/*此包含框雖然也會(huì)隨著內(nèi)容的增加而增加,但因?yàn)槎x了絕對定位,脫離了文檔流,所以高度的增加不會(huì)影響父元素的高度,
所以看不到效果。但父元素設(shè) 置 overflow:hidden;后可以對所有超出父元素的子元素進(jìn)行隱藏(不管是否脫離文檔流)*/
width: 20%;
position: absolute;
right: 0;
top: 0;
border:1px solid red;
padding-bottom: 9999px;
margin-bottom: -9999px;
background:#0cc;
}
#serve {/*此包含框雖然也會(huì)隨著內(nèi)容的增加而增加,但因?yàn)槎x了絕對定位,脫離了文檔流,所以高度的增加不會(huì)影響父元素的高度,
所以看不到效果。但父元素設(shè)置 overflow:hidden;后可以對所有超出父元素的子元素進(jìn)行隱藏(不管是否脫離文檔流)*/
width: 25%;
position: absolute;
left: 0;
top: 0;
border:1px solid green;
padding-bottom: 9999px;
margin-bottom: -9999px;
background:#9cf;
}
#footer {
background: #FF99FF;
}
</style>
</head>
<body>
<div id="model">
<div id="header">
<h1>網(wǎng)頁標(biāo)題</h1>
<h2>網(wǎng)頁副標(biāo)題</h2>
</div>
<div id="main">
<div id="content">
<h3>主信息區(qū)域</h3>
<p>正文內(nèi)容</p>
<p>正文內(nèi)容</p>
<p>正文內(nèi)容</p>
<p>正文內(nèi)容</p>
<p>正文內(nèi)容</p>
<p>正文內(nèi)容</p>
<p>正文內(nèi)容</p>
</div>
<div id="subplot">
<h3>次信息區(qū)域</h3>
<p>正文內(nèi)容</p>
</div>
<div id="serve">
<dl>
<dt>功能服務(wù)區(qū)域</dt>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
</dl>
</div>
</div>
<div id="footer">
<p>版權(quán)信息區(qū)域</p>
</div>
</div>
</body>
</html>
瀏覽器效果截圖:

但是這種方法只能夠根據(jù)中間欄目的高度來裁切,也就是說overflow:hidden;聲明對于流動(dòng)或浮動(dòng)元素有效,對于脫離文檔流的絕對定位元素來說無法進(jìn)行裁切,從而導(dǎo)致如果絕對定位的欄目高度高出中間流動(dòng)布局欄目的高度時(shí),就會(huì)被裁切掉。
為了避免此類問題發(fā)生,不能使用定位法布局頁面,應(yīng)用簡單的浮動(dòng)發(fā)進(jìn)行設(shè)計(jì),改動(dòng)的核心樣式如下(方法三),這樣就可以實(shí)現(xiàn)上述3列自適應(yīng)高度的版式效果。
方法三(絕對定位改浮動(dòng)):
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>設(shè)計(jì)多欄高度自適應(yīng)頁面_補(bǔ)白邊界重疊法_絕對定位改浮動(dòng)</title>
<style type="text/css">
* {
margin:0;
padding:0;
}
body { text-align:center; }
#model {
width:800px;
margin-left:auto;
margin-right:auto;
text-align:left;
}
#header { background:#FF00FF; }
#main {
position:relative;
width:100%;
overflow:hidden
}
#content {
float:left;
width:55%;
background:#FFCC00;
}
#subplot {
width:20%;
float:left;
background:#00CCCC;
}
#serve {
width:25%;
float:right;
background:#99CCFF;
}
#content, #subplot, #serve {
padding-bottom: 9999px;
margin-bottom: -9999px;
}
#footer { background:#FF99FF; }
</style>
</head>
<body>
<div id="model">
<div id="header">
<h1>網(wǎng)頁標(biāo)題</h1>
<h2>網(wǎng)頁副標(biāo)題</h2>
</div>
<div id="main">
<div id="content">
<h3>主信息區(qū)域</h3>
<p>正文內(nèi)容</p>
<p>正文內(nèi)容</p>
</div>
<div id="subplot">
<h3>次信息區(qū)域</h3>
<p>正文內(nèi)容</p>
</div>
<div id="serve">
<dl>
<dt>功能服務(wù)區(qū)域</dt>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
<dd>服務(wù)列表項(xiàng)</dd>
</dl>
</div>
</div>
<div id="footer">
<p>版權(quán)信息區(qū)域</p>
</div>
</div>
</body>
</html>
瀏覽器效果圖:

聲明:此文只代表個(gè)人見解,只供參考!聯(lián)系QQ:1522025433