2010-10-11 697 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