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;
不能决定中间在哪里。
它的等待被明确地告诉,使用left
和top
在哪里定位自己。
你仍然可以用编程的方式来集中它,使用JavaScript或其他。
当你为absolute
定位的分割定义样式时,他们指定的边距是没有用的。 因为它们不再位于常规的DOM树内。
你可以使用float来完成这个技巧。
.divtagABS { float: left; margin-left: auto; margin-right:auto; }