css3的margin中的負(fù)值的深入研究

今天看到別人的代碼贝攒,發(fā)現(xiàn)有位大神寫了如下代碼

margin-left:-100px

以前也一直用margin這個(gè)屬性,但是從來(lái)沒(méi)有用過(guò)負(fù)值时甚,雖然有在別的文章中看到過(guò)負(fù)值的使用場(chǎng)景隘弊,但是一直覺(jué)得它是一個(gè)無(wú)用屬性哈踱,如果css迭代版本的話,應(yīng)該會(huì)取消這種用法......
但是還是太年輕梨熙,去網(wǎng)上查了下

  • 負(fù)margin是絕對(duì)標(biāo)準(zhǔn)的CSS开镣,W3C甚至標(biāo)注過(guò):對(duì)于margin屬性來(lái)說(shuō),負(fù)值是被允許的咽扇。
  • 完全兼容 并且所有現(xiàn)代瀏覽器都支持這種負(fù)值

好吧邪财,我現(xiàn)在承認(rèn)有必要去使用下這種hack方法,如果使用得當(dāng)质欲,應(yīng)該會(huì)是一個(gè)很強(qiáng)大的屬性树埠。

表現(xiàn)

首先在兩個(gè)display為block的元素,并且這兩個(gè)元素沒(méi)有使用浮動(dòng):

  1. 當(dāng)A元素的margin-top/margin-left被賦予負(fù)值時(shí)嘶伟,A元素將被拉進(jìn)指定的方向怎憋。比如向上或者向左


    A元素的margin-top/margin-left被賦予負(fù)值時(shí)
  2. 但是當(dāng)A元素margin-bottom/right為負(fù)數(shù),A元素并不會(huì)如你所想的那樣向下/右移動(dòng)九昧,而是將后續(xù)的元素拖拉進(jìn)來(lái)绊袋,覆蓋本來(lái)的元素。


    A元素margin-bottom/right為負(fù)數(shù)
  3. 雖然margin可以應(yīng)用到所有元素,但display屬性不同時(shí),表現(xiàn)也不同响迂,比如inline的上下margin就會(huì)無(wú)效。block的四個(gè)方向的margin都會(huì)有效展姐,這個(gè)很好理解。

重疊

如果margin設(shè)置成了負(fù)值姓建,大多數(shù)情況下后面的元素會(huì)覆蓋前面的元素,但是缤苫,也不總是速兔,具體覆蓋情況要分為背景和內(nèi)容,以及display的屬性活玲。
在普通流布局中涣狗,瀏覽器將頁(yè)面布局分為內(nèi)容和背景,內(nèi)容的層疊顯示始終高于背景舒憾。block元素分為內(nèi)容和背景镀钓,而inline元素或inline-block元素,它本身就是內(nèi)容(包括其背景等樣式設(shè)置)
總結(jié)一下就是镀迂,

  • 在兩個(gè)block元素重疊后丁溅,后面元素可以覆蓋前面元素的背景,但無(wú)法覆蓋其內(nèi)容
  • 當(dāng)兩個(gè)inline元素探遵,或兩個(gè)line-block元素窟赏,或inline與inline-block元素重疊時(shí)妓柜,后面元素可以覆蓋前面元素的背景和內(nèi)容。
  • 如果兩者和浮動(dòng)元素重疊涯穷,那么內(nèi)容將會(huì)在浮動(dòng)元素之上顯示棍掐,但是背景可能就會(huì)被浮動(dòng)元素覆蓋。
    其實(shí)這個(gè)沒(méi)有什么意義拷况,真的想要顯示在最上面作煌,使用z-index就可以了嘛

應(yīng)用

  • 水平垂直居中,但是有要求赚瘦,要居中的元素的寬/高是不變的或者說(shuō)是確定的粟誓,比如width/height=100px,那么設(shè)置absolute的top/left=50%,然后margin-left/margin-top=-50px即可.但是這個(gè)場(chǎng)景用的不多蚤告。
    如果要居中的元素的寬/高是不確定的努酸,這時(shí)margin負(fù)值就不能使用具體的px了,可以使用百分比杜恰。但由于margin的百分比都是相對(duì)于包含塊的寬度获诈,所以這里限制了只能設(shè)置寬高相同的居中元素。包含塊的寬度如何獲得呢心褐?利用absolute的包裹性舔涎,在需要居中的元素外面套一個(gè)空的<div>元素即可
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>垂直居中</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
  .box{
     position:relative;
     width: 200px;
     height: 200px;
     background-color: lightgreen;
     border: 2px solid black;
    }
  .out{
    position: absolute;
    left: 50%;
    top: 50%;
  }    
  .in{
    height: 100px;
    width: 100px;
    background-color: pink;
    margin-left: -50%;
    margin-top: -50%;
  }

  </style>
