Center vertically and horizontally

I was working on typesetting poems when I thought what it would take to center a piece of content both vertically and horizontally?

For image and smaller blocks of text like poems, I choose to work with flexbox as it provides, in my opinion, the simplest way to center content on both axes without scripting.

The code looks like this:

.container {
  height: 100vh;
  display: flex;
  flex-flow: column;
  justify-content: center;
  align-items: center;
}

Some caveats:

  • You must set an explicit height for the container, in this case, 100vh. Otherwise, there is no height to center to
  • Because we’re centering all the content it may be a good idea to create an inner container or paragraphs and other individual elements may be centered and cause unexpected results.

You can see working examples of this in my poema 6 and poema 19 demos. An editable example of Poema 6 is in Codepen.