position:absolute相對於誰定位以及當溢出時怎麽隱藏
1、絕對定位元素溢出父元素,怎麽隱藏問題?
通常,為了讓DIV子元素超出部分隱藏,都是在父元素設置overflow:hidden,這樣即可防止子元素撐開父元素,使子元素能夠溢出隱藏!
但是,對於position:absolute定位的子元素,僅僅使用overflow:hidden沒辦法將其溢出部分隱藏,需要在父元素上也加上一個定位position:relative;才能將含有position:absolute屬性的子元素進行溢出隱藏!
絕對定位元素相對的元素是它最近的一個祖先,該祖先滿足:position的值必須是:relative、absolute、fixed,若沒有這樣的祖先則相對於body進行定位
而絕對定位的元素若超出其父元素的邊界,要想將溢出的部分隱藏,則,想隱藏在哪個祖先裏,該祖先必須同時設置position:relative/absolute/fixed和overflow:hidden的值。
2、絕對定位常見誤區:
通常我們常聽說:CSS絕對定位在沒有其他有除static定位的包含塊的情況下是以body進行定位,如果要想相對當前元素的父元素來定位,父元素一定要設置position:relative。
註意,前面一句是沒有問題的,在沒有父元素設置定位的話,默認就是以body來定位的,但是後面一句,要想相對父元素定位,父元素必須設置相對定位(relative),根據我的開發經驗和查閱相關資料確認後發現,這是不對的。
正確的理解姿勢是:
相對定位:相對於塊級元素(或行內塊)自身位置進行定位;
絕對定位:絕對定位的盒子是相對於離它最近的一個已定位的盒子進行定位的(默認是body);
註意:css描述的絕對定位概念,沒有說明是離他最近的一個已相對定位的盒子進行定位的,所以離他最近的盒子的定位可以是相對定位(relative)和絕對定位(absolute)的,但是在開發中,一般是父盒子設置相對定位的,但是不代表只能是相對定位。
舉個例子:
<div class="father">
<div class="son"></div>
</div>
.father{
width: 300px;
height: 300px;
background -color: orange;
position: absolute;
top:50%;
left:50%;
margin-top: -150px;
margin-left: -150px;
}
.son{
width: 100px;
height: 100px;
background-color: pink;
position: absolute;
left:0;
top:0;
}
.father元素絕對定位是相對body的,這個沒問題,主要看.son元素,他自身設置絕對定位,父元素.father也有絕對定位,你覺得這個子元素會相對body定位還是父元素來定位呢?
結果為:子元素是相對於有絕對定位的父元素來定位的,而不是body;
position:absolute相對於誰定位以及當溢出時怎麽隱藏