負(fù)margin的原理及應(yīng)用

在很多布局中我們經(jīng)常能夠見(jiàn)到類(lèi)似于margin:-10px;的用法,我們對(duì)正值的用法早已熟悉的不能再熟悉了峭判,可是這負(fù)值到底有何用呢跋选?聽(tīng)我給你吹。

負(fù)margin——普通文檔流

普通文檔流元素(不浮動(dòng)彬祖,無(wú)絕對(duì)定位,無(wú)固定定位的元素)品抽。如下圖:
代碼

圖1

負(fù)邊距會(huì)使這些文檔流中的元素發(fā)生位置偏移储笑,但不同于相對(duì)定位的偏移,相對(duì)定位的偏移會(huì)保留原來(lái)的位置圆恤,后面的元素不會(huì)去占據(jù)原有位置突倍。負(fù)邊距就恰恰相反,使用了負(fù)邊距的元素不僅會(huì)去占別人的地方,自己的地方也會(huì)被別人霸占赘方。對(duì)圖1中box2設(shè)置
margin:-10px;烧颖,效果如下:
圖2

box2左邊好像嵌入了瀏覽器邊框弱左,上面蓋住了box1窄陡,下面被box2蓋住了。這就好像負(fù)margin改變了box2在文檔流中占據(jù)的空間大小拆火,使得后面的元素流動(dòng)了上來(lái)跳夭。
還要注意的是,文檔流只能是后面的流向前面的们镜,即文檔流只能向左或向上流動(dòng)币叹,不能向下或向右移動(dòng)。
再舉一個(gè)例子:
代碼
父容器不設(shè)置高度模狭,高度由子容器撐開(kāi)颈抚,當(dāng)子容器設(shè)置上下負(fù)margin時(shí),父容器高度減小嚼鹉。
如圖3是設(shè)置負(fù)margin前的效果:
圖3

如圖4是設(shè)置負(fù)margin后的效果:
圖4

從審查元素中可以看出設(shè)置后父元素的高度減小了10px贩汉,而且子元素內(nèi)容溢出來(lái)了。
這就說(shuō)明:在文檔流中锚赤,元素的最終邊界是由margin決定的匹舞,margin為負(fù)的時(shí)候就相當(dāng)于元素的邊界向里收,文檔流認(rèn)的只是這個(gè)邊界线脚,不會(huì)管你實(shí)際的尺寸是多少赐稽。

負(fù)margin left/right——對(duì)寬度的影響

對(duì)于沒(méi)有寬度的塊級(jí)元素,設(shè)置負(fù)margin值浑侥,會(huì)使塊級(jí)元素變寬姊舵。
舉個(gè)例子:父容器div設(shè)置寬度300px,子元素div不設(shè)置寬度寓落,默認(rèn)寬度為父容器的100%括丁,如圖5
代碼

圖5

當(dāng)為子元素設(shè)置margin-left:-100px;時(shí),如圖6零如,可以看出子元素伸出了父元素躏将,寬度變成了400px。
圖6

負(fù)margin——浮動(dòng)元素

利用負(fù)margin值可以使因空間不夠被擠到下一行的浮動(dòng)元素重新上去考蕾。
舉個(gè)例子:父容器寬度280px祸憋,包含三個(gè)設(shè)置了左浮動(dòng)寬度都為100px的div,由于寬度不夠第三個(gè)浮動(dòng)元素只能在第二行顯示肖卧,如圖7

圖7

為第二行元素設(shè)置margin-left:-20px;會(huì)使其重新上到第一行蚯窥,但是會(huì)遮擋一部分巧克力色的元素,如圖8所示。
圖8

負(fù)邊距對(duì)浮動(dòng)元素的影響與負(fù)邊距對(duì)文檔流中元素的影響其實(shí)是差不多的拦赠。文檔流中元素的位置由文檔流的走向決定巍沙,浮動(dòng)的元素也可以看成有一個(gè)“浮動(dòng)流”存在,不過(guò)浮動(dòng)流既可以向左荷鼠,也可以向右句携。

負(fù)margin的具體應(yīng)用

1. 圣杯布局和雙飛翼布局

代碼
這兩種布局的具體實(shí)現(xiàn)就不再贅述,但是它們都是利用了負(fù)margin對(duì)浮動(dòng)元素的影響這一特性實(shí)現(xiàn)的

圖9

2. 元素等間距排列

