Search code examples
csshtmlimagecenter

css div center multi-line text vertically and horizontally with a background image


I have searched Stackoverflow and cannot find a solution that works.

Seems that centring vertically AND horizontally in a div is hard.

I'm using this css:

.title {
    font-family: "Book Antiqua", "Palatino Linotype", Palatino, serif;
    font-size: 400%;
}

.subtitle {
    font-family: "Book Antiqua", "Palatino Linotype", Palatino, serif;
    font-size: 150%;
}

.subnote {
    font-family: "Book Antiqua", "Palatino Linotype", Palatino, serif;
    font-size: 75%;
}

.outer {
    display: table;
    position: absolute;
    height: 100%;
    width: 100%;
}

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

.innie {
    width: 1000px;
    height: 515px;
    background-image: url("bkgrnd3.png");
    position:absolute;
    left:50%;
    top:50%;
    margin: -257px 0 0 -500px;
    text-align: center;
}

and this html:

<!DOCTYPE html>
<html>
    <head>
        <title>Timothy Eldon Official</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" type="text/css" href="eldon.css">
    </head>
    <body>
        <div class="outer">
            <div class="middle">
                <div class="innie">
                    <span class="title">
                        Timothy Eldon
                    </span>
                    <br/>
                    <span class="subtitle">
                        Author
                    </span>
                    <br/>
                    <span class="subnote">
                        (amateur)
                    </span>
                </div>
            </div>
        </div>
    </body>
</html>

It centres everything on the page relatively, but I cannot get the text centred vertically.

There seems to be lots of ideas, but I've tried several and nothing works.


Solution

  • You have some unnecessary css such as margin: -257px 0 0 -500px; left:50%; top:50%; width: 1000px; height: 515px; on .innie , which is throwing off your center alignment.

    I think this, what you are going for.

    UPDATED

    CSS

    .title {
        font-family: "Book Antiqua", "Palatino Linotype", Palatino, serif;
        font-size: 400%;
    }
    
    .subtitle {
        font-family: "Book Antiqua", "Palatino Linotype", Palatino, serif;
        font-size: 150%;
    }
    
    .subnote {
        font-family: "Book Antiqua", "Palatino Linotype", Palatino, serif;
        font-size: 75%;
    }
    
    .outer {
        display: table;
        position: absolute;
        height: 100%;
        width: 100%;
        background:url('https://placeimg.com/600/300/any')no-repeat;
        background-position: center;
    }
    
    .middle {
        display: table-cell;
        vertical-align: middle;
    }
    
    .innie {
        text-align: center;
    }
    

    jsFiddle Demo - https://jsfiddle.net/8dphnor5/