Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vertically centering a div inside another div [duplicate]

Tags:

html

css

I want to center a div which is inside another div.

<div id="outerDiv">     <div id="innerDiv">     </div> </div> 

This is the CSS I am currently using.

    #outerDiv {         width: 500px;         height: 500px;         position: relative;     }          #innerDiv {         width: 284px;         height: 290px;         position: absolute;         top: 50%;         left: 50%;         margin-top: -147px;         margin-left: -144px;     } 

As you can see, the approach I use now depends on the width and height of #innerDiv. If the width/height changes, I will have to modify the margin-top and margin-left values. Is there any generic solution that I can use to center the #innerDiv independently of its size?

I figured out that using margin: auto can horizontally align the #innerDiv to the middle. But what about vertical alignment?

like image 919
user700284 Avatar asked Jun 27 '11 08:06

user700284


People also ask

How can I center a div within another div duplicate?

To move the inner div container to the centre of the parent div we have to use the margin property of style attribute. We can adjust the space around any HTML element by this margin property just by providing desired values to it.

How do I keep my div vertically centered?

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%.

How do I vertically align two items in a div?

To align two <div> elements vertically in Bootstrap 3, you can try using the CSS Flexible Box Layout. In the example below, we display the needed row as a flex container box with the CSS display property and then, align the flex-items (columns) vertically with the align-items property.

How do I vertically center a parent in a div?

right are positioned absolutely with top: 50% and use margin-top: -0.8em to get vertical centering (use one-half of line-height value). Use the left and right offsets (or padding) to adjust the child elements horizontal position as needed.


2 Answers

tl;dr

Vertical align middle works, but you will have to use table-cell on your parent element and inline-block on the child.

This solution is not going to work in IE6 & 7.
Yours is the safer way to go for those.
But since you tagged your question with CSS3 and HTML5 I was thinking that you don't mind using a modern solution.

The classic solution (table layout)

This was my original answer. It still works fine and is the solution with the widest support. Table-layout will impact your rendering performance so I would suggest that you use one of the more modern solutions.

Here is an example


Tested in:

  • FF3.5+
  • FF4+
  • Safari 5+
  • Chrome 11+
  • IE9+

HTML

<div class="cn"><div class="inner">your content</div></div> 

CSS

.cn {   display: table-cell;   width: 500px;   height: 500px;   vertical-align: middle;   text-align: center; }  .inner {   display: inline-block;   width: 200px; height: 200px; } 

Modern solution (transform)

Since transforms are fairly well supported now there is an easier way to do it.

CSS

.cn {   position: relative;   width: 500px;   height: 500px; }  .inner {   position: absolute;   top: 50%; left: 50%;   transform: translate(-50%,-50%);   width: 200px;   height: 200px; } 

Demo


♥ my favourite modern solution (flexbox)

I started to use flexbox more and more its also well supported now Its by far the easiest way.

CSS

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

Demo

More examples & possibilities: Compare all the methods on one pages

like image 86
meo Avatar answered Oct 12 '22 11:10

meo


Another way of achieving this horizontal and vertical centering is:

.Absolute-Center {   margin: auto;   position: absolute;   top: 0; left: 0; bottom: 0; right: 0; } 

(Reference)

like image 45
user700284 Avatar answered Oct 12 '22 11:10

user700284