最典型實(shí)用的上中下,并且中間分三列的布局,這個(gè)例子有2個(gè)特點(diǎn):
1. 中間三列效果,可以任意實(shí)現(xiàn)單列背景色。
2. 整體最窄770px,最寬1024px,也就是說窗口小于770xp就出底部滾動(dòng)條,如果大于1024px自動(dòng)屏幕居中。
效果瀏覽:http://www.rexsong.com/blog/attachments/200512/29_154158_minmax_3col.htm
分析:
最外層的wrapper把所有內(nèi)容都嵌套在里邊,整體相對(duì)定位。max min已經(jīng)很好的控制了最窄最寬值,但對(duì)IE沒有作用。如果沒有其他布局的穿插,這一層其實(shí)寫在body內(nèi)就可以,少一層嵌套。
#wrapper{ width:auto; border:1px solid #000; min-width:770px; max-width:1024px; text-align:left; margin-left:auto; margin-right:auto; position:relative;}
wrapper 下級(jí)的 outer header footer
其中header絕對(duì)定位,footer 相對(duì)定位;outer分別對(duì)左右有130px的外邊距,這是兼容非IE的關(guān)鍵。
#outer{ margin-left:130px; margin-right:130px; background:silver; border-left:1px solid #000; border-right:1px solid #000; color: #000;}
#header{ position:absolute; top:0; left:0; width:100%; height:70px; line-height:70px; border-bottom:1px solid #000; overflow:hidden; background:#0ff; text-align:center; font-size:xx-large}
#footer { width:100%; clear:both; line-height:50px; border-top:1px solid #000; background:#ffc; color:#000; text-align:center; position:relative;}
outer 下級(jí)的 clearheader outerwrap right clearer
clearheader 用做填補(bǔ)header的空白,clearer 是一個(gè)常用的填充hack用法。
outerwrap 寬為什么是99%,而不是100%?因?yàn)樗纳蠈觨uter有邊框,100%寬再加2個(gè)邊框象素就會(huì)撐大,F(xiàn)F有明顯效果。
right 的處理很經(jīng)典,IE下解析為定位,F(xiàn)F下則為浮動(dòng)。負(fù)邊距的處理也剛好使用上outer留出的空白。
#clearheader{ height:72px;}
.outerwrap { float:left; width:99%;}
#right {
position:relative;
width:130px; float:right; left:1px;
margin-right:-129px;
}
* html #right { margin-right:-130px; margin-left:-3px}
.clearer{ height:1px; overflow:hidden; margin-top:-1px; clear:both;}
outerwrap 內(nèi)的 centrecontent left clearer 就很簡(jiǎn)單了,思路類似上邊說明。
!--[if gte IE 5]> 指定IE5.0及版本以上瀏覽器有效
使用expression方法實(shí)現(xiàn)對(duì)IE5.0及以上版本的寬度條件控制。
body {width:expression( documentElement.clientWidth 770 ? (documentElement.clientWidth == 0 ? (body.clientWidth 770 ? "770" : "auto") : "770px") : "auto" );}
#wrapper {width:expression( documentElement.clientWidth > 1024 ? (documentElement.clientWidth == 0 ? (body.clientWidth >1024 ? "1024" : "auto") : "1024px") : "auto" );}
開始只想搞清楚老外是如何實(shí)現(xiàn)居中min max的,沒想到最后是expression,太失望了,其實(shí)這里使用腳本控制更好。另外,老外原文的 Min width of 800px 是錯(cuò)的,CSS定義就是770px,后來截屏確認(rèn)也是770px。
總的來說這是一個(gè)很復(fù)雜的布局例子,融合了很多經(jīng)典用法和定義,同時(shí)很傳統(tǒng)和實(shí)用。類似的復(fù)雜布局,四層嵌套實(shí)現(xiàn)對(duì)于傳統(tǒng)布局來說還是比較有優(yōu)勢(shì)的。
Referrence:
3 col layout with equalising columns and footer http://www.pmob.co.uk/temp/min-max-3col.htm