对自动边距与绝对定位的混淆

Confusion about auto margins with absolute positioning

MDN suggests margin-left: autoposition: absolute 会将左边距设置为 0,但实际情况似乎并非如此。我现在想知道这是浏览器中的错误,还是 MDN 文档中的错误,因为我的示例似乎向右对齐。

fixed or absolute
0, except if both margin-left and margin-right are set to auto.

此示例将 margin-left 设置为 automargin-right 未指定(即初始值为 0),左边距似乎是根据剩余的 space 而不是上面来源建议的 0:https://jsfiddle.net/40txneL7

我还发现 a snippet in the spec 表明剩余的 space 被划分为 auto 个边距,如果只设置了一个轴边距则不会设置为 0。

这里的 MDN 文档不正确,还是我遗漏了什么?

你的绝对定位元素的当前位置不是你假设的 margin-left: auto 而是 right: 0 因为它覆盖了 left: 0 属性.

只需删除 right: 0,您将看到您的元素位于左侧,忽略了 margin-property。

关于绝对位置的宽度和位置有很多规则,您可以在这里阅读:https://www.w3.org/TR/css-position-3/#abs-non-replaced-width

The constraint that determines the used values for these elements is:

left + margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right + right = width of containing block

我们没有填充,以下规则适用:

If none of the three is auto: ... If one of margin-left or margin-right is auto, solve the equation for that value. If the values are over-constrained, ignore the value for left

所以你将拥有

0px(left) + margin-left + 200px(width) + 0px(margin-right not specfied) + 0px(right) = width of containing block

你的例子中的包含块是视口,所以我们有 100% 的屏幕宽度。如果我们解方程你会得到

margin-left = viewport width - 200px

所以不等于0。您可以通过检查开发工具来验证这一点

我们将其他情况的保证金设置为0。如果您继续阅读规范,您会发现:

Otherwise, set auto values for margin-left and margin-right to 0, and pick one of the following six rules that apply.