Every new developer inevitably finds that centering a div isn’t as obvious as you’d expect. Centering what’s inside a div is easy enough by giving the text-align
property a value of center
, but then things tend to get a bit sticky. When you get to centering a div vertically, you can end up in a world of CSS hurt.The aim of this article is to show how, with a few CSS tricks, any div can be centered; horizontally, vertically or both. And within the page or a div.
Centering a div in a page, basic
This method works with just about every browser, ever.
.center-div
{
margin: 0 auto;
width: 100px;
}
The value auto in the margin property sets the left and right margins to the available space within the page. The thing to remember is your centered div must have a width property.
Centering a div within a div, old-school
This method works with just about every browser.
<div class="outer-div">
<div class="inner-div">
</div>
</div>
.outer-div
{
padding: 30px;
}
.inner-div
{
margin: 0 auto;
width: 100px;
}
The margin auto trick strikes again. The outer div can be disorderly, but the inner div must have a width property.
Centering a div within a div with inline-block
With this method the inner div doesn’t require a set width. It works with all reasonably modern browsers, including IE8.
<div class="outer-div">
<div class="inner-div">
</div>
</div>
.outer-div
{
padding: 30px;
text-align: center;
}
.inner-div
{
display: inline-block;
padding: 50px;
}
The text-align property only works on inline elements. The inline-block value displays the inner div as an inline element as well as a block, so the text-align property in the outer div centers the inner div.
Centering a div within a div, horizontally and vertically
This uses the margin auto trick to center a div both horizontally and vertically. It works with all modern browsers.
<div class="outer-div">
<div class="inner-div">
</div>
</div>
.outer-div
{
padding: 30px;
}
.inner-div
{
margin: auto;
width: 100px;
height: 100px;
}
The inner div must have a width and height property. This doesn’t work if the outer div has a fixed height.
Centering a div at the bottom of a page
This uses margin auto and an absolute-positioned outer div. It works with all modern browsers.
<div class="outer-div">
<div class="inner-div">
</div>
</div>
.outer-div
{
position: absolute;
bottom: 30px;
width: 100%;
}
.inner-div
{
margin: 0 auto;
width: 100px;
height: 100px;
background-color: #ccc;
}
The inner div must have a width property. The gap from the very bottom of the page is set in the outer div’s bottom property. You can also center a div at the top of a page, replacing the bottom property with top.
Centering a div in a page, horizontally and vertically
This uses margin auto again and an absolute-positioned outer div. It works with all modern browsers.
.center-div
{
position: absolute;
margin: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100px;
height: 100px;
}
The div must have a width and height property.
Centering a div in a page, responsive
The width of the div is responsive, in that it responds to the size of the viewport. It works with just about every browser.
.center-div
{
margin: 0 auto;
max-width: 700px;
}
Your centered div must have a max-width property.
Centering a div within a div, inner div responsive
The inner div is responsive. Works with almost every browser.
<div class="outer-div">
<div class="inner-div">
</div>
</div>
.outer-div
{
padding: 30px;
}
.inner-div
{
margin: 0 auto;
max-width: 700px;
}
The inner div must have a max-width property.
Centering two responsive divs, side by side
Two divs side by side, and both responsive. Works with every modern browser.
<div class="container">
<div class="left-div"></div>
<div class="right-div"></div>
</div>
.container
{
text-align: center;
}
.left-div
{
display: inline-block;
max-width: 300px;
vertical-align: top;
}
.right-div
{
display: inline-block;
max-width: 150px;
}
screen and (max-width: 600px)
{
.left-div, .right-div
{
lef max-width: 100%;
}
}
Simply a couple of inline-block elements within a centered container. This also uses CSS media queries; when the screen size is less than 600 pixels, the max-width property of both left and right divs is set to 100%.
Flexbox, div centered
This centers a div both horizontally and vertically using Flexbox. The CSS3 Flexible Box Layout Module, aka Flexbox, aims to provide a CSS box model for user interface design. There’s plenty of Flexbox tutorials out there, and we’ve also played around.
Flexbox is supported by Chrome 38+, IE11 and Microsoft Edge, Firefox 38+, Safari 9+, Opera 30+, iOS Safari 9+ and Android Browser 40+.
<div class="container">
<div class="item"></div>
<div>
.container
{
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
.item
{
background-color: #f3f2ef;
border-radius: 3px;
width: 200px;
height: 100px;
}
The height property in the container can be anything, as long as it’s larger than the centered div.