Center elements with CSS

28 January, 2021
4 min read

Centering things is something we do every day, so why not learn all the possible ways to do it?

Knowing how to center things with css is very necessary for our day to day as web developers. There are several ways to achieve the same, so it can get us confused. Today we are going to learn how to center things horizontally, vertically and both (horizontally and vertically) fully responsive.

We will work with two divs, one as a parent element and the other as a child.

index.html
<div class="parent">
  <div class="child"></div>
</div>

Horizontally

Center an element display: block; requires a fixed width, since it takes all the available width or, failing that, transform it to display: inline-block;

div center horizontally with margin or flexbox

Div center horizontally with margin or flexbox.

Method margin-auto: Giving it automatic margin from left to right, it automatically centers the element horizontally and is fully responsive.

.child {
  margin: 0 auto;
}

Using Flexbox: Flexbox is a more useful feature within css. We use it a lot for the layout. We can use justify-content in the parent element to achieve our goal. And it is also responsive. (Remember that by default flex-direction is row so all child elements will be placed in a horizontal row, if you want them to be placed vertically use flex-direction: column;)

.parent {
  display: flex;
  justify-content: center;
}

Vertically

Centering items vertically is confusing, so let's see how to get it right.

div center vertically with flexbox

Div center vertically with flexbox.

Using Flexbox(again): Now instead of using justify-content we will use align-items.

.parent {
  display: flex;
  align-items: center;
}

Both(horizontally and vertically)

Centering elements both horizontally and vertically is very satisfying. We almost always have a situation where we want to center things so let's see 2 ways to do it.

div center vertically and horizontally with flexbox or grid

Div center horizontally and vertically with flexbox or grid.

With Flexbox(yes again): As we've seen, flexbox helps us to center things both horizontally and vertically, so what if we put justify-content and align-items together?

.parent {
  display: flex;
  justify-content: center;
  align-items: center;
}

Using Grid: This is the last method of the post and the fastest. It is my favorite, we can center the elements with only 2 lines of code!

.parent {
  display: grid;
  place-items: center;
}

Conclusion

There are many ways to achieve the same, such as using position, playing with padding and margin. Although it generally depends on the situation which method we will use. I recommend learning Flexbox and Grid as it helps us in various ways, reducing our lines of code. Share this post to whoever you think will help.