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

HtmlCssAlignmentVertical AlignmentCentering

Html Problem Overview


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.

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

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

Html Solutions


Solution 1 - Html

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>
    </div>
  </div>
</div>

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.

Solution 2 - Html

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
  </div>
</div>

Solution 3 - Html

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

Solution 4 - Html

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;
}

body,
html {
  height: 100%;
}

<div class="container">
  <div>Div to be aligned vertically</div>
</div>

Solution 5 - Html

Actually, you need two div's for vertical centering. The div containing the content must have a width and height.

#container {
  position: absolute;
  top: 50%;
  margin-top: -200px;
  /* Half of #content height */
  left: 0;
  width: 100%;
}

#content {
  width: 624px;
  margin-left: auto;
  margin-right: auto;
  height: 395px;
  border: 1px solid #000000;
}

<div id="container">
  <div id="content">
    <h1>Centered div</h1>
  </div>
</div>

Here is the result.

Solution 6 - Html

Edit 2020: only use this if you need to support old browsers like Internet Explorer 8 (which you should refuse to do ). If not, use Flexbox.


This is the simplest method I found and I use it all the time (jsFiddle demo here).

Thank Chris Coyier from CSS Tricks for this article.

<div class="v-wrap">
    <article class="v-box">
        <p>This is how I've been doing it for some time</p>
    </article>
</div>

html, body{
  height: 100%;
  margin: 0;
}
.v-wrap{
    height: 100%;
    white-space: nowrap;
    text-align: center;
}
.v-wrap:before{
    content: "";
    display: inline-block;
    vertical-align: middle;
    width: 0;
    /* adjust for white space between pseudo element and next sibling */
    margin-right: -.25em;
    /* stretch line height */
    height: 100%;
}
.v-box{
    display: inline-block;
    vertical-align: middle;
    white-space: normal;
}

Support starts with Internet Explorer 8.

Solution 7 - Html

After a lot of research I finally found the ultimate solution. It works even for floated elements. View Source

.element {
    position: relative;
    top: 50%;
    transform: translateY(-50%); /* or try 50% */
}

Solution 8 - Html

Use the CSS Flexbox align-items property to achieve this.

html, body {
    height: 100%;
}

body {
  display: flex;
  align-items: center;
}

<div>This is centered vertically</div>

Solution 9 - Html

To center the div on a page, check the fiddle link.

Div to be aligned vertically

#vh { margin: auto; position: absolute; top: 0; left: 0; bottom: 0; right: 0; } .box{ border-radius: 15px; box-shadow: 0 0 8px rgba(0, 0, 0, 0.4); padding: 25px; width: 100px; height: 100px; background: white; }

Another option is to use flex box, check the fiddle link.

<div class="vh">
    <div>Div to be aligned vertically</div>
</div>

