css 中 margin 的一些特殊用法

在css中marginpadding經(jīng)常一起使用,多數(shù)情況下他們實現(xiàn)相同的效果。在一個塊級元素中,margin指塊級元素的外邊距,padding指塊級元素的內(nèi)邊距。

margin一些簡單使用本文不做介紹,下面我將羅列一些margin使用中容易混淆或者容易春錯的地方。

1.垂直外邊距合并問題

簡單地說,外邊距合并指的是,當(dāng)兩個垂直外邊距相遇時,它們將形成一個外邊距。合并后的外邊距的高度等于兩個發(fā)生合并的外邊距的高度中的較大者。這就是經(jīng)常說的margin重疊。

2.第一個子元素的margin-top問題

這是實際工作經(jīng)常碰到的一個問題,第一個子元素的margin-top會頂開父元素與父元素相鄰元素的間距,而且只在標(biāo)準(zhǔn)瀏覽器下(FirfFox、Chrome、Opera、Sarfi)產(chǎn)生問題,IE下反而表現(xiàn)良好。如果按照CSS規(guī)范,IE的“良好表現(xiàn)”其實是一個錯誤的表現(xiàn),因為IE的hasLayout渲染導(dǎo)致了這個“表現(xiàn)良好”的外觀。

這個問題發(fā)生的原因是一個盒子如果沒有上補白(padding-top)和上邊框(border-top),那么這個盒子的上邊距會和其內(nèi)部文檔流中的第一個子元素的上邊距重疊。也就是說,父元素的第一個子元素的上邊距margin-top如果碰不到有效的border或者padding.就會不斷一層一層的向上找。

解決方法就是給父級元素設(shè)置個有效的 border-top或者padding-top就可以了。這么寫當(dāng)然能解決問題,不過感覺很奇怪,為了寫一個margin-top,就強制個給父級元素加一個 border-top或者padding-top。與其這樣,還不如直接設(shè)置成padding-top。那什么時候該用margin,什么時候用padding?

3.用margin還是用padding

何時應(yīng)當(dāng)使用margin

  • 需要在border外側(cè)添加空白時;
  • 空白處不需要背景(色)時;
  • 上下相連的兩個盒子之間的空白,需要相互抵消時。如15px + 20px的margin,將得到20px的空白。

何時應(yīng)當(dāng)時用padding

  • 需要在border內(nèi)測添加空白時;
  • 空白處需要背景(色)時;
  • 上下相連的兩個盒子之間的空白,希望等于兩者之和時。如15px + 20px的padding,將得到35px的空白。

4.margin在塊元素、內(nèi)聯(lián)元素中的區(qū)別

margin在塊級元素下,他的性能可以完全體現(xiàn)。

margin在行內(nèi)塊級元素下,也是有效果的,但是margin-topmargin-bottom對內(nèi)聯(lián)元素(對行)的高度沒有影響。

margin在inline元素中的效果跟行內(nèi)塊級元素下效果一致。

5.負margin技術(shù)及其應(yīng)用

許多高級應(yīng)用和頁面上的疑難雜癥都可以用負margin技術(shù)來實現(xiàn)。
http://www.cnblogs.com/jscode/archive/2012/08/28/2660078.html

6.常見的瀏覽器下margin出現(xiàn)的bug

IE6/7/8下auto margin居中bug:
發(fā)生場合:給block元素設(shè)置margin auto無法居中
解決方法:出現(xiàn)這種bug的原因通常是沒有Doctype,然后觸發(fā)了ie的quirks mode,加上Doctype聲明就可以了。在《打敗IE的葵花寶典》里給出的方法是給block元素添加一個width能夠解決,但根據(jù)本人親測,加with此種方法是無效的,如果沒有Doctype即使給元素添加width也無法讓block元素居中。
原理分析:缺少Doctype聲明。

IE8下input[button | submit] 設(shè)置margin:auto無法居中
發(fā)生場合:ie8下,如果給像button這樣的標(biāo)簽(如button input[type="button"] input[type="submit"])設(shè)置{ display: block; margin:0 auto; }如果不設(shè)置寬度的話無法居中。
解決方法:可以給為input加上寬度
原理分析:IE8瀏覽器Bug。

IE8百分比padding垂直margin bug:
發(fā)生場合:當(dāng)父元素設(shè)置了百分比的padding,子元素有垂直的margin的時候,就好像父元素被設(shè)置了margin一樣。
解決方法:給父元素加一個overflow:hidden/auto。
原理分析:IE8瀏覽器Bug。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J的外補...
    _Yfling閱讀 14,199評論 1 92
  • 學(xué)習(xí)CSS的最佳網(wǎng)站沒有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_閱讀 1,200評論 0 1
  • 1.CSS基本概念 1.1 CSS的定義 CSS(Cascading Style Sheets)層疊樣式表,主要用...
    寥寥十一閱讀 2,082評論 0 6
  • @轉(zhuǎn)自GitHub 介紹一下標(biāo)準(zhǔn)的CSS的盒子模型?低版本IE的盒子模型有什么不同的?(1)有兩種, IE 盒子模...
    YT_Zou閱讀 1,387評論 0 1
  • 我是一名婦產(chǎn)科醫(yī)師,從一開始我就了解,接受了自然分娩 母乳喂養(yǎng)的理念,所以在我的工作中我不斷的去實踐去理解,跟...
    改變azj閱讀 315評論 0 0

友情鏈接更多精彩內(nèi)容