CSS 三欄等高布局實(shí)現(xiàn)方法

首先,三欄等高布局,顧名思義,可以概括為以下特征:
1、3列
2、這3列高等相等
3、這3列的高度不是固定不變,而是隨著內(nèi)容的變化而變化
Step 1:
xhtml代碼:
<div id="header">#header</div>
<div id="container">
<div id="main" class="column">#main</div>
<div id="left" class="column">#left</div>
<div id="right" class="column">#right</div>
</div>
<div id="footer">#footer</div>
主要結(jié)構(gòu)式#container的div,至于#header和#footer,完全是為了讓它能夠更像網(wǎng)頁(yè)一些,回到#container,它內(nèi)部包含三列,其中main里包含的是一個(gè)網(wǎng)頁(yè)最核心,最主要的內(nèi)容,所以我們不能怠慢,在純xhtml的流文檔中,瀏覽器是從上到下解析的,故重要的內(nèi)容應(yīng)該放在比較靠前的位置,這是由搜索引擎的權(quán)重決定的吧,但是視覺(jué)上,我們待會(huì)兒會(huì)把它放到中間。
思考一下:這三列怎么可能在沒(méi)有寫(xiě)死高度的時(shí)候還智能的齊頭并進(jìn)呢?
其實(shí)不寫(xiě)死高度的確不能辦到智能的齊頭并進(jìn),那怎么寫(xiě)死高等呢,答案就是,利用盒模型,寫(xiě)它的padding,這是一種方法,但挺奏效,就好比一個(gè)人 只有實(shí)際只有170cm,但是算上20cm的頭發(fā),天啊,他已經(jīng)是190cm了,還是先給出解決方法吧:就是利用padding-bottom和margin-bottom;
Step2:
#container {
background-image: url('bg.gif');
width: 960px;
margin: 0 auto;
}
#main{float: left: width: 500px;background-color: #e5e5e5;}
#left{float: left: width: 300px;background-color: #7bd;}
#right{float: right: width: 160px;background-color: #f63;}
Step3:
#container .column{
padding-bottom: 32767px;
margin-bottom: -32767px;
}
這一步應(yīng)該算是本主題的核心,至于32767 這個(gè)數(shù)你可以理解成“足夠大”,以便于有足夠的空間去擴(kuò)展它的盒子,這么高應(yīng)該是巨人癥吧,沒(méi)關(guān)系,我們可以用margin-bottom的負(fù)值去隱藏它,這個(gè)技巧,在我看來(lái),我真的解釋不清楚,有句古話: 意會(huì),言傳! 你只要試試看,就會(huì)領(lǐng)會(huì)到其中的奧妙。下邊這幅圖對(duì)你的理解應(yīng)該有幫助:
到了這步,你會(huì)發(fā)現(xiàn)這3列的盒模型為32767px,此時(shí)你要在父元素上加:overflow: hidden;當(dāng)然IE6.0是:zoom:1;
#container {
background-image: url('bg.gif');
width: 960px;
margin: 0 auto;
overflow: hidden;
}
Step4:
現(xiàn)在#main的視覺(jué)效果是在最左欄,我們要想辦法把它搞成中間
思路:先把#main排到中間,我們可以#main{margin-left:300},這時(shí),#left被擠到800px的位置,在#left{margin-left:-800px;}就能搞定,可惜啊,IE6,實(shí)在是無(wú)語(yǔ),只得重新思考了。
一般的,在css做布局時(shí),有幾種思路,一種是float,一種是定位,關(guān)于定位的話,不熟悉的google一下就行,提一下:position: relative;的這個(gè)屬性,如果不指明top,left的話,它的視覺(jué)效果不會(huì)改變。
所以,為了讓#main在視覺(jué)效果上有所突破,那么必須指明top或者left,在這里只需要指明left就行了,
#main {
float: left;
background-color: #e5e5e5;
width: 500px;
left: 300px;
}
#left {
float: left;
background-color: #7bd;
width: 300px;
left: -500px;
}
其實(shí)在這中間,還有一個(gè)概念是比較重要的,#main,#left有了position:relative以后,就有了層的概念,所以當(dāng)#main{left:300px}后,#left已經(jīng)出來(lái)了,不會(huì)被擠到800px的位置了,故:之需要left:-500px就能達(dá)到左邊,500是#main的寬。
最后考慮的是向下兼容,
提供一段代碼:
雖然寫(xiě)了這么多,但是你能夠做,并不代表你應(yīng)該這么做,這是一個(gè)戰(zhàn)術(shù)和戰(zhàn)略的問(wèn)題,以下是我個(gè)人想知道的:
我覺(jué)得一開(kāi)始:
padding-bottom: 32767px;
margin-bottom: -32767px;
這么大的值,在reflow階段會(huì)不會(huì)很耗資源,而采用js來(lái)控制他們的高度,會(huì)不會(huì)來(lái)得更輕松一些呢?
第一次寫(xiě)這種東東,感到很棘手,不管是構(gòu)思上還是在語(yǔ)言表達(dá)上都還是很晦澀的,希望大家積極的指正,希望能和更多的朋友來(lái)進(jìn)行交流,一方面是提高自己,另一方面是促進(jìn)社區(qū)的和諧和共享,盡一份自己微薄的力量。
相關(guān)文章
- 這篇文章主要介紹了css設(shè)置多列等高布局的方法示例的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-21
前端應(yīng)該掌握的CSS實(shí)現(xiàn)多列等高布局技巧
我們?cè)趯?xiě)頁(yè)面的時(shí)候,有的時(shí)候會(huì)遇到多欄布局,這篇文章主要介紹了前端應(yīng)該掌握的CSS實(shí)現(xiàn)多列等高布局技巧,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟2018-06-05利用CSS3的flexbox實(shí)現(xiàn)水平垂直居中與三列等高布局
這篇文章給大家介紹了三個(gè)小節(jié)的內(nèi)容,其中包括關(guān)于css3中flexbox需要掌握的概念、flexbox實(shí)現(xiàn)水平垂直居中對(duì)齊和三列等高自適應(yīng)頁(yè)腳區(qū)域黏附底部的布局,有需要的可以參考2016-09-12- 下面小編就為大家?guī)?lái)一篇淺析CSS等高布局的6種方式。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-04
用CSS實(shí)現(xiàn)三列DIV等高布局以傳達(dá)更好的視覺(jué)效果
頁(yè)面布局中經(jīng)常遇到等高布局的情況,為了得到更好的視覺(jué)效果,就要實(shí)現(xiàn)DIV等高布局的效果。以最普遍的DIV三列布局來(lái)說(shuō)2014-09-03- 這種情況下就需要兩列的高度保持一致了,左邊高度增加,右邊也跟著增加,右邊高度增加,左邊同樣也要增加,否則就會(huì)出現(xiàn)“斷層”的效果,接下來(lái)將介紹多列等高的實(shí)現(xiàn)方法,2012-12-03
CSS實(shí)例:CSS實(shí)現(xiàn)的等高網(wǎng)頁(yè)布局
網(wǎng)頁(yè)制作Webjx文章簡(jiǎn)介:為了讓網(wǎng)頁(yè)更美觀、協(xié)調(diào),有的時(shí)候需要用到左右等到布局,傳統(tǒng)的等高布局是用 javascript 實(shí)現(xiàn)的,現(xiàn)在來(lái)看看 silence 發(fā)明的真正的 CSS 實(shí)現(xiàn)的等2009-04-02CSS實(shí)例:三列等高布局-CSS教程-網(wǎng)頁(yè)制作-網(wǎng)頁(yè)教學(xué)網(wǎng)
三列等高CSS布局的一個(gè)實(shí)例, 修改國(guó)外的一個(gè)demo, 兼容到了IE5.5 和標(biāo)準(zhǔn)的瀏覽器OperaFirefoxSafari。 不過(guò)hack太多,不是很喜歡這樣做。 全部代碼如下2008-10-17- 本文講的等高布局是在不手動(dòng)設(shè)置元素高度的情況下,使用純css實(shí)現(xiàn)各個(gè)元素高度都相當(dāng)?shù)男Ч?,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看2019-01-09