I want to center a div which is added 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 values for 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
always irrespective of its size?
I figured out that using margin:auto
can horizontally allign the innerDiv to the middle.But what about vertical allign middle?
you can do it by simply adding css style mentioned above. All the best. for query write comment
Vertical Align Anything with just 3 lines of CSS
HTML
Simplest
CSS
According to shouldiprefix this are the only prefixes you need
You can also use % as the value for the 'height' property of .parent-of-element, as long as parent of element has height or some content that expands its vertical size.
tl;dr
Vertical align middle works, but you will have to use
table-cell
on your parent element andinline-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:
HTML
CSS
Modern solution (transform)
Since transforms are fairly well supported now there is an easier way to do it.
CSS
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
Demo
More examples & possibilities: Compare all the methods on one pages
You can center the div vertically and horizontally in CSS using flex;
And the second one is as following;
And the resulting HTML:
Another way of achieving this horizontal and vertical centering is:
(Reference)
I personally prefer the trick of using a hidden pseudo element to span the full height of the outer container, and vertically aligning it with the other content. Chris Coyier has a nice article on the technique. http://css-tricks.com/centering-in-the-unknown/ The huge advantage of this is scalability. You don't have to know the height of the content or worry about it growing/shrinking. This solution scales :).
Here's a fiddle with all the CSS you'll need and a working example. http://jsfiddle.net/m5sLze0d/