微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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%;对身体的作品确实。

jsFiddle Demo

原文地址:https://www.jb51.cc/css/219416.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。