.vh { background-color: #ddd; height: 400px; align-items: center; display: flex; } .vh > div { width: 100%; text-align: center; vertical-align: middle; }

Another option is to use a CSS 3 transform:

Div to be aligned vertically

#vh { position: absolute; top: 50%; left: 50%; /transform: translateX(-50%) translateY(-50%);/ transform: translate(-50%, -50%); } .box{ border-radius: 15px; box-shadow: 0 0 8px rgba(0, 0, 0, 0.4); padding: 25px; width: 100px; height: 100px; background: white; }

Solution 10 - Html

The easiest solution is below:

.outer-div{
  width: 100%;
  height: 200px;
  display: flex;
  border:1px solid #000;
}
.inner-div{
  margin: auto;
  text-align: center;
  border: 1px solid red;
}

<div class="outer-div">
  <div class="inner-div">
    Hey there!
  </div>
</div>

Solution 11 - Html

Unfortunately — but not surprisingly — the solution is more complicated than one would wish it to be. Also unfortunately, you'll need to use additional divs around the div you want vertically centered.

For standards-compliant browsers like Mozilla, Opera, Safari, etc. you need to set the outer div to be displayed as a table and the inner div to be displayed as a table-cell — which can then be vertically centered. For Internet Explorer, you need to position the inner div absolutely within the outer div and then specify the top as 50%. The following pages explain this technique well and provide some code samples too:

There is also a technique to do the vertical centering using JavaScript. Vertical alignment of content with JavaScript & CSS demonstrates it.

Solution 12 - Html

If someone cares for Internet Explorer 10 (and later) only, use Flexbox:

.parent {
    width: 500px;
    height: 500px;
    background: yellow;

    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;

    -webkit-justify-content: center;
    -ms-flex-pack: center;
    justify-content: center;

    -webkit-align-items: center;
    -ms-flex-align: center;
    align-items: center;
}

.centered {
    width: 100px;
    height: 100px;
    background: blue;
}

<div class="parent">
    <div class="centered"></div>
</div>

Flexbox support: http://caniuse.com/flexbox

Solution 13 - Html

A modern way to center an element vertically would be to use flexbox.

You need a parent to decide the height and a child to center.

The example below will center a div to the center within your browser. What's important (in my example) is to set height: 100% to body and html and then min-height: 100% to your container.

body, html {
  background: #F5F5F5;
  box-sizing: border-box;
  height: 100%;
  margin: 0;
}

#center_container {
  align-items: center;
  display: flex;
  min-height: 100%;
}

#center {
  background: white;
  margin: 0 auto;
  padding: 10px;
  text-align: center;
  width: 200px;
}

<div id='center_container'>
  <div id='center'>I am center.</div>
</div>

Solution 14 - Html

Centering only vertically

If you don't care about Internet Explorer 6 and 7, you can use a technique that involves two containers.

The outer container:

  • should have display: table;

The inner container:

  • should have display: table-cell;
  • should have vertical-align: middle;

The content box:

  • should have display: inline-block;

You can add any content you want to the content box without caring about its width or height!

Demo:

<div class="outer-container">
   <div class="inner-container">
     <div class="centered-content">
        Malcolm in the Middle
     </div>
   </div>
</div>

body {
    margin: 0;
}

.outer-container {
    position: absolute;
    display: table;
    width: 100%; /* This could be ANY width */
    height: 100%; /* This could be ANY height */
    background: #ccc;
}

.inner-container {
    display: table-cell;
    vertical-align: middle;
}

.centered-content {
    display: inline-block;
    background: #fff;
    padding: 20px;
    border: 1px solid #000;
}

See also this Fiddle!


Centering horizontally and vertically

If you want to center both horizontally and vertically, you also need the following.

The inner container:

  • should have text-align: center;

The content box:

  • should re-adjust the horizontal text-alignment to for example text-align: left; or text-align: right;, unless you want text to be centered

Demo:

<div class="outer-container">
   <div class="inner-container">
     <div class="centered-content">
         Malcolm in the Middle
     </div>
   </div>
</div>

body {
    margin: 0;
}

.outer-container {
    position: absolute;
    display: table;
    width: 100%; /* This could be ANY width */
    height: 100%; /* This could be ANY height */
    background: #ccc;
}

.inner-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.centered-content {
    display: inline-block;
    text-align: left;
    background: #fff;
    padding: 20px;
    border: 1px solid #000;
}

See also this Fiddle!

Solution 15 - Html

.center {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%); /* (x, y)  => position */
  -ms-transform: translate(-50%, -50%); /* IE 9 */
  -webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */    
}

.vertical {
  position: absolute;
  top: 50%;
  //left: 0;
  transform: translate(0, -50%); /* (x, y) => position */
}

.horizontal {
  position: absolute;
  //top: 0;
  left: 50%;
  transform: translate(-50%, 0); /* (x, y)  => position */
}

div {
  padding: 1em;
  background-color: grey; 
  color: white;
}  

