Css 为什么不';t页边距顶部:自动和页边距底部:自动与左侧和右侧的对应页边距工作相同?

Css 为什么不';t页边距顶部:自动和页边距底部:自动与左侧和右侧的对应页边距工作相同?,css,Css,如果我这样设置div的CSS margin属性: div { margin-left: auto; margin-right: auto; } 我得到一个div,它在页面中水平居中 但是,如果我将CSS更改为: div { margin-top: auto; margin-bottom: auto; } 我的div没有垂直居中。我不需要知道解决方法(),但我想知道这种行为的原因。为什么顶部保证金和底部保证金的作用不一样?我遗漏了什么?简单的回答是规范上这么说的 10.6.2内联替换元件、正常

如果我这样设置div的CSS margin属性:

div { margin-left: auto; margin-right: auto; }
我得到一个div,它在页面中水平居中

但是,如果我将CSS更改为:

div { margin-top: auto; margin-bottom: auto; }

我的div没有垂直居中。我不需要知道解决方法(),但我想知道这种行为的原因。为什么顶部保证金和底部保证金的作用不一样?我遗漏了什么?

简单的回答是规范上这么说的

10.6.2内联替换元件、正常流量下的块级替换元件、正常流量下的“内联块”替换元件和浮动替换元件 如果“页边距顶部”或“页边距底部”为“自动”,则其使用值为0


假设我们讨论的是Flexbox中的自动利润率

margin left
margin right
设置为
auto
将使项目居中的原因是,默认情况下,宽度为块元素可用容器的100%

另一方面,高度试图尽可能少地填充空间,因此
页边距顶部
页边距底部
作为
自动
将默认为0。但是,如果元素位于具有固定高度的元素内,则
页边距顶部
页边距底部
将能够基于该高度计算中心


例如,

填充对顶部/底部的作用是否相同?@sam:任何一侧的
padding:auto
使用的值始终为零。对于2017年或以后阅读此文章的人,现在的答案似乎是:它们是一样的,但只有在使用flexbox的情况下。如果父元素具有
display:flex然后
边距:自动将使其水平和垂直居中。