position:relative和position:absolute都可以改變元素在文檔中的位置,都能激活元素的left、top、right、bottom和z-index屬性。(默認這些屬性未激活,設置了也無效)
設置position:relative和position:absolute都會讓元素浮起來,會改變正常情況下的文檔流。
不同:
position:relative會保留自己在z-index:0層的占位,left、top、right、bottom值是相對於自己在z-index層的位置。
position:absolute會完全脫離文檔流,不再z-index:0層保留占位符,其left、top、right、bottom值是相對於自己最近的一個設置了position:relative或position:absolute的祖先元素的,如果祖先元素全都沒有設置,那么就相對於body元素。
float也能改變文檔流,不同的是,float不會讓元素浮到另一個元素上面,它仍然讓元素在z-index:0層排列,只能通過float:left和float:right來控制元素在同一層里"左浮"和"右浮"。float會改變正常的文檔流排列,影響周圍元素。
position:absolute和float會隱式的改變display類型,不論之前什么類型的元素(display:none除外),只要設置了position:absolute和float中任何一個,都會讓元素以display:inline-block的方式顯示:可以設置長寬,默認寬度並不占滿父元素。就算顯示的設置display:inline或者display:block,也仍然無效(IE6雙倍邊距BUG利用display:inline解決)。
position:relative卻不會隱式改變display類型。