<body>
  <div class="vertical">Vertically left</div>
  <div class="horizontal">Horizontal top</div>
  <div class="center">Vertically Horizontal</div>  
</body>

Related: Center a Image

Solution 16 - Html

Using flex property of CSS.

Solution #1

.parent {
    width: 400px;
    height:200px;
    background: blue;
    display: flex;
    align-items: center;
    justify-content:center;
}

.child {
    width: 75px;
    height: 75px;
    background: yellow;
}

<div class="parent">
    <div class="child"></div>
</div>

or by using display: flex; and margin: auto;

Solution #2

.parent {
    width: 400px;
    height:200px;
    background: blue;
    display: flex;
}

.child {
    width: 75px;
    height: 75px;
    background: yellow;
    margin:auto;
}

<div class="parent">
    <div class="child"></div>
</div>

show text center

Solution #3

.parent {
    width: 400px;
    height: 200px;
    background: yellow;
    display: flex;
    align-items: center;
    justify-content:center;
}

<div class="parent">Center</div>

Using percentage(%) height and width.

Solution #4

.parent {
    position: absolute;
    height:100%;
    width:100%;
    background: blue;
    display: flex;
    align-items: center;
    justify-content:center;
}

.child {
    width: 75px;
    height: 75px;
    background: yellow;
}

<div class="parent">
    <div class="child"></div>
</div> 

Solution 17 - Html

This is always where I go when I have to come back to this issue.

For those who don't want to make the jump:

  1. Specify the parent container as position:relative or position:absolute.
  2. Specify a fixed height on the child container.
  3. Set position:absolute and top:50% on the child container to move the top down to the middle of the parent.
  4. Set margin-top:-yy where yy is half the height of the child container to offset the item up.

An example of this in code:

<style type="text/css">
	#myoutercontainer {position:relative}
	#myinnercontainer {position:absolute; top:50%; height:10em; margin-top:-5em}
</style>
...
<div id="myoutercontainer">
    <div id="myinnercontainer">
	    <p>Hey look! I'm vertically centered!</p>
	    <p>How sweet is this?!</p>
    </div>
</div>

Solution 18 - Html

It can be done in two ways

body{
left: 50%; 
top:50%; 
transform: translate(-50%, -50%); 
height: 100%; 
width: 100%; 
}

OR

Using flex

body {
    height:100%
    width:100%
    display: flex;
    justify-content: center;
    align-items: center;
}

align-items:center; makes the content vertically center

justify-content: center;makes the content horizontally center

Solution 19 - Html

I just wrote this CSS and to know more, please go through: This article with vertical align anything with just 3 lines of CSS.

.element {
    position: relative;
    top: 50%;
    transform: perspective(1px) translateY(-50%);
}

Solution 20 - Html

For newcomers, please try:

display: flex;
align-items: center;
justify-content: center;

Solution 21 - Html

The three lines of code using transform works practically on modern browsers and Internet Explorer:

.element{
     position: relative;
     top: 50%;
     transform: translateY(-50%);
     -moz-transform: translateY(-50%);
     -webkit-transform: translateY(-50%);
     -ms-transform: translateY(-50%);
}

