对自动边距与绝对定位的混淆
Confusion about auto margins with absolute positioning
MDN suggests margin-left: auto
和 position: absolute
会将左边距设置为 0,但实际情况似乎并非如此。我现在想知道这是浏览器中的错误,还是 MDN 文档中的错误,因为我的示例似乎向右对齐。
fixed or absolute
0, except if both margin-left and margin-right are set to auto.
此示例将 margin-left
设置为 auto
且 margin-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.
MDN suggests margin-left: auto
和 position: absolute
会将左边距设置为 0,但实际情况似乎并非如此。我现在想知道这是浏览器中的错误,还是 MDN 文档中的错误,因为我的示例似乎向右对齐。
fixed or absolute
0, except if both margin-left and margin-right are set to auto.
此示例将 margin-left
设置为 auto
且 margin-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
ormargin-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
andmargin-right
to 0, and pick one of the following six rules that apply.