html – 为什么“position:absolute”左:0;权利:0; width:XYpx;边距:0自动“实际中心?

前端之家收集整理的这篇文章主要介绍了html – 为什么“position:absolute”左:0;权利:0; width:XYpx;边距:0自动“实际中心?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在CSS方面我很精通,但今天我偶然发现了一个让我头疼的片段( herehere).

我从来没有想过可以通过margin来定位一个绝对定位的元素:0 auto,但是给定的元素有一个设置的宽度,左边是0和right:0,它实际上似乎工作:

#parent
{
    background: #999;
    height: 300px;
    position: relative;
    width: 300px;
}

#child
{
    background: #333;
    height: 50px;
    left: 0;
    margin: 0 auto;
    position: absolute;
    right: 0;
    width: 50px;
}
<div id="parent">
    <div id="child"></div>
</div>

(JSFiddle)

我一直以为左:0和右:0将决定元素的宽度(它的第一个相对定位的父元素的100%),但是它似乎宽度优先于此,因此使margin = 0自动工作.

这是定义的行为吗?我可以在任何规格中找到相关内容吗?我在谷歌搜索了一下,但没有任何有用的东西.

解决方法

这在CSS2.1规范的 section 10.3.7中占了一席之地:

The constraint that determines the used values for these elements is:

‘left’ + ‘margin-left’ + ‘border-left-width’ + ‘padding-left’ + ‘width’ + ‘padding-right’ + ‘border-right-width’ + ‘margin-right’ + ‘right’ = width of containing block


如果三者都不是“自动”:如果“margin-left”和“margin-right”均为“auto”,则在额外的约束下解决方程,即两个边距获得相等的值[…]

正如你所看到的那样,两边的自动边距对于绝对定位的元素,对于未定位的块级元素,行为相同,前提是左和右偏移量以及宽度不是自动的.

有趣的是,仅针对绝对定位的元素this applies to top,height and bottom as well,这基本上意味着可以使用自动边距垂直居中一个绝对定位的元素.再次提到,上述三个属性不是自动的,并且相应的边距是自动的. (在你的情况下,这意味着margin:auto而不是margin:0 auto,因为后面的值为零).

猜你在找的HTML相关文章