I am adding this answer since I found some incompleteness in the previous version of this answer (and Stack Overflow won't allow me to simply comment).

  1. 'position' relative messes up the styling if the current div is in the body and has no container div. However 'fixed' seems to work, but it obviously fixes the content in the center of the viewport position: relative

  2. Also I used this styling for centering some overlay divs and found that in Mozilla all elements inside this transformed div had lost their bottom borders. Possibly a rendering issue. But adding just the minimal padding to some of them rendered it correctly. Chrome and Internet Explorer (surprisingly) rendered the boxes without any need for padding mozilla without inner paddings mozilla with paddings

Solution 22 - Html

CSS Grid

body, html { margin: 0; }

body {
  display: grid;
  min-height: 100vh;
  align-items: center;
}

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

Solution 23 - Html

The answer from Billbad only works with a fixed width of the .inner div. This solution works for a dynamic width by adding the attribute text-align: center to the .outer div.

.outer {
  position: absolute;
  display: table;
  width: 100%;
  height: 100%;
  text-align: center;
}
.middle {
  display: table-cell;
  vertical-align: middle;
}
.inner {
  text-align: center;
  display: inline-block;
  width: auto;
}

<div class="outer">
  <div class="middle">
    <div class="inner">
      Content
    </div>
  </div>
</div>

Solution 24 - Html

Just do it: Add the class at your div:

.modal {
  margin: auto;
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
  height: 240px;
}

And read this article for an explanation. Note: Height is necessary.

Solution 25 - Html

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

Solution 26 - Html

I did it with this (change width, height, margin-top and margin-left accordingly):

.wrapper {
    width: 960px;
    height: 590px;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -295px;
    margin-left: -480px;
}
<div class="wrapper"> -- Content -- </div>

Solution 27 - Html

Not answering for browser compatibility but to also mention the new Grid and the not so new Flexbox feature.

Grid

From: [Mozilla - Grid Documentation - Align Div Vertically][1]

Browser Support: [Grid Browser Support][2]

CSS:

.wrapper {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: 10px;
  grid-auto-rows: 200px;
  grid-template-areas: 
    ". a a ."
    ". a a .";
}
.item1 {
  grid-area: a;
  align-self: center;
  justify-self: center;
}

HTML:

<div class="wrapper">
 <div class="item1">Item 1</div>
</div>

Flexbox

Browser Support: [Flexbox Browser Support][3]

CSS:

display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
align-items: center;
justify-content: center;

[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Box_Alignment_in_CSS_Grid_Layout#Center_an_item_in_the_area "Mozilla Grid Docs" [2]: https://caniuse.com/#search=grid [3]: https://caniuse.com/#search=flexbox

Solution 28 - Html

I think a solid solution for all browsers without using Flexbox - "align-items: center;" is a combination of display: table and vertical-align: middle;.

CSS
.vertically-center
{
    display: table;

    width: 100%;  /* Optional */
    height: 100%; /* Optional */
}

.vertically-center > div
{
    display: table-cell;
    vertical-align: middle;
}
HTML
<div class="vertically-center">
    <div>
        <div style="border: 1px solid black;">some text</div>
    </div>
</div>

‣Demo: https://jsfiddle.net/6m640rpp/

Solution 29 - Html

Especially for parent divs with relative (unknown) height, the centering in the unknown solution works great for me. There are some really nice code examples in the article.

It was tested in Chrome, Firefox, Opera, and Internet Explorer.

Some text

Any other text..."

/* This parent can be any width and height */ .block { text-align: center; }

/* The ghost, nudged to maintain perfect centering / .block:before { content: ''; display: inline-block; height: 100%; vertical-align: middle; margin-right: -0.25em; / Adjusts for spacing */ }

/* The element to be centered, can also be of any width and height */ .centered { display: inline-block; vertical-align: middle; width: 300px; }

Solution 30 - Html

The contents can be easily centered by using Flexbox. The following code shows the CSS for the container inside which the contents needs to be centered:

.absolute-center {
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;

    -ms-flex-align: center;
    -webkit-align-items: center;
    -webkit-box-align: center;

    align-items: center;
}

Solution 31 - Html

There is a trick I found out recently: You need to use top 50%, and then you do a translateY(-50%).

.outer-div {
  position: relative;
  height: 150px;
  width: 150px;
  background-color: red;
}

.centered-div {
  position: absolute;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  background-color: white;
}

<div class='outer-div'>
  <div class='centered-div'>
    Test text
  </div>
</div>

Solution 32 - Html

I find this one most useful... It gives the most accurate 'H' layout and is very simple to understand.

The benefit of this markup is that you define your content size in a single place -> "PageContent".

The Colors of the page background and its horizontal margins are defined in their corresponding divs.

<div id="PageLayoutConfiguration"
     style="display: table;
     position:absolute; top: 0px; right: 0px; bottom: 0px; left: 0px;
     width: 100%; height: 100%;">

    <div id="PageBackground"
         style="display: table-cell; vertical-align: middle;
         background-color: purple;">

        <div id="PageHorizontalMargins"
             style="width: 100%;
             background-color: seashell;">

            <div id="PageContent"
                 style="width: 1200px; height: 620px; margin: 0 auto;
                 background-color: grey;">

                 My content goes here...

            </div>
        </div>
    </div>
</div>

And here with CSS separated:

<div id="PageLayoutConfiguration">
     <div id="PageBackground">
          <div id="PageHorizontalMargins">
               <div id="PageContent">
                     my content goes here...
               </div>
          </div>
     </div>
</div>
#PageLayoutConfiguration{
   display: table;
   width: 100%;
   height: 100%;
   position: absolute;
   top: 0px;
   right: 0px;
   bottom: 0px;
   left: 0px;
}

