How can I vertically center a div element for all browsers using CSS? – Dev

The best answers to the question “How can I vertically center a div element for all browsers using CSS?” in the category Dev.


I want to center a div vertically with CSS. I don’t want tables or JavaScript, but only pure CSS. I found some solutions, but all of them are missing Internet Explorer 6 support.

    <div>Div to be aligned vertically</div>

How can I center a div vertically in all major browsers, including Internet Explorer 6?


One more I can’t see on the list:

.Center-Container {
  position: relative;
  height: 100%;

.Absolute-Center {
  width: 50%;
  height: 50%;
  overflow: auto;
  margin: auto;
  position: absolute;
  top: 0; left: 0; bottom: 0; right: 0;
  border: solid black;
  • Cross-browser (including Internet Explorer 8 – Internet Explorer 10 without hacks!)
  • Responsive with percentages and min-/max-
  • Centered regardless of padding (without box-sizing!)
  • height must be declared (see Variable Height)
  • Recommended setting overflow: auto to prevent content spillover (see Overflow)

Source: Absolute Horizontal And Vertical Centering In CSS


Below is the best all-around solution I could build to vertically and horizontally center a fixed-width, flexible height content box. It was tested and worked for recent versions of Firefox, Opera, Chrome, and Safari.

.outer {
  display: table;
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;

.middle {
  display: table-cell;
  vertical-align: middle;

.inner {
  margin-left: auto;
  margin-right: auto;
  width: 400px;
  /* Whatever width you want */
<div class="outer">
  <div class="middle">
    <div class="inner">
      <h1>The Content</h1>
      <p>Once upon a midnight dreary...</p>

View A Working Example With Dynamic Content

I built in some dynamic content to test the flexibility and would love to know if anyone sees any problems with it. It should work well for centered overlays also — lightbox, pop-up, etc.


Now the Flexbox solution is a very easy way for modern browsers, so I recommend this for you:

.container {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  background: green;

html {
  height: 100%;
<div class="container">
  <div>Div to be aligned vertically</div>


The simplest way would be the following three lines of CSS:

1) position: relative;

2) top: 50%;

3) transform: translateY(-50%);

Following is an example:

div.outer-div {
  height: 170px;
  width: 300px;
  background-color: lightgray;

div.middle-div {
  position: relative;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
<div class="outer-div">
  <div class="middle-div">
    Test text