106

How do I align entire html body to the center ?

Rajat Gupta
  • 23,343
  • 56
  • 165
  • 281

9 Answers9

125

I just stumbled on this old post, and while I'm sure user01 has long since found his answer, I found the current answers don't quite work. After playing around for a little bit using info provided by the others, I found a solution that worked in IE, Firefox, and Chrome. In CSS:

html, body {
    height: 100%;
}

html {
    display: table;
    margin: auto;
}

body {
    display: table-cell;
    vertical-align: middle;
}

This is almost identical to abernier's answer, but I found that including width would break the centering, as would omitting the auto margin. I hope anyone else who stumbles on this thread will find my answer helpful.

Note: Omit html, body { height: 100%; } to only center horizontally.

MildWolfie
  • 2,082
  • 1
  • 14
  • 27
  • 1
    Good answer. Just wondering (as I don't have a lot of experience with HTML), is setting the height to 100% necessary? – Jack Humphries Aug 22 '13 at 20:43
  • 8
    @JackHumphries The height is only necessary if you want to align the page center on both the vertical and horizontal axis. If horizontal is all you want, you can omit the height. – MildWolfie Aug 27 '13 at 14:42
  • @Jack Humphries its not because it happens it self – Joe McMullan Jan 06 '21 at 20:30
45

You can try:

body{ margin:0 auto; }
António Almeida
  • 8,450
  • 5
  • 54
  • 59
arniotaki
  • 1,875
  • 1
  • 20
  • 25
  • 1
    This is such a simple answer yet the cleanest and most efficient way of centring the body tag in the middle of the page. – justinhartman Oct 30 '18 at 20:10
  • 3
    While it's short is also does not work in IE, Edge Legacy, Edge, Chrome, nor Firefox. The problem is that margin auto only works when the element width is less than that of the parent. As 'body' defaults to 100% there no room on the edges to auto-insert margins. You can use `body { margin:0 auto; max-width: 700px; }` and then your body will be up to 700px and will allow wrapping on smaller devices. – user3347790 Jun 11 '20 at 20:15
19

EDIT

As of today with flexbox, you could

body {
  display:flex; flex-direction:column; justify-content:center;
  min-height:100vh;
}

PREVIOUS ANSWER

html, body {height:100%;}
html {display:table; width:100%;}
body {display:table-cell; text-align:center; vertical-align:middle;}
abernier
  • 22,855
  • 18
  • 73
  • 103
11

If I have one thing that I love to share with respect to CSS, it's MY FAVE WAY OF CENTERING THINGS ALONG BOTH AXES!!!

Advantages of this method:

  1. Full compatibility with browsers that people actually use
  2. No tables required
  3. Highly reusable for centering any other elements inside their parent
  4. Accomodates parents and children with dynamic (changing) dimensions!

I always do this by using 2 classes: One to specify the parent element, whose content will be centered (.centered-wrapper), and the 2nd one to specify which child of the parent is centered (.centered-content). This 2nd class is useful in the case where the parent has multiple children, but only 1 needs to be centered). In this case, body will be the .centered-wrapper, and an inner div will be .centered-content.

<html>
    <head>...</head>
    <body class="centered-wrapper">
        <div class="centered-content">...</div>
    </body>
</html>

The idea for centering will now be to make .centered-content an inline-block. This will easily facilitate horizontal centering, through text-align: center;, and also allows for vertical centering as you shall see.

.centered-wrapper {
    position: relative;
    text-align: center;
}
.centered-wrapper:before {
    content: "";
    position: relative;
    display: inline-block;
    width: 0; height: 100%;
    vertical-align: middle;
}
.centered-content {
    display: inline-block;
    vertical-align: middle;
}

This gives you 2 really reusable classes for centering any child inside of any parent! Just add the .centered-wrapper and .centered-content classes.

So, what's up with that :before element? It facilitates vertical-align: middle; and is necessary because vertical alignment isn't relative to the height of the parent - vertical alignment is relative to the height of the tallest sibling!!!. Therefore, by ensuring that there is a sibling whose height is the parent's height (100% height, 0 width to make it invisible), we know that vertical alignment will be with respect to the parent's height.

One last thing: You need to ensure that your html and body tags are the size of the window so that centering to them is the same as centering to the browser!

html, body {
    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0;
}

Fiddle: https://jsfiddle.net/gershy/g121g72a/

Gershy
  • 5,378
  • 1
  • 27
  • 38
8

I use flexbox on html. For a nice effect, you can match the browsers chrome so as to frame your content on screen sizes larger than your page maximums. I find that #eeeeee matches pretty well. You could add a box shadow for a nice float effect.

    html{
        display: flex;
        flex-flow: row nowrap;  
        justify-content: center;
        align-content: center;
        align-items: center;
        height:100%;
        margin: 0;
        padding: 0;
        background:#eeeeee;
    }
    body {
        margin: 0;
        flex: 0 1 auto;
        align-self: auto;
        /*recommend 1920 / 1080 max based on usage stats, use 100% to that point*/
        width: 100%
        max-width: 900px;
        height: 100%;
        max-height: 600px;
        background:#fafafa;
        -webkit-box-shadow: 0px 0px 96px 0px rgba(0,0,0,0.75);
        -moz-box-shadow: 0px 0px 96px 0px rgba(0,0,0,0.75);
        box-shadow: 0px 0px 96px 0px rgba(0,0,0,0.75);
    }

enter image description here enter image description here image/data courtesy StatCounter

Ronnie Royston
  • 11,959
  • 5
  • 57
  • 72
  • 4
    Good, modern answer. Just a few comments. (a) The vendor-prefix for `box-shadow` is probably redundant as browsers which support `flex` also support `box-shadow`. (b) There’s a lot of CSS which embellishes your answer, but makes the important bits hard to distinguish. Thanks – Manngo Mar 06 '18 at 01:05
  • Very much (b), in @Manngo's comment above. – cjauvin Jul 26 '18 at 18:54
  • Good answer. Modern. But it could have been a simpler one with the same content. – carloswm85 Oct 05 '19 at 04:18
8

http://bluerobot.com/web/css/center1.html

body {
    margin:50px 0; 
    padding:0;
    text-align:center;
}

#Content {
    width:500px;
    margin:0 auto;
    text-align:left;
    padding:15px;
    border:1px dashed #333;
    background-color:#eee;
}
Kerem Baydoğan
  • 9,716
  • 1
  • 37
  • 49
jantimon
  • 33,244
  • 22
  • 110
  • 172
7

Just write

<body>
   <center>
            *Your Code Here*
   </center></body>
icyNerd
  • 387
  • 1
  • 5
  • 14
6

Try this

body {
max-width: max-content;
margin: auto;
}
4
<style>
        body{
            max-width: 1180px;
            width: 98%;
            margin: 0px auto;
            text-align: left;
        }
</style>

Just apply this style before applying any CSS. You can change width as per your need.