#PageBackground{
   display: table-cell;
   vertical-align: middle;
   background-color: purple;
}

#PageHorizontalMargins{
   style="width: 100%;
   background-color: seashell;
}
#PageContent{
   width: 1200px;
   height: 620px;
   margin: 0 auto;
   background-color: grey;
}

Solution 33 - Html

I use this. It works in Internet Explorer 8 and later:

height:268px - for display:table acts like min-height.

CSS:

* {
  padding: 0;
  margin: 0;
}
body {
  background: #cc9999;
}
p {
  background: #f0ad4e;
}
#all {
  margin: 200px auto;
}
.ff-valign-wrap {
  display: table;
  width: 100%;
  height: 268px;
  background: #ff00ff;
}
.ff-valign {
  display: table-cell;
  height: 100%;
  vertical-align: middle;
  text-align: center;
  background: #ffff00;
}

HTML:

<body>

  <div id="all">
    <div class="ff-valign-wrap">
      <div class="ff-valign">
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet, animi autem doloribus earum expedita, ipsum laboriosam nostrum nulla officiis optio quam quis quod sunt tempora tenetur veritatis vero voluptatem voluptates?</p>
      </div>
    </div>
  </div>

</body>

Solution 34 - Html

The following is working in my case and was tested in Firefox.

#element {
	display: block;
	transform: translateY(50%);
	-moz-transform: translateY(50%);
	-webkit-transform: translateY(50%);
	-ms-transform: translateY(50%);
}

The div's height and parent's height are dynamic. I use it when there are other elements on the same parent which is higher than the target element, where both are positioned horizontally inline.

Solution 35 - Html

This solution worked for me for a block element (e.g., <div>). I used the colors to make the solution clearer.

HTML:

<main class="skin_orange">
    <p>As you can the the element/box is vertically centered</p>
    <div class="bigBox skin_blue">Blue Box</div>
</main>

CSS:

main {
	position: relative;
	width: 400px;
	height: 400px;
}

.skin_orange {
	outline: thin dotted red;
	background: orange;
}

.bigBox {
	width: 150px;
	height: 150px;
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
}

.skin_blue {
	background-color: blue;
}

JSFiddle Code Demo

Solution 36 - Html

I just found another way which worked for me:

<div class="container">
  <div class="vertical">
     <h1>Welcome</h1>
     <h2>Aligned Vertically</h2>
     <a href="#">Click ME</a>
   </div>
</div>

###CSS

.vertical{
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
}

More information

Solution 37 - Html

Vertical & Horizontal CENTER

HTML

<div id="dialog">Centered Dialog</div>

CSS

#dialog {
	position:fixed; top:50%; left:50%; z-index:99991;
	width:300px; height:60px;
	margin-top:-150px;  /* half of the width */
    margin-left:-30px; /* half of the height */}

Enjoy!

Solution 38 - Html

By using the transform property we can do a vertically centered div easily.

