由于margin-right: auto
和margin-left: auto
将元素水平居中,我希望它们的垂直对应部分也能以相同的方式工作。
然而,我知道这并没有发生,根据CSS规范:
10.6.2内联替换元件、正常流程中的块级替换元件、常规流程中的"内联块"替换元件和浮动替换元件
如果"margin-top"或"margin-bottom"为"auto",则使用的值为0。
也适用于区块元素:
10.6.3当"溢流"计算为"可见"时,正常流量中的块级未更换元件
当"溢出"未计算为"可见"但已传播到视口时,本节也适用于正常流中的块级未替换元素。
如果"margin-top"或"margin-bottom"为"auto",则使用的值为0。
现在我想知道的是,这个决定/行为背后的理由。
我所寻求的是理解和信念。我不认为一个含糊的解释就能做到,但任何贡献都是受欢迎的。
如上所述:
啊哈。。。这不是那么晦涩!我看得出来它很有用。谢谢你在jsfiddle上举的例子。
因此,如果一个元素相对于父元素是绝对定位的,同时使用
top
和bottom
,但它的height
是定义的,并且小于父元素的高度减去top
和bottom
偏移,那么margin
属性将用于确定它相对于父元素的垂直对齐,而margin:auto
将产生垂直居中的元素。的确,这听起来很复杂,但在jsfiddle上却很清楚。
例如,这个CSS:
.inner {
position:absolute;
top:0; bottom: 20px; left:0; right:0px;
padding:0; border:0;
margin:auto;
height:20px; width:50px;
}
和这个HTML:
<div class=外部><div class=内部>文本<div><div>