題外話:
三軍統帥,征戰沙場。運籌帷幄之中,決勝千里之外。好不痛快淋漓!
吾等不列行伍之中,無法感於此等盡興與酣暢。而每日面對程序,能夠暢快的遊弋於各種對象與元素之間,使之誓死聽命於自己,這豈不是與戰場上的酣暢有着異曲同工之妙呢?
既然我們註定成爲不了將軍,那就努力讓我們在自己的地盤上“稱王稱霸”吧!再借用一句廣告語:我的地盤我做主!這也就是這篇文章我這樣命名的用意。
進入正文:
div+css用於網頁佈局似乎已經流行了很久很久了,可固執的我從骨子裏似乎對它就有牴觸情節,一方面對之輕視,一方面每每遇到它又被其折磨的痛苦不堪。痛定思痛,決定對它潛心研究一下,將其玩弄於股掌之間!
網上搜了搜div定位相關的內容,大多是從表面上介紹一些使用上的規律,很少有描述爲什麼如此的文章。於是,便引發了我想寫這樣一篇文章的衝動。
說到頁面元素的定位,就不得不首先提起文檔流的概念。
關於文檔流,我並沒有在網絡或書籍上找到一個確切的定義。在此,我只能說說我個人對其的認識。
所謂文檔流,即爲頁面元素自上而下、從左到右的排列次序,如同線性的流一般。我們在編寫頁面時,也基本上是按照這樣的一個順序來安置各種元素。如果我們沒有對div指定定位方式的話,瀏覽器就會按照其在文檔流中的次序進行顯示。如:
以下爲引用的內容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
上述代碼中,兩div並未採取任何的定位方式,瀏覽器按普通文檔流的方式對其顯示,以下是顯示效果:
下面我們就來詳細的說說div定位的關鍵的兩個步驟。
首先,我們要判斷被定位元素是否脫離普通文檔流。是否脫離文檔流將會影響文檔流中其餘元素的定位。
對於脫離了文檔流的元素,其顯示已經不再受普通文檔流的束縛,而文檔流中的其餘元素的定位就如同該元素已經不在頁面上一樣。
而對於未脫離文檔流的元素,其無論偏移到了頁面的何處,實際上佔據的仍然是其原來的位置。文檔流中的其餘元素定位時,也就會相應的留出該元素的位置。
在幾種定位方式中,position:absolute和float是脫離文檔流的,而position:relative不會使被定位的對象脫離普通的文檔流。下面我們來舉例說明:
以下爲引用的內容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
以下爲引用的內容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
以上兩示例代碼中,唯一一處區別就是divSecond一個採用absolute定位,另一個採用relative定位。這就會導致很大的不同,見下圖:
div的定位參數有四個:static(默認),relative,absolute,fixed四個.
static與relative一組
absolute與fixed一組
static是系統默認的div定位方式,relative是在默認定位方式的情況下,進行的偏移,並且默認位置的空間將被佔據,如上圖所示,該空間無法被其它div佔用,通常和top,bottom,left,right等參數配合使用.
absolute是將div放置到整個web頁面的絕對位置上,不影響static和relative的div排列.
fixed是將div放置到整個瀏覽器窗口的絕對位置上,當窗口滑動時,div跟隨滑動.
divSecond採用absolute定位的頁面中,原來位於divSecond下的divThird上移將其的位置佔據;而採用relative定位的頁面中沒有出現這樣的情況。
其次,確定被定位元素偏移的參照物。找準參照物,被定位元素的位置也就明晰了。
由position:absolute定位的元素參照的對象是其最近的已定位(包括position:absolute和position:relative兩種方式)的祖先元素(祖先元素即位於外層,嵌套其的元素),若該祖先元素不存在,則其參照最初的包含塊,如頁面畫布。float和position:relative兩種定位方式參照的是被定位元素在普通文檔流中的原本的位置。
被position:absolute和position:relative定位的元素,其偏移量由top、left、bottom和right確定。float定位指示了其是向右(right)、向左(left),還是同時向左右(both)漂移。以下爲示例:
以下爲引用的內容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
以上代碼中divFifth採用了absolute定位,其運行效果圖爲:
很明顯,因divFifth無已定位的祖先元素,其參考物爲頁面畫布。如果divFifth採用relative定位,其顯示效果又是什麼樣呢?見下圖:
如此,divFifth的定位參照物便是其原來在普通文檔流中的位置。
在div下的子div定位是相對於父div而言的.
好了,就寫到這吧!至於採用float定位時參照物的選擇,請讀者自己去嘗試吧!
此篇文章中介紹的對div的定位分析,同樣適用於 p 、ul 等塊狀元素。相信你看了這篇文章後,一定會對元素定位有一個全新的認識,進而將其玩弄於股掌之間。 最後附上一張關於定位的總結表格:
6.float|浮動對齊
使用float定位一個元素有float:left;float:right;兩種值。這種DIV定位只能在水平座標定位,不能在垂直座標定位。而且讓下面的元素浮動環繞在它的左邊或者右邊,float同樣是在父標籤下的排列。
example:
- #div-1a{
- float:left;
- width:200px;
- }
7.maketwoclumnwithfloat|浮動實現兩列布局
如果讓一個元素float:left;另一個float:right;控制好他們的寬度,就能實現兩列的佈局效果。
example:
- #div-1a{
- float:left;
- width:150px;
- }
- #div-1b{
- float:left;
- width:150px;
- }
8.clearfloat|清除浮動
如果你不想讓使用了float元素的下面的元素浮動環繞在它的周圍,那麼你就使用DIV定位中的clear,clear有三個值,clear:left;(清除左浮動),clear:right;(清除右浮動),clear:both;(清除所有浮動)。
example:
- <dividdivid="div-1a">thisisdiv-1a</div>
- <dividdivid="div-1b">thisisdiv-1b</div>
- <dividdivid="div-1c">thisisdiv-1c</div>
- #div-1a{
- float:left;
- width:190px;
- }
- #div-1b{
- float:left;
- width:190px;
- }
- #div-1c{
- clear:both;
- }