.main-div {
    background: none repeat scroll 0 0 #999;
    font-size: 18px;
    height: 450px;
    max-width: 850px;
    padding: 15px;
}

.vertical-center {
    background: none repeat scroll 0 0 #1FA67A;
    color: #FFFFFF;
    padding: 15px;
    position: relative;
    top: 50%;
    transform: translateY(-50%);
    -moz-transform: translateY(-50%);
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    -o-transform: translateY(-50%);
}

<div class="main-div">
    <div class="vertical-center">
        <span>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</span>
    </div>
</div>

See here for full article

Solution 39 - Html

The best thing to do would be:

#vertalign{
  height: 300px;
  width: 300px;
  position: absolute;
  top: calc(50vh - 150px); 
}

150 pixels because that's half of the div's height in this case.

Solution 40 - Html

Declare this Mixin:

@mixin vertical-align($position: relative) {
  position: $position;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
}

Then include it in your element:

.element{
    @include vertical-align();
}

Solution 41 - Html

This is by far the easiest approach and works on non-blocking elements as well. The only downside is it's Flexbox, thus, older browsers will not support this.

<div class="sweet-overlay">
    <img class="centered" src="http://jimpunk.com/Loading/loading83.gif" />
</div>

Link to CodePen:

http://codepen.io/damianocel/pen/LNOdRp

The important point here is, for vertical centering, we need to define a parent element (container) and the img must have a smaller height than the parent element.

Solution 42 - Html

This method doesn't use any transform. So it doesn't have a problem with the output becoming blurry.

position: absolute;
width: 100vw;
top: 25%;
bottom: 25%;
text-align: center;

Solution 43 - Html

Since each time I need to center div vertically I google for it over and over again and this answer always comes first I'll leave this for future me (since none of the provided solutions fit my need well):

So if one is already using bootstrap this can be done as below:

<div style="min-height: 100vh;" class="align-items-center row">
	<div class="col" style="margin: auto; max-width: 750px;"> //optional style to center horizontally as well

    //content goes here

    </div>
</div>

Solution 44 - Html

I shared short version for who is want.

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

.firstDivision .verticalCenter {
  text-align: center;
  display: table-cell;
  vertical-align: middle;
}

<div class="firstDivision">
  <div class="verticalCenter">
    Text was centered for Vertical.
  </div>
</div>

Solution 45 - Html

To vertical-align a box in web page, including Internet Explorer 6, you may use:

  1. Conditional comments
  2. The haslayout property
  3. display: table-value for others (and now flex)

Fiddle

/* Internet Explorer 8 and others */
.main {
  width: 500px;
  margin: auto;
  border: solid;
}
html {
  height: 100%;
  width: 100%;
  display: table;
}
body {
  display: table-cell;
  vertical-align: middle;
}

<!-- [if lte IE 7]>
<style> /* Should be in the <head> */
    html, body , .ie {
        height: 100%;
        text-align: center;
        white-space: nowrap;
    }
    .ie , .main{
        display: inline; /* Used with zoom in case you take a block element instead an inline element */
        zoom: 1;
        vertical-align: middle;
        text-align: left;
        white-space: normal;
    }
</style>
<b class="ie"></b>
<!--[endif]-->
<div class="main">
  <p>Fill it up with your content </p>
  <p><a href="https://jsfiddle.net/h8z24s5v/embedded/result/">JsFiddle versie</a></p>
</div>

Actually, Internet Explorer 7 would bring some trouble here being the only which will strictly apply height: 100% on HTML/body elements.


But, this is past and today and who still minds old versions of Internet Explorer, table/table-cell is just fine, display: flex is promising, and display: grid will show up some day.


Another nowdays example via flex

html {
  display: flex;
  min-height: 100vh;/* or height */
}

body {
  margin: auto;
}

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

Solution 46 - Html

Here is a simple way, with almost no code:

CSS code:

.main{
    height: 100%;
}

