关于html:css绝对位置不适用于margin-left:auto margin-right:auto

css absolute position won't work with margin-left:auto margin-right: auto

假设您将以下CSS应用于div标签

1
2
3
4
5
.divtagABS {
    position: absolute;
    margin-left: auto;  
    margin-right:auto;
 }

左边距和右边距无效

但是如果你有亲戚,那很好

1
2
3
4
5
,divtagREL {
position: relative;
margin-left: auto;  
 margin-right:auto;
}

这是为什么? 我只想将元素居中

有人可以解释为什么将边距设置为绝对位置自动不起作用吗?


编辑:这个答案曾经声称不可能用margin: auto;将绝对定位的元素居中,但这根本不是事实。因为这是最受好评和接受的答案,所以我想我只是将其更改为正确的答案。

当您将以下CSS应用于元素时

1
2
3
4
5
6
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;

然后为元素提供固定的宽度和高度,例如200px或40%,元素将自动居中。

这是演示效果的小提琴。


我已使用此技巧将绝对定位的元素居中。但是,您必须知道元素的宽度。

1
2
3
4
5
6
.divtagABS {
    width: 100px;
    position: absolute;
    left: 50%;
    margin-left: -50px;
  }

基本上,您使用left:50%,然后以负宽度将其退回一半宽度。


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

1
2
3
4
5
6
7
.divtagABS{
    width:300px;
    positon:absolute;
    left:0;
    right:0;
    margin:0 auto;
}


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

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

更新:工作中的JSFiddle


我已经遇到了同样的问题,并且已经有了解决方案,可以完全定位容器(在您的情况下为.divtagABS容器),然后将内容相对放置在其中(在您的情况下为.divtagABS)。

做完了!现在,您的.divtagABS的左边距和右边距AUTO都可以使用。


所有答案都只是建议的解决方案或解决方法。但是仍然没有得到以下问题的答案:为什么margin:auto与position:relative一起使用但对position:absolute却不起作用。

以下说明对我有帮助:

"对于绝对定位的元素,页边距几乎没有意义,因为此类元素已从正常流程中删除,因此它们无法推开页面上的任何其他元素。使用这样的页边距只能影响应用了页边距的元素的位置,没有其他元素。"
http://www.justskins.com/forums/css-margins-and-absolute-82168.html


如果元素是绝对位置,则它不是相对的,也不是相对于任何对象的引用-包括页面本身。因此margin: auto;无法确定中间位置。

使用lefttop将其放置在何处可以明确地告知它。

您仍然可以使用javascript或类似工具以编程方式将其居中。


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

您可以使用float来完成技巧。

1
2
3
4
5
.divtagABS {
    float: left;
    margin-left: auto;  
    margin-right:auto;
 }