Fading Coder

One Final Commit for the Last Sprint

Home > Notes > Content

Achieving Horizontal and Vertical Centering in CSS

Notes 1

Why margin: auto Fails Vertically

Applying margin: auto to a block-level element distributes the remaining available space equally on both sides. While this works horizontally because block elements consume the full width of their container, vertical remaining space does not exist by default. Thus, margin: auto centers horizontally but fails vertically.

css .outer-box { width: 400px; height: 250px; background-color: #f0a0a0; }

.inner-box { width: 120px; height: 80px; margin: auto; background-color: #a0f0a0; }

Absolute Positioning with Inset and Auto Margins

By combining position: absolute with inset: 0 (or top: 0; right: 0; bottom: 0; left: 0;), the browser is forced to calculate available space in all directions. Setting margin: auto then distributes this space equally. This method requires the child element to have defined dimensions; otherwise, it will stretch to fill the parent.

css .outer-box { position: relative; width: 400px; height: 250px; background-color: #f0a0a0; }

.inner-box { position: absolute; inset: 0; margin: auto; width: 120px; height: 80px; background-color: #a0f0a0; }

Absolute Positioning with 50% Offset and Transform

Setting top: 50% and left: 50% moves the top-left corner of the child to the center of the parent. Applying transform: translate(-50%, -50%) shifts the element back by half of its own dimensions. This approach supports dynamic, unknown child dimensions.

Caveat regarding percentage margins: Do not substitute top and left with margin-top: 50% and margin-left: 50%. In CSS, percentage-based margins (both vertical and horizontal) are always calculated relative to the width of the containing block, not the height. Using margins for vertical centering will result in misalignment unless the parent is a perfect square.

css .outer-box { position: relative; width: 400px; height: 250px; background-color: #f0a0a0; }

.inner-box { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #a0f0a0; }

Absolute Positioning with Negative Margins

Similar to the transform method, this technique positions the child's top-left corner at the parent's center. Instead of using transform, it applies negative margins equal to exactly half the child's width and height. This requires the child dimensions to be strictly known.

css .outer-box { position: relative; width: 400px; height: 250px; background-color: #f0a0a0; }

.inner-box { position: absolute; top: 50%; left: 50%; width: 120px; height: 80px; margin-top: -40px; margin-left: -60px; background-color: #a0f0a0; }

Flexbox Centering

Flexbox provides the most straightforward method for centering, regardelss of whether the child dimensions are known. The parent container uses display: flex, along with main and cross-axis alignment properties.

css .outer-box { display: flex; justify-content: center; align-items: center; width: 400px; height: 250px; background-color: #f0a0a0; }

.inner-box { background-color: #a0f0a0; }

CSS Grid Centering

CSS Grid allows centering with minimal code using the place-items shorthand, which applies to both block and inline axes.

css .outer-box { display: grid; place-items: center; width: 400px; height: 250px; background-color: #f0a0a0; }

.inner-box { background-color: #a0f0a0; }

Table-Cell Centering

For legacy browser support, the parent can be rendered as a table cell. This enables vertical-align: middle and text-align: center, while the child must be set to inline-block to respect the text alignment.

css .outer-box { display: table-cell; vertical-align: middle; text-align: center; width: 400px; height: 250px; background-color: #f0a0a0; }

.inner-box { display: inline-block; background-color: #a0f0a0; }

Related Articles

Designing Alertmanager Templates for Prometheus Notifications

How to craft Alertmanager templates to format alert messages, improving clarity and presentation. Alertmanager uses Go’s text/template engine with additional helper functions. Alerting rules referenc...

Deploying a Maven Web Application to Tomcat 9 Using the Tomcat Manager

Tomcat 9 does not provide a dedicated Maven plugin. The Tomcat Manager interface, however, is backward-compatible, so the Tomcat 7 Maven Plugin can be used to deploy to Tomcat 9. This guide shows two...

Skipping Errors in MySQL Asynchronous Replication

When a replica halts because the SQL thread encounters an error, you can resume replication by skipping the problematic event(s). Two common approaches are available. Methods to Skip Errors 1) Skip a...

Leave a Comment

Anonymous

◎Feel free to join the discussion and share your thoughts.