CSS實(shí)現(xiàn)網(wǎng)頁(yè)分欄布局的方法:絕對(duì)定位和浮動(dòng)

在CSS中,實(shí)現(xiàn)分欄布局有兩種方法。第一種方法是使用四種CSS定位選項(xiàng)(absolute 、static、relative和fixed)中的絕對(duì)定位(absolute positioning),它可以將文檔中的某個(gè)元素從其原本位置上移除,并重新定位在期望的任何地點(diǎn)之上。第二種則是使用CSS中的浮動(dòng)(float)
在CSS中,實(shí)現(xiàn)分欄布局有兩種方法。第一種方法是使用四種CSS定位選項(xiàng)(absolute 、static、relative和fixed)中的絕對(duì)定位(absolute positioning),它可以將文檔中的某個(gè)元素從其原本位置上移除,并重新定位在期望的任何地點(diǎn)之上。第二種則是使用CSS中的浮動(dòng)(float)概念。
絕對(duì)定位或浮動(dòng)都能夠用來(lái)實(shí)現(xiàn)分欄效果。二者可以獨(dú).立使用,也可以結(jié)合在一起,相輔相成。
1、絕對(duì)定位
絕對(duì)定位的優(yōu)勢(shì)在于,我們可以絲毫不差地精確控制任何元素的位置—這里面沒(méi)有什么需要猜測(cè)或者運(yùn)氣的成分。由于應(yīng)用了絕對(duì)定位的元素被不留痕跡地從常規(guī)文檔流中完全移除,所以它也不會(huì)為其他元素帶來(lái)任何的影響。
那么讓我們?cè)囈辉囉媒^對(duì)定位如何實(shí)現(xiàn)下面的布局。
這是一個(gè)三欄的布局,并且是居中顯示的。其中,A欄是主體內(nèi)容欄,B欄和C欄都是側(cè)邊欄。首先,我們不可能直接用絕對(duì)定位將A、B、C三欄定位到居中的位置,因?yàn)槊總€(gè)人顯示器的分辨率是不同的,在1024X768分辨率的顯示器上定位的居中效果,在別的分辨率的顯示器上看到的效果肯定不會(huì)是居中顯示的,那么,該如何解決這個(gè)問(wèn)題呢?
幸好,在絕對(duì)定位模型中有個(gè)極為有用的特性,那就是:若某個(gè)絕對(duì)定位元素的容器也被定位過(guò),那么該元素指定的top和left值將不會(huì)基于文檔的根元素html(也就是瀏覽器窗口的左上角)計(jì)算,而是會(huì)基于其容器的左上角計(jì)算這個(gè)偏移量。換句話說(shuō),也就是:被定位過(guò)的容器將扮演其中所有元素絕對(duì)定位起始點(diǎn)的角色。
所以,利用這個(gè)特性,我們給A、B、C欄的外部加上一個(gè)容器D,如下圖:
然后,我們讓容器D居中,并給它加上一個(gè)屬性:position:relative,這樣,再用絕對(duì)定位定位A、B、C的top和left值,A、B、C的位置就會(huì)基于容器D的左上角的位置來(lái)計(jì)算了,這樣就可以實(shí)現(xiàn)我們期望的三欄居中的效果了。
但是,我們常用的布局并沒(méi)有這么簡(jiǎn)單,除了三欄之外,我們還需要一個(gè)頁(yè)頭和一個(gè)頁(yè)腳,如下圖:
這時(shí)候,再用絕對(duì)定位布局就行不通了,因?yàn)榻^對(duì)定位的元素會(huì)從文檔流中完全移除,這時(shí),頁(yè)腳會(huì)緊挨著頁(yè)頭,顯示在頁(yè)頭的下方。
如果我們一定要采用絕對(duì)定位的話,那么必須預(yù)先知道這三欄中每一欄的高度,然后再根據(jù)其中最高的一欄定位頁(yè)腳。若是任意一欄中的文本長(zhǎng)度無(wú)法確定的話,除了使用JavaScript,我們也只能放棄絕對(duì)定位的念頭,轉(zhuǎn)而投入到浮動(dòng)布局的懷抱。
2、浮動(dòng)
浮動(dòng)的本意是要將插.入到文章中的圖片向左或者向右浮動(dòng),使圖片下方的文字自動(dòng)環(huán)繞在它的周圍,使圖片的左邊或者右邊不會(huì)出現(xiàn)一大塊的留白。
浮動(dòng)的語(yǔ)法雖然簡(jiǎn)單,但卻不那么容易掌握,下面讓我們舉例說(shuō)明如何用浮動(dòng)來(lái)進(jìn)行布局。同樣,我們要實(shí)現(xiàn)一個(gè)帶頁(yè)腳的三欄布局。如下圖:
如何用浮動(dòng)實(shí)現(xiàn)這樣的效果呢?其實(shí)很簡(jiǎn)單:
1、設(shè)定E的寬度,讓E居中
2、設(shè)定A、B、C的寬度,將A、B、C分別向左浮動(dòng)
3、給頁(yè)腳設(shè)置clear屬性
需要說(shuō)明的是,浮動(dòng)布局依然遵循常規(guī)文檔流,所以與絕對(duì)定位相比,浮動(dòng)定位時(shí)HTML源文件中元素聲明的位置顯得格外重要。 當(dāng)然,解決這個(gè)問(wèn)題的最簡(jiǎn)單的方法就是在源文件中交換左欄和右欄的聲明次序,也有方法不用交換各欄的次序也可以實(shí)現(xiàn)同樣的布局,但是,這就要用到一種比較晦澀的使用負(fù)邊距值的方法。一般情況下,人們會(huì)選擇交換源文件中左中兩欄的聲明次序。
相關(guān)文章
- 這篇文章主要為大家詳細(xì)介紹了CSS3定位和浮動(dòng)的概念,以及實(shí)例代碼講解CSS3定位和浮動(dòng)的使用方法,感興趣的小伙伴們可以參考一下2016-05-10
css的核心內(nèi)容 標(biāo)準(zhǔn)流、盒子模型、浮動(dòng)、定位等分析
css的核心內(nèi)容:標(biāo)準(zhǔn)流、盒子模型、浮動(dòng)、定位(可以說(shuō)不理解這些概念絕做不出合適的網(wǎng)頁(yè))2009-12-21css 相對(duì)定位 絕對(duì)定位 浮動(dòng) 分析
W3School 站點(diǎn)上的所有頁(yè)面都采用了這種技術(shù),如果您打開(kāi)我們使用 CSS 文件,您會(huì)看到我們對(duì)頁(yè)腳的 div 進(jìn)行了清理,而頁(yè)腳上面的三個(gè) div 都向左浮動(dòng)。2009-10-15純CSS定位的固定垂直居中浮動(dòng)層代碼,附經(jīng)典解說(shuō) 《詳解定位與定位應(yīng)用
關(guān)于在html中浮動(dòng)層是眾多網(wǎng)頁(yè)愛(ài)好者剛開(kāi)始的難點(diǎn),主要在于定位。如果你對(duì)CSS定位還不夠了解 可以接著往下看,運(yùn)行里面的內(nèi)容即可。 【需求】: 將一個(gè)網(wǎng)頁(yè)分成頭、身2009-07-01css 浮動(dòng)(float)頁(yè)面布局(下)
我們接著上節(jié)課,繼續(xù)學(xué)習(xí),我把頁(yè)面整體效果發(fā)出來(lái),方便大家學(xué)習(xí)2010-01-07- 前四節(jié)的大練習(xí)大家做的怎么樣?有沒(méi)有難度,如果你覺(jué)著有難度沒(méi)有關(guān)系,這節(jié)課,我?guī)е蠹易鲆幌逻@個(gè)練習(xí)!2010-01-07
- DIV+CSS網(wǎng)頁(yè)布局常用到浮動(dòng)方案,但浮動(dòng)并不像表格那樣好用,很多時(shí)候會(huì)出問(wèn)題。同時(shí)設(shè)計(jì)不夠良好的浮動(dòng)布局,在不同的瀏覽器下會(huì)有不同的表現(xiàn),可能設(shè)計(jì)時(shí)照著常用的瀏覽2009-10-28
- 在CSS中,實(shí)現(xiàn)分欄布局有兩種方法。第一種方法是使用四種CSS定位選項(xiàng)(absolute 、static、relative和fixed)中的絕對(duì)定位(absolute positioning),它可以將文檔中的某個(gè)元素2009-07-01
網(wǎng)頁(yè)布局 CSS簡(jiǎn)單實(shí)現(xiàn)垂直居中-CSS教程-網(wǎng)頁(yè)制作-網(wǎng)頁(yè)教學(xué)網(wǎng)
英文原文: http://www.search-this.com/2008/05/15/easy-vertical-centering-with-css/ 中文譯文: http://www.12sui.cn/blog/71.html 本人英語(yǔ)還沒(méi)過(guò)四級(jí),所以不2008-10-17- 這篇文章主要介紹了css布局之定位與浮動(dòng)的相關(guān)資料,需要的朋友可以參考下2018-05-21