css绝对位置不能使用margin-left:auto margin-right:auto

假设您将以下css应用于div标记

.divtagABS { position: absolute; margin-left: auto; margin-right:auto; } 

保证金余额和保证金的权利不生效

但如果你有亲戚,它可以正常工作,即

 ,divtagREL { position: relative; margin-left: auto; margin-right:auto; } 

这是为什么? 我只是想中心一个元素

有人可以解释为什么设置页边距在绝对位置自动运行不起作用?

编辑:这个答案用于声称,它是不可能的中心一个绝对定位的元素与margin: auto; ,但这根本不是事实。 因为这是最受赞赏和接受的答案,所以我猜想我只是改变它是正确的。

将以下CSS应用于元素时

 position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; 

然后给这个元素一个固定的宽度和高度,比如200px或者40%,这个元素居中。

这是一个演示效果的小提琴 。

我已经使用这个技巧来定位一个绝对定位的元素 。 虽然,你必须知道元素的宽度。

 .divtagABS { width: 100px; position: absolute; left: 50%; margin-left: -50px; } 

基本上,你使用左边:50%,然后退出它的宽度的一半,具有负边界。

如果绝对元素有宽度,可以使用下面的代码

 .divtagABS{ width:300px; positon:absolute; left:0; right:0; margin:0 auto; } 

在下面的工作JSFiddle。 当使用绝对位置时, margin: 0 auto不起作用,但是你可以这样做(也可以缩放):

left: 50%; transform: translateX(-50%);

更新:使用 JSFiddle

我已经有了这个相同的问题,我已经有解决scheme写一个容器(.divtagABS容器,在你的情况)绝对定位,然后相对定位内容(.divtagABS,在你的情况)。

完成! 现在你的.divtagABS的margin-left和margin-right AUTO会生效。

正式的第一个正确的答案是来自chipcullen :

 .divtagABS { width: 100px; position: absolute; left: 50%; margin-left: -50px; } 

其他答案主要涉及“黑客”式的答案。 使用这个方法总是会带来比官方解决scheme(基于W3C CSS规范)更大的风险。 黑客看起来像这样。

第二个正确的答案是由几个人。 但请注意值“auto”和“-50px”之间的差异。 这是你应该根据你的select。 但是这个答案是这样的:

 .divtagABS{ width:300px; positon:absolute; left:0; right:0; margin:0 auto; } 

要理解这是一个破解这个解决scheme,请考虑W3C规范中left属性的摘录:

对于绝对定位的元素

此属性指定元素的左边缘与其包含块的左边缘之间的距离。

对于相对定位的元素

此属性指定偏移量是相对于框本身的左边缘。

所以会发生什么是一个绝对定位的元素将被绘制(包括边距)从左边0px /顶部0px。 该元素具有固定的宽度,因此对边距属性使用auto将select所有可用宽度并将其转换为空白。 在两边进行这一操作,通过将两个对立面之间的所有可用宽度(左/右,顶部/底部)分开来使元素居中。

我个人喜欢第一个更好,但这是我个人的想法。

如果元素的位置是绝对的,那么它就不是相对的,或者是指任何对象 – 包括页面本身。 所以margin: auto; 不能决定中间在哪里。

它的等待被明确地告诉,使用lefttop在哪里定位自己。

你仍然可以用编程的方式来集中它,使用JavaScript或其他。

当你为absolute定位的分割定义样式时,他们指定的边距是没有用的。 因为它们不再位于常规的DOM树内。

你可以使用float来完成这个技巧。

 .divtagABS { float: left; margin-left: auto; margin-right:auto; }