CSS边距重叠问题

Ati*_*din 76 html css margins

请看我的代码,我不明白为什么这些div的边距重叠.

.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;}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

图片

Mat*_*Cat 78

我认为这是一个崩溃的边缘.仅考虑第一个元素的底部和第二个元素的顶部之间的最大边距.

在两段之间没有太多空间是很正常的,例如.

您无法避免使用两个相邻元素,因此您必须放大或缩小较大的边距.

编辑:比照 W3C

当且仅当以下情况时,两个边距相邻:

  • 两者都属于参与相同块格式化上下文的流内块级框
  • 没有线框,没有间隙,没有填充,没有边框将它们分开
  • 两者都属于垂直相邻的盒子边缘

因此没有崩溃float将元素从流中带走.

  • 我会警惕使用`float`作为黑客,因为它可能有一些令人讨厌的副作用.我担心使用`float`作为规则. (10认同)
  • 刚刚发现,如果浮动元素,则应用两者的边距. (8认同)

Kis*_*aki 44

与填充(填充特定宽度)相反的边距是"将其作为最小距离".

它不会将距离放在所有元素上.

正如您所看到的,触摸块底部边距是输入框.这是在这里活跃的保证金.另一个边距,输入的上边距不起作用,因为它较小并且没有到达实际推回元素的块元素.2个边距重叠,不会相互影响.


squ*_*ndy 7

注意display: flex父元素。

.flex {
  display: flex;
  flex-direction: column;
}

.block {
  display: block;
}


/* css for example only */
div {
  padding: 1em;
  background: #eee;
}
p {
  font-size: 20px;
  margin: 1em 0;
  background: pink;
  padding: 5px;
}
p:first-child {
  margin-top: 0;
}
Run Code Online (Sandbox Code Playgroud)
<h1>display: flex</h1>
<div class="flex">
  <p>Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Curabitur blandit tempus porttitor.</p>
  <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
  <p>Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Curabitur blandit tempus porttitor.</p>
  <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
</div>
<h1>display: block</h1>
<div class="block">
  <p>Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Curabitur blandit tempus porttitor.</p>
  <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
  <p>Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Curabitur blandit tempus porttitor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.</p>
  <p>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
</div>
Run Code Online (Sandbox Code Playgroud)