這幾天在慕課上看視頻學習,偶然聽到幾個老師都說:CSS絕對定位在沒有其他有除static定位的包含塊的情況下是以body進行定位,如果要想相對當前元素的父元素來定位,父元素一定要設置position:relative。注意,前面一句是沒有問題的,在沒有父元素設置定位的話,默認就是以body來定位的,但是后面一句,要想相對父元素定位,父元素必須設置相對定位(relative),根據我的開發經驗和查閱相關資料確認后發現,這是不對的。
正確的理解姿勢是:
相對定位:相對於塊級元素(或行內塊)自身位置進行定位;
絕對定位:絕對定位的盒子是相對於離它最近的一個已定位的盒子進行定位的(默認是body);
注意css描述的絕對定位概念,沒有說明是離他最近的一個已相對定位的盒子進行定位的,所以離他最近的盒子的定位可以是相對定位(relative)和絕對定位(absolute)的,但是在開發中,一般是父盒子設置相對定位的,但是不代表只能是相對定位,舉個栗子:
HTML:
1 <div class="father"> 2 <div class="son"></div> 3 </div>
CSS:
1 .father{ 2 width: 300px; 3 height: 300px; 4 background-color: orange; 5 position: absolute; 6 top:50%; 7 left:50%; 8 margin-top: -150px; 9 margin-left: -150px; 10 } 11 .son{ 12 width: 100px; 13 height: 100px; 14 background-color: pink; 15 position: absolute; 16 left:0; 17 top:0; 18 }
.father元素絕對定位是相對body的,這個沒問題,主要看.son元素,他自身設置絕對定位,父元素.father也有絕對定位,你覺得這個子元素會相對body定位還是父元素來定位呢?
結果為:子元素是相對於有絕對定位的父元素來定位的,而不是body;