效果如下圖:
代碼

圖10

實(shí)現(xiàn)以上效果的步驟:

  1. 讓li元素都浮動(dòng)起來(lái)允乐。這樣li就會(huì)一個(gè)挨著一個(gè)排列了矮嫉。
  2. 為每個(gè)li設(shè)置margin-right。這樣每個(gè)li都會(huì)和右邊的li有一個(gè)間距牍疏。
  3. 由于父容器的寬度是固定的蠢笋,其寬度實(shí)際上是比3個(gè)li的寬度+2個(gè)margin-right的寬度,多以我們必須去掉最右邊一列的所有l(wèi)i的寬度鳞陨,才能使父容器一行剛好包裹3個(gè)li和2個(gè)空隙昨寞。我們可以給右邊一列的所有l(wèi)i用選擇器都去掉邊框,但是這種方法很麻煩厦滤,而且如果遇到各個(gè)li是動(dòng)態(tài)變化的時(shí)候援岩,就更難處理了。這時(shí)馁害,負(fù)邊距就有用了窄俏。我們只需要為ul添加一個(gè)margin-right:-20px;,就完美解決問(wèn)題碘菜。
    你可能會(huì)問(wèn)負(fù)邊距怎么把li的右邊距變沒(méi)了凹蜈,其實(shí)并沒(méi)有,只是負(fù)邊距讓ul變寬了忍啸。
    ul的width=3個(gè)li的寬度+3個(gè)margin-right=360px;
    wrapper的width=3個(gè)li的寬度+2個(gè)marign-right的寬度=340px;
    事實(shí)上ul是溢出wrapper的仰坦,溢出部分就是我們不需要的右邊那列的右邊距,我們只需要給wrapper加一個(gè)overflow:hidden就可以啦计雌。

3. 負(fù)邊距+絕對(duì)定位悄晃,實(shí)現(xiàn)水平垂直居中

代碼
效果如下圖:

圖11

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市凿滤,隨后出現(xiàn)的幾起案子妈橄,更是在濱河造成了極大的恐慌,老刑警劉巖翁脆,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眷蚓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡反番,警方通過(guò)查閱死者的電腦和手機(jī)沙热,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)叉钥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人篙贸,你說(shuō)我怎么就攤上這事投队。” “怎么了爵川?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵敷鸦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我雁芙,道長(zhǎng)轧膘,這世上最難降的妖魔是什么钞螟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任兔甘,我火速辦了婚禮,結(jié)果婚禮上鳞滨,老公的妹妹穿的比我還像新娘洞焙。我一直安慰自己,他們只是感情好拯啦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布澡匪。 她就那樣靜靜地躺著,像睡著了一般褒链。 火紅的嫁衣襯著肌膚如雪唁情。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天甫匹,我揣著相機(jī)與錄音甸鸟,去河邊找鬼。 笑死兵迅,一個(gè)胖子當(dāng)著我的面吹牛抢韭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恍箭,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼刻恭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了扯夭?” 一聲冷哼從身側(cè)響起鳍贾,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎交洗,沒(méi)想到半個(gè)月后骑科,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡藕筋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年纵散,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梳码。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伍掀,死狀恐怖掰茶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜜笤,我是刑警寧澤濒蒋,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站把兔,受9級(jí)特大地震影響沪伙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜县好,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一围橡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缕贡,春花似錦翁授、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至谍倦,卻和暖如春塞赂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昼蛀。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工宴猾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人曹洽。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓鳍置,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親送淆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子税产,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,748評(píng)論 1 92
  • display: none; 與 visibility: hidden; 的區(qū)別 聯(lián)系:它們都能讓元素不可見(jiàn) 區(qū)別...
    紋小艾閱讀 1,463評(píng)論 0 1
  • 學(xué)習(xí)CSS的最佳網(wǎng)站沒(méi)有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_閱讀 1,050評(píng)論 0 1
  • css中的負(fù)邊距(negative margin)是布局中的一個(gè)常用技巧偷崩,只要運(yùn)用得合理常常會(huì)有意想不到的效果辟拷。很...
    studystudy閱讀 1,150評(píng)論 0 0
  • CSS布局奇淫巧計(jì)之-強(qiáng)大的負(fù)邊距css中的負(fù)邊距(negative margin)是布局中的一個(gè)常用技巧,只要運(yùn)...
    呦泥酷閱讀 446評(píng)論 0 1