【问题标题】:Negative margin breaks float负边距打破浮动
【发布时间】:2016-05-22 12:15:33
【问题描述】:

当我在做某事时,我注意到一个非常奇怪的行为,我无法解释。这两种情况的唯一区别是第二个示例中的<i>s 将margin-top 设置为-10px 而不是-9px。我使用负边距以相同的数量将所有框移到顶部。

main, aside {
  width: 100%;
  padding: 20px 0 10px;
  margin-bottom: 10px;
  overflow: hidden;
  background: lightblue;
}

main i, aside i {
  float: left;
  display: block;
  width: 10px;
  height: 10px;
  margin: -9px 0 0 5px;
  background: orange;
}

aside i {
  margin-top: -10px;
}
<main>
  <i></i>
  <i></i>
  <i></i>
</main>
<aside>
  <i></i>
  <i></i>
  <i></i>
</aside>

只有上边距的微小变化,它们堆叠在一起而不是彼此相邻。我不明白是什么原因造成的。我使用基于 Gecko 和 WebKit 的浏览器确认了这种行为。

【问题讨论】:

    标签: html css css-float margin


    【解决方案1】:

    我将尝试对异常情况进行解释(或者更好地称为解释)。我不能确定我的解释是正确的,因为规范有很多规则,而且浏览器的实现可能不完全符合规范。

    第一个浮动框位于父级的最左侧并向上移动 10 像素(因为 -10 像素的边距)。当渲染搜索第二个框的位置时,它开始查看父级的高度 0 并从右向左移动直到遇到另一个浮点数,但它不会因为第一个浮点数完全移出父级,所以它一直到左边。如果发生这种情况,仍然遵守 9 条浮动定位规则(或多或少,这取决于开发人员如何解释某些事情)。

    还要考虑页边空白部分的免责声明:

    允许边距属性为负值,但可能存在 特定于实现的限制。

    您应该从中了解,使用负边距应该您自己承担风险

    我的建议是放弃负的上边距,因为它是,比如说,有问题,而是使用position: relative 进行一些移位(或者根本不移位)。 p>

    参考:
    https://www.w3.org/TR/CSS2/visuren.html#float-position https://www.w3.org/TR/CSS2/box.html#margin-properties

    【讨论】:

    • Floats 明确指出“外部高度为零或外部高度为负的浮点数不会缩短行框”。有点类似于多个浮点数发生的情况。
    • 谢谢,这很有意义。我将细化问题的标题和正文,明确说明 negative margin 以供将来参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 2012-05-09
    • 2014-03-07
    • 2014-10-03
    • 1970-01-01
    • 2011-08-10
    • 2014-01-26
    相关资源
    最近更新 更多