请看我的代码,我不明白为什么这些div的边距重叠。
<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;}
答案 0 :(得分:75)
我认为这是一个崩溃的边缘。 只考虑第一个元素底部和第二个元素顶部之间的最大边距。
两段之间没有太多空间是很正常的,例如。
您无法避免使用两个相邻元素,因此您必须放大或缩小较大的边距。
编辑:cf。 W3C
当且仅当:
时,两个边距相邻
- 都属于参与相同块格式化上下文的流内块级框
- 没有行框,没有间隙,没有填充,没有边框将它们分开
- 都属于垂直相邻的盒子边缘
因此,float
没有崩溃,导致元素流出。
答案 1 :(得分:43)
边距与填充(填充特定宽度)相反,是“将此作为最小距离”。
它不会将该距离放在所有元素上。
正如您所看到的,取消联系块底部边距被输入到输入框。这是在这里活跃的保证金。 另一个边距,输入的上边距不起作用,因为它较小并且没有达到实际推回元素的块元素。 2个边距重叠,不会相互影响。
答案 2 :(得分:0)
在两个对象之间添加一个明确的div标签
答案 3 :(得分:0)
如果你不能使用填充并且真的需要边距不重叠,这里有一个技巧:
.btn {
/* hack for a 2px margin */
border-top: 2px #fff solid !important;
/* this is important if you have a background-color
and don't want to see it underneath the transparent border*/
background-clip: padding-box;
}
请为演示启动此代码段:
div {
margin: 10px;
background: rgb(48, 158, 140);
padding: 5px 15px;
font-weight: bold;
color: #fff;
}
.fake-margin {
border-top: 10px solid transparent;
background-clip: padding-box;
}
<div>Margin applied is 10px on each sides</div>
<div>the first two have only 10px between them</div>
<div class="fake-margin">the last two have 10 + 10px</div>
<div class="fake-margin">= 20 px</div>
答案 4 :(得分:0)
当心父元素上的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;
}
<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>