DEV Community

Cover image for 🎯 How to Center a Div: A Handy Guide with 25 Awesome Techniques! 😎
jcwieme
jcwieme

Posted on

🎯 How to Center a Div: A Handy Guide with 25 Awesome Techniques! 😎

Introduction

Hey there, fellow web developers! 😄 Are you tired of struggling to center a div on your webpage? Well, fret no more! In this article, we're going to dive into the exciting world of div centering using CSS. We'll explore a plethora of cool techniques that will make your life easier and your designs look stunning. So, let's get started and unlock the secrets of div centering! 🚀

  • Margin Auto Technique

The first technique in our arsenal is the classic margin: auto trick. Simply add the following CSS to your div:

.centered-div {
  margin: auto;
}
Enter fullscreen mode Exit fullscreen mode
  • Flexbox Magic

Next up, we have the powerful Flexbox layout. With just a few lines of code, you can center your div like a pro! Here's how:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  /* No additional styling needed */
}
Enter fullscreen mode Exit fullscreen mode
  • CSS Grid Awesomeness

Time to unleash the CSS Grid! Get ready for some grid-auto-flow magic:

.container {
  display: grid;
  height: 100vh; /* Adjust as needed */
  grid-auto-flow: column;
  justify-content: center;
}

.centered-div {
  /* No additional styling needed */
}
Enter fullscreen mode Exit fullscreen mode
  • The Positioning Wonder

Let's not forget the good old positioning technique. It works like a charm!

.container {
  position: relative;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
Enter fullscreen mode Exit fullscreen mode
  • Table-cell Trickery

Did you know you can use table-cell properties for centering? It's pretty neat!

.container {
  display: table;
  width: 100%;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  display: table-cell;
  text-align: center;
  vertical-align: middle;
}
Enter fullscreen mode Exit fullscreen mode
  • More Flexbox Goodness

Flexbox comes to the rescue again! Let those auto margins do the job:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  margin: auto;
}
Enter fullscreen mode Exit fullscreen mode
  • Position and Negative Margins

Ah, the classic position and negative margin combo. Works like a charm!

.container {
  position: relative;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  margin: -50% 0 0 -50%;
}
Enter fullscreen mode Exit fullscreen mode
  • Grid with justify-items and align-items

Time to embrace the power of CSS Grid and its justify-items and align-items properties:

.container {
  display: grid;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  justify-items: center;
  align-items: center;
}
Enter fullscreen mode Exit fullscreen mode
  • Flexbox and Absolute Positioning

Flexbox and absolute positioning make a great team! Let's combine them:

.container {
  position: relative;
  height: 100vh; /* Adjust as needed */
  display: flex;
  justify-content: center;
  align-items: center;
}

.centered-div {
  position: absolute;
}
Enter fullscreen mode Exit fullscreen mode
  • Grid with grid-template-areas

Get ready to rock with CSS Grid and its grid-template-areas property:

.container {
  display: grid;
  height: 100vh; /* Adjust as needed */
  grid-template-areas: "centered";
  place-items: center;
}

.centered-div {
  grid-area: centered;
}
Enter fullscreen mode Exit fullscreen mode
  • Flexbox with flex-direction

Let's change things up with the flex-direction property in Flexbox:

.container {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  /* No additional styling needed */
}
Enter fullscreen mode Exit fullscreen mode
  • Grid with justify-self and align-self

CSS Grid offers more control with justify-self and align-self:

.container {
  display: grid;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  justify-self: center;
  align-self: center;
}
Enter fullscreen mode Exit fullscreen mode
  • Flexbox with flex-grow

Flex-grow can be handy for centering a div within a flex container:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  flex-grow: 1;
}
Enter fullscreen mode Exit fullscreen mode
  • Grid with place-items

CSS Grid's place-items property is a convenient way to center content:

.container {
  display: grid;
  height: 100vh; /* Adjust as needed */
  place-items: center;
}

.centered-div {
  /* No additional styling needed */
}
Enter fullscreen mode Exit fullscreen mode
  • Positioning with calc()

Take advantage of calc() to center a div using positioning:

