CSS:在浮动元素时清理边缘崩溃问题的解决方案

前端之家收集整理的这篇文章主要介绍了CSS:在浮动元素时清理边缘崩溃问题的解决方案前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
示例HTML CSS:
<html>
  <body style="padding: 0; margin: 0;">
    <div style="float: right;">first</div>
    <div style="margin-top: 2em;">second</div>
  </body>
</html>

期望的行为:第一个div浮动到窗口的右上角。实际行为:它浮动2em低于期望的位置。原因:margin collapsing

尽管确定问题,我可以想出的解决方案感觉像黑客:

>改变身体风格到边距:-1px 0 0 0; border-top:1px solid;
> insert< div style =“height:1px; margin-bottom:-1px;”>< / div>之前
>插入上述< div>在第一和第二之间

有没有一个干净,惯用的方式来避免这个问题?

解决方法

添加overflow:hidden;对身体应该解决你的问题。它定义了一个新的块格式化环境,如本文所述: The magic of overflow: hidden

jsFiddle Demo(body标签由jsFiddle自动添加,这就是为什么我没有将它包含在HTML标记中)

UPDATE(thx to @clairesuzy):如果body有padding,则此解决方案不起作用:0。直到找到一个更好的方法,我只能建议在两个div之间添加一个包装(至少我现在应该是@ Marcel的下注: )),我认为比OP的解决方案更干净。我通常会在浮动的东西旁边添加一个包装(大部分时间更容易处理旧的浏览器),大多数时候它不需要被故意添加,因为它在逻辑上和语义上都是需要的。

所以现在我可以想出这个:

<body style="padding: 0; margin: 0;">
   <div id="container" style="overflow: hidden;">
       <div style="float: right;">first</div>
       <div style="margin-top: 2em;">second</div>
   </div>
</body>

jsFiddle Demo

更新2:经过思考,阅读评论后,我真的认为在容器上的溢出:隐藏(或溢出:可见的东西)是正确的解决方案。唯一的例外,它不适用于我是将其设置在身体元素,这是一个非常罕见的情况。在这些罕见的情况下,您可以尝试使用position:absolute;顶部:0;权利:0;而不是浮动。

另一种可能的解决方法:我还发现设置显示:inline-block;宽度:100%;对身体的作品确实。

@L_404_4@

猜你在找的CSS相关文章