【发布时间】:2013-04-14 19:52:11
【问题描述】:
我想要一种可重用的方法来将绝对定位的固定宽度元素在其容器中水平居中,并且我想要可重用的代码(例如,没有负像素边距)。
我偶然发现了一个完美的组合:
http://jsfiddle.net/aaronadams/Mquha/
<div class="outer center">
<div class="inner center"></div>
</div>
.outer {
position: absolute;
width: 400px; height: 400px;
background: #999;
}
.inner {
position: absolute;
width: 200px; height: 400px;
background: #666;
}
.center {
left: 0; right: 0;
margin-left: auto; margin-right: auto;
}
它很干净,它(相对)容易理解,它似乎可以在 IE 8+、Chrome、Firefox、Safari 中运行……但它也似乎是一个巨大的、肮脏的、不好的定位黑客,可能会崩溃随时在接缝处。
我找不到任何文档来说明这种定位行为是正确还是不正确。它是哪一个?适合生产,还是完全不可靠?
【问题讨论】:
-
天哪!它也适用于垂直居中!! o_O
-
看起来不错,只要您不是在寻找 流畅的布局。
-
我看不出这与使用相对定位 + 负边距有什么不同(除了这看起来像更多代码的事实)。无论哪种方式,您都必须知道元素的大小。由于您已经知道它的大小,将其除以 2 似乎不是问题。
-
@cimmanon 在此方法中,边距由渲染引擎自动计算。这比手动计算更可靠,因为手动计算会引入更多可能出错的地方。
-
@laconbass 嗯,你是对的! jsfiddle.net/aaronadams/rkD7h 多亏了 Marc Audet 在下面的回答,我实际上知道在哪里寻找文档,而且果然,这也是一个记录在案的行为:w3.org/TR/CSS2/visudet.html#abs-non-replaced-height 很棒的发现。
标签: css positioning css-position centering