.container {
  position: relative;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  position: absolute;
  top: calc(50% - 50px);
  left: calc(50% - 50px);
  width: 100px;
  height: 100px;
}
Enter fullscreen mode Exit fullscreen mode
  • Flexbox with flex-flow

Flex-flow allows you to set both flex-direction and flex-wrap:

.container {
  display: flex;
  flex-flow: column wrap;
  justify-content: center;
  align-items: center;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  /* No additional styling needed */
}
Enter fullscreen mode Exit fullscreen mode
  • Grid with justify-content and align-content

CSS Grid's justify-content and align-content properties come in handy:

.container {
  display: grid;
  height: 100vh; /* Adjust as needed */
  justify-content: center;
  align-content: center;
}

.centered-div {
  /* No additional styling needed */
}
Enter fullscreen mode Exit fullscreen mode
  • Positioning with viewport units

Viewport units offer a responsive way to center a div with positioning:

.container {
  position: relative;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  position: absolute;
  top: 50vh;
  left: 50vw;
  transform: translate(-50%, -50%);
}
Enter fullscreen mode Exit fullscreen mode
  • Flexbox with flex-wrap

Flex-wrap enables wrapping of flex items for centered content:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh; /* Adjust as needed */
  flex-wrap: wrap;
}

.centered-div {
  /* No additional styling needed */
}
Enter fullscreen mode Exit fullscreen mode
  • Grid with auto margins

Auto margins can work wonders when used with CSS Grid:

.container {
  display: grid;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  margin: auto;
}
Enter fullscreen mode Exit fullscreen mode
  • Positioning with negative translate

Negative translate can center a div with positioning and transform:

.container {
  position: relative;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
Enter fullscreen mode Exit fullscreen mode
  • Grid with justify-self and align-self

Fine-tune your CSS Grid centering with justify-self and align-self:

.container {
  display: grid;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  justify-self: center;
  align-self: center;
}
Enter fullscreen mode Exit fullscreen mode
  • Flexbox with justify-content and align-content

Flexbox's justify-content and align-content properties save the day:

.container {
  display: flex;
  justify-content: center;
  align-content: center;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  /* No additional styling needed */
}
Enter fullscreen mode Exit fullscreen mode
  • Grid with place-self

CSS Grid's place-self property offers a concise way to center content:

.container {
  display: grid;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  place-self: center;
}
Enter fullscreen mode Exit fullscreen mode
  • Flexbox with order

Order can be used to position a div within a Flexbox container:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh; /* Adjust as needed */
}

.centered-div {
  order: 1;
}
Enter fullscreen mode Exit fullscreen mode

Conclusion

And there you have it, folks! We've explored a plethora of techniques for centering a div using CSS. From margin: auto to Flexbox and CSS Grid, these methods will surely come in handy for your web design adventures. Experiment with them, find your favorites, and let your creativity shine! Remember, the world of web development is full of possibilities, so keep on coding and keep on centering those divs like a pro! 🎉💪

Happy coding! 😊✨

Top comments (1)

Collapse
 
afif profile image
Temani Afif

Sorry to say that but many methods are redundant and not really useful.

"Flexbox with order" order is doing nothing here and cannot be used to center the element. The style applied to parent are the ones used to center the element

"Grid with justify-self and align-self" is the same as "Grid with place-self" since place-self is the shorthand of justify-self and align-self

"The Positioning Wonder" and "Positioning with negative translate" are the same

"Grid with grid-template-areas" areas has nothing to do with centering and you have only one element so the grid already contain one area by default

"Flexbox with flex-flow" flex-flow has nothing to do with centering especially when you are centering on both axis so it's not needed.

"Flexbox and Absolute Positioning" the use of positioning here is not needed and not safe. The element is already centered without position: absolute

"Position and Negative Margins": this one is simply wrong. Negative margin with percentage will never center your element because the percentage are relative to the parent element: jsfiddle.net/nbq3hfxs/

"Flexbox with flex-grow" this will not center the content as well: jsfiddle.net/b9u0jd12/

"Positioning with viewport units" this will only center the content is one particular case (when the parent element is full screen height/width with no scrollbar) otherwise it won't center the content.