CSS2.0 HandBook上的解釋:
設定此屬性值為 absolute 會將物件拖離出正常的文件流絕對定位而不考慮它周圍內容的佈局。假如其他具有不同 z-index 屬性的物件已經佔據了給定的位置,他們之間不會相互影響,而會在同一位置層疊。此時物件不具有外補丁( margin ),但仍有內補丁( padding )和邊框( border )。
要啟動物件的絕對(absolute)定位,必須指定 left , right , top , bottom 屬性中的至少一個,並且設定此屬性值為 absolute 。否則上述屬性會使用他們的預設值 auto ,這將導致物件遵從正常的HTML佈局規則,在前一個物件之後立即被呈現。
TRBL屬性(TOP、RIGHT、BOTTOM、LEFT)只有當設定了position屬性才有效。
當設定position:absolute
如果父級(無限)沒有設定position屬性,那麼當前的absolute則結合TRBL屬性以瀏覽器左上角為原始點進行定位
如果父級(無限)設定position屬性,那麼目前的absolute則結合TRBL屬性以父級(最近)的左上角為原始點進行定位。
當設定position: relative
則參考父級(最近)的內容區的左上角為原始點結合TRBL屬性進行定位(或者說相對於被定位元素在父級內容區中的上一個元素進行偏移),無父級則以BODY的左上角為原始點。相對定位是不能層疊的。在使用相對定位時,無論元素是否移動,元素仍然佔據原來的空間。因此,移動元素會導致它覆蓋其他框。
一般來講,網頁居中的話用Absolute就容易出錯,因為網頁一直是隨著分辨率的大小自動適應的,而Absolute則會以瀏覽器的左上角為原始點,不會應為解析度的變化而變化位置。有時也需要依賴z-index來設定容器的上下關係,數值越大越在最上面,數值範圍就是自然數。當然有一點要注意,父子關係是無法用z-index來設定上下關係的,一定是子級在上父級在下。
設定此屬性值為 relative 會保持物件在正常的HTML流中,但是它的位置可以根據它的前一個物件進行偏移。在相對(relative)定位物件之後的文字或物件佔有他們自己的空間而不會覆蓋被定位物件的自然空間。與此不同的,在絕對(absolute)定位物件之後的文字或物件在被定位物件被拖離正常文件流之前會佔有它的自然空間。放置絕對(absolute)定位物件在可視區域之外會導致捲軸出現。而放置相對(relative)定位對像在可視區域之外,滾動條不會出現。其實對於定位的主要問題是要記住每個定位的意義。相對定位是「相對於「元素在文件流中初始位置的,而絕對定位是」相對於「最近的已經定位的祖先元素。
以下是補充:
雖然有知道css的絕對定位(absolute)、相對定位(relative),但從未自己動手寫過相關的效果!
忙活了一大半天,也算完成了!也把這兩個屬性搞懂了一些!
總結如下:
先看下面這一層結構