一、判定邊界相鄰
?文檔流中元素的按塊元素從上到下,內聯元素從左至右依次流入頁面,一個元素流入時,會按照與上一個元素的判定邊界相鄰流入頁面,關于此處所說判定邊界,并不是單指border,而是margin影響后,后一個元素流入時的判定邊界(正margin則border加上該值,負margin則減去該值),如下例所示:
- 元素1有margin-right=10px,元素2無margin-left:
?元素2流入時,其判定邊界(border+0=border)與元素1的判定邊界(border+10px)相鄰。所以中間即是元素1的margin-right。
- 元素1有margin-right=10px,元素2有margin-left=10px:
?元素2流入時,其判定邊界(border+10px)與元素1的判定邊界(border+10px)相鄰,中間的20px即為元素1的margin-right和元素2的margin-left。
二、負邊距改變元素在文檔流中位置
?當margin值為負數時,元素流入依然遵循以上原則,從而可以改變元素在文檔流中位置。
- 元素1margin-right:-10px;元素2無margin-left:
?圖中,看似元素1寬度減少(10px),實則不然,設置元素2的opacity:0.5:
?顯然,元素1寬度并未減小,而是元素2流入頁面時,元素2的判定邊界(border+0px)與元素1的判定邊界(border-10px)相鄰,所以表現為元素2在流中向左移動了10px,元素1并未變窄,只是有10px的領域變成了與元素2的共享領域。
?這成為了負邊距在布局中的一個應用,即改變元素位置(注:與position:relative不同,負邊距改變位置的元素不會再占據原來位置);
三、負邊距增加元素寬度
?除了改變元素位置之外,負邊距在布局中的另外一項應用就是增加元素寬度。
-
外層div固定寬度,內層div不設定width、margin
外層固定,內層不設width、margin - 內層div,margin:0 50px:
?此時內層div左右各收縮50px,表現為元素縮小。
-
內層div,margin:0 -50px:
內層div,margin:0 -50px
?此時,依然判斷邊界相鄰,內層div的判定邊界(border-50px)與外層div的判斷邊界(border+0)相鄰,表現為內層div變寬,且超出容器寬度。
?這是負邊距在布局中的第二種應用,即使元素變寬。