Bottom-align headers with CSS without a container

When you place text in a block element in HTML with a defined height, the text normally ends up at the top of the block. In some cases you may want to change this; for example, maybe a heading or caption will have a background image and should align to the bottom of the box for aesthetic purposes.

In other words, we want to go from this:

Some text

To this:

Some text

It would also be great not to require additional HTML elements to make this work. Fortunately, it’s possible, albeit with some hackish use of before and display: table.

.bottom {
    height: 100px;
    background: #eee;
    display: table;
    width: 100%;
    box-sizing: border-box;
    padding: 15px;
}

.bottom:before {
    display: table-row;
    height: 100%;
    content: "";
}

Tested on current versions of Chrome, Safari, Firefox, and IE, and even back to IE 8.