2010-10-11 308 views
58

請參閱我的代碼,我不明白爲什麼這些div的邊距重疊。CSS邊距重疊問題

<div class="alignright"> 

    <div class="social"> 
     <a href="#" class="twit"></a> 
     <a href="#" class="fb"></a> 
    </div><!-- social --> 

    <div class="contact"> 
     Get in Touch: <span>+44 10012 12345</span>    
    </div><!-- contact --> 

    <div class="search"> 
     <form method="post" action=""> 
      <input type="text" value="" name="s" gtbfieldid="28"> 
     </form> 
    </div><!-- search --> 

</div> 

的CSS:

.alignright {float: right} 

#header .social {margin-top: 50px;} 
#header .social a {display: inline-block;} 
#header .social .fb {width: 64px; height: 1px; padding-top: 60px; overflow: hidden;} 
#header .social .twit {width: 64px; height: 1px; padding-top: 60px; overflow: hidden;} 

#header .contact {margin: 20px 70px 20px 0; font-size: 14px; font-weight: bold;} 
#header .contact span {color: #FFFFFF;} 

#header .search {margin: 10px 0 0;} 

picture

+2

您可能會發現在格式化上下文這篇文章之間有明顯的div標籤有趣:HTTP:// tjkdesign。 com/articles/block-formatting-contexts_and_hasLayout.asp – jensgram 2010-10-11 14:03:17

+0

你似乎錯過了你在那裏使用的一些規則。 .alignright中的所有元素是否也浮動? – 2010-10-11 18:37:06

回答

59

我認爲這是一個摺疊的餘量。 只考慮第一個元素底部和第二個元素底部之間的最大邊距。

兩段之間沒有太多空間是很正常的,例如,

您無法避免使用兩個相鄰元素,因此您必須放大或縮小較大的邊距。

編輯:比照。 W3C

兩個邊距相鄰當且僅當:

  • 都屬於參與同一個塊格式化上下文
  • 沒有行框在流動塊級盒,無間隙,沒有填充和無邊框它們分開
  • 同屬垂直相鄰框緣

所以沒有崩潰與float它把元素流出。

+0

爲什麼發生?以及如何刪除? – 2010-10-11 13:49:46

+0

只需將您的保證金降低到您想要的水平即可。 – Kissaki 2010-10-11 13:50:59

+0

已編輯,只是放大或縮小更大的邊距或使用填充 – MatTheCat 2010-10-11 13:57:38

29

與填充(填充特定寬度)相反,邊距是「將其作爲最小距離」。

它不會把這個距離放到所有元素上。

正如你所看到的,取得聯繫塊的底部邊距被壓縮到輸入框。這是在這裏活躍的邊際。 另一個邊距輸入的上邊距不起作用,因爲它更小並且不會到達塊元素,實際上它會將元素推回。這兩個邊界重疊並且不相互影響。

+1

我覺得這是正確的答案,原來的問題在尋找什麼 – 2017-08-07 15:24:00

0

添加兩個對象

+2

不適合我。 – 2017-01-27 11:18:22