Why Margin:auto Alone Won't Center Positioned Elements
When attempting to center a div element within a parent container using the position: absolute or position: fixed properties, using margin: auto alone may not be sufficient.
Understanding the CSS Specification
According to the CSS specifications, for elements with position: relative or position: static (normal flow), setting both margin-left and margin-right to auto horizontally centers the element relative to its containing block, as their used values become equal. However, this does not apply to elements with position: absolute or position: fixed.
For absolutely or fixed positioned elements, where all three of left, width, and right are auto, the used values of margin-left and margin-right are set to 0 to prevent centring. To center such elements, one must define values for left, right, or width.
The Effect of Setting left, right, and width
If left, right, and width are all defined, the margins get equal values, resulting in centring. Omitting any of these values will cause the element to deviate from center alignment.
Demonstration with Different Cases
The following table demonstrates the various cases, as described in the CSS specification:
Margin Setting | Centring |
---|---|
margin-left: auto; margin-right: auto | Yes (flow element) |
margin-left: auto; margin-right: auto | No (absolute/fixed element) |
left: auto; right: auto; width: auto | No (margin set to 0) |
left: 0; right: 0; width: auto | No (margin set to 0) |
right: auto; left: auto; | No (margin set to 0) |
left: auto; right: auto; width: 200px | Yes (equal margins) |
left: 0; width: auto | Yes (equal margins) |
right: 0; width: auto | Yes (equal margins) |
The above is the detailed content of Why Doesn't `margin: auto` Center Absolutely or Fixed Positioned Elements?. For more information, please follow other related articles on the PHP Chinese website!