好的,请耐心等待……这整件事与视觉格式化模型有关,特别是与计算宽度和边距的方式有关。
有几件事需要考虑,比如display
和position
(都可以在 CSS 规范的第 10.3 节中看到)。
特别是对于您的情况,我们正在谈论绝对定位的非替换元素(因为它不是图像或任何具有固有大小的东西),所以它是第10.3.7 节绝对定位的非替换元素。
根据你的 CSS,你有一个定义的宽度,所以 not auto
,你的左右边距都是auto
. 所以它归结为左/右值是什么:
如果定义了 left/right ,而不是 auto,则适用以下规则:
如果 'margin-left' 和 'margin-right' 都是 'auto',请在两个边距获得相等值的额外约束下求解方程 (...)
如果 left/right 没有定义,所以它们默认为auto,以下规则适用:
第一的:
将 'margin-left' 和 'margin-right' 的 'auto' 值设置为 0 (...)
第二:
如果建立包含静态位置的块的元素的“direction”属性是“ltr”,则将“left”设置为静态位置,否则将“right”设置为静态位置。然后求解'left'(如果'direction'是'rtl')或'right'(如果'direction'是'ltr')。
所以你可以看到,如果你没有为左/右定义一个特定的值,你的边距实际上会变成0
你最终将 div 放在容器的左边或右边,具体取决于direction
属性的值(你可以通过在你的css上放置类似的东西来测试这个,html { direction:rtl; }
当左/右是自动时,div应该向右而不是向左)
但是,如果您确实指定了值,在您的情况下为 0,则“两个边距获得相等的值”有效地使元素居中。
希望能帮助到你!