</head>
<body>
  <div class="box">
    <div class="out">
        <div class="in">測(cè)試內(nèi)容</div>    
    </div> 
  </div>
</body>
</html>
水平垂直居中
  • 三欄自適應(yīng)布局

中間的主體使用雙層標(biāo)簽,外層<div>寬度100%顯示逗爹,并且浮動(dòng)亡嫌,內(nèi)層<div>為真正的主體內(nèi)容,含有左右110px的margin值掘而。左欄和右欄都采用margin負(fù)值挟冠。左欄左浮動(dòng),margin-left為-100%袍睡,正好使左欄位于頁(yè)面左側(cè)知染。右欄左浮動(dòng),大小為其本身的寬度100px

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>垂直居中</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
  html,body{
      height: 100%;
  }
  body{
      margin: 0;
  }
  .main{
      width: 100%;
      height: 100%;
      float: left;
  }
  .main .in{
      margin: 0 110px;
      background-color: pink;
      height: 100%;
  }
  .left{
      height: 100%;
      width: 100px;
      float: left;
      background-color: lightgreen;
      margin-left: -100%;
  }
  .right{
      height: 100%;
      width: 100px;
      float: left;
      background-color: lightgreen;
      margin-left: -100px;
  }
  </style>
</head>
<body>
  <div class="main">
    <div class="in">content</div>
  </div>
  <div class="left">left slider</div>
  <div class="right">right slider</div>
</body>
</html>
三欄自適應(yīng)布局
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斑胜,一起剝皮案震驚了整個(gè)濱河市控淡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌止潘,老刑警劉巖掺炭,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異凭戴,居然都是意外死亡涧狮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)勋篓,“玉大人吧享,你說(shuō)我怎么就攤上這事∑┫” “怎么了钢颂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拜银。 經(jīng)常有香客問(wèn)我殊鞭,道長(zhǎng),這世上最難降的妖魔是什么尼桶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任操灿,我火速辦了婚禮,結(jié)果婚禮上泵督,老公的妹妹穿的比我還像新娘趾盐。我一直安慰自己,他們只是感情好小腊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布救鲤。 她就那樣靜靜地躺著,像睡著了一般秩冈。 火紅的嫁衣襯著肌膚如雪本缠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天入问,我揣著相機(jī)與錄音丹锹,去河邊找鬼。 笑死芬失,一個(gè)胖子當(dāng)著我的面吹牛楣黍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棱烂,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼租漂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了垢啼?” 一聲冷哼從身側(cè)響起窜锯,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤张肾,失蹤者是張志新(化名)和其女友劉穎芭析,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吞瞪,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馁启,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惯疙。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翠勉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出霉颠,到底是詐尸還是另有隱情对碌,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布蒿偎,位于F島的核電站朽们,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诉位。R本人自食惡果不足惜骑脱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苍糠。 院中可真熱鬧叁丧,春花似錦、人聲如沸岳瞭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寝优。三九已至条舔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乏矾,已是汗流浹背孟抗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钻心,地道東北人凄硼。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像捷沸,于是被迫代替她去往敵國(guó)和親摊沉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案痒给? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,754評(píng)論 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5说墨? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,490評(píng)論 1 45
  • 學(xué)會(huì)使用CSS選擇器熟記CSS樣式和外觀屬性熟練掌握CSS各種選擇器熟練掌握CSS各種選擇器熟練掌握CSS三種顯示...
    七彩小鹿閱讀 6,314評(píng)論 2 66
  • CSS 是什么 css(Cascading Style Sheets)苍柏,層疊樣式表尼斧,選擇器{屬性:值;屬性:值}h...
    崔敏嫣閱讀 1,484評(píng)論 0 5
  • 我在夢(mèng)中尋覓著你的身影试吁,想要把它帶回我的世界棺棵。
    迷路的夏天閱讀 94評(píng)論 0 0