.center{
    top: 50%;
    margin-top: 50%;
}

HTML code:

<div class="main">
    <div class="center">
        Hi, I am centered!
    </div>
</div>

Your text will be in the middle of the page!

Solution 47 - Html

This worked in my case (only tested in modern browsers):

.textthatneedstobecentered {
  margin: auto;
  top: 0; bottom: 0;
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBurak ErdemView Question on Stackoverflow
Solution 1 - HtmlBillbadView Answer on Stackoverflow
Solution 2 - HtmlDrupalFeverView Answer on Stackoverflow
Solution 3 - HtmlYiselaView Answer on Stackoverflow
Solution 4 - HtmlSantosh KhalseView Answer on Stackoverflow
Solution 5 - Htmlsticks464View Answer on Stackoverflow
Solution 6 - HtmlArmel LarcierView Answer on Stackoverflow
Solution 7 - HtmlymakuxView Answer on Stackoverflow
Solution 8 - HtmlReggie PinkhamView Answer on Stackoverflow
Solution 9 - HtmlNerdroidView Answer on Stackoverflow
Solution 10 - HtmlVarsha DhadgeView Answer on Stackoverflow
Solution 11 - HtmlsidsView Answer on Stackoverflow
Solution 12 - HtmlbravedickView Answer on Stackoverflow
Solution 13 - HtmlMarwellnView Answer on Stackoverflow
Solution 14 - HtmlJohn SlegersView Answer on Stackoverflow
Solution 15 - HtmlanteloveView Answer on Stackoverflow
Solution 16 - HtmlDeepu ReghunathView Answer on Stackoverflow
Solution 17 - HtmlNinxView Answer on Stackoverflow
Solution 18 - HtmlDevView Answer on Stackoverflow
Solution 19 - HtmlSanjib DebnathView Answer on Stackoverflow
Solution 20 - HtmlUsman IqbalView Answer on Stackoverflow
Solution 21 - HtmlMandarKView Answer on Stackoverflow
Solution 22 - HtmlAndy HoffmanView Answer on Stackoverflow
Solution 23 - HtmlRuwenView Answer on Stackoverflow
Solution 24 - HtmlAnshulView Answer on Stackoverflow
Solution 25 - HtmlBradyView Answer on Stackoverflow
Solution 26 - HtmlNetuddkiView Answer on Stackoverflow
Solution 27 - HtmlarketView Answer on Stackoverflow
Solution 28 - HtmlMartin WantkeView Answer on Stackoverflow
Solution 29 - HtmlRuwenView Answer on Stackoverflow
Solution 30 - HtmlMahendra LiyaView Answer on Stackoverflow
Solution 31 - HtmlMelchiaView Answer on Stackoverflow
Solution 32 - HtmlG.YView Answer on Stackoverflow
Solution 33 - HtmlRantievView Answer on Stackoverflow
Solution 34 - HtmlAriView Answer on Stackoverflow
Solution 35 - HtmlBirol EfeView Answer on Stackoverflow
Solution 36 - HtmlRushabh RajeshKumar PadaliaView Answer on Stackoverflow
Solution 37 - HtmlArmandView Answer on Stackoverflow
Solution 38 - Htmlinaam husainView Answer on Stackoverflow
Solution 39 - HtmlFastboy619View Answer on Stackoverflow
Solution 40 - HtmlPeter GirnusView Answer on Stackoverflow
Solution 41 - Htmldamiano celentView Answer on Stackoverflow
Solution 42 - Htmlth3pirat3View Answer on Stackoverflow
Solution 43 - Htmlvir usView Answer on Stackoverflow
Solution 44 - HtmlTahsin Berk CeylanView Answer on Stackoverflow
Solution 45 - HtmlG-CyrillusView Answer on Stackoverflow
Solution 46 - HtmlJLavoieView Answer on Stackoverflow
Solution 47 - HtmlstommestackView Answer on Stackoverflow