Equal space between flex items

There are at least two methods for equal space between all items, including the first and last items. One method, however, doesn’t yet have full browser support.


pseudo-elements

Note this section from Firefox documentation:

In-flow ::after and ::before pseudo-elements are now flex
items
.

In fact, all major browsers consider pseudo-elements on a flex container to be flex items.

Knowing that, add ::before and ::after to your container.

With justify-content: space-between and zero-width pseudo-elements, the visible flex items will appear evenly spaced.

flex-container {
  display: flex;
  justify-content: space-between;
}

flex-container::before {
  content: "";
}

flex-container::after {
  content: "";
}

/* non-essential decorative styles */
flex-container {
  padding: 5px 0;
  background-color: lightyellow;
  border: 1px solid #aaa;
}
flex-item {
  height: 50px;
  width: 75px;
  background-color: lightgreen;
}
<flex-container>
  <flex-item></flex-item>
  <flex-item></flex-item>
  <flex-item></flex-item>
  <flex-item></flex-item>
</flex-container>

space-evenly

The CSS Box Alignment Module, which is the W3C’s unfinished proposal to establish a common set of alignment properties for use across all box models, provides the space-evenly value for use with the justify-content and align-content properties.

4.3. Distributed Alignment: the stretch, space-between,
space-around, and space-evenly
keywords

space-evenly

The alignment subjects are evenly distributed in the alignment
container, with a full-size space on either end.

The alignment subjects are distributed so that the spacing between any two adjacent alignment subjects, before the first alignment subject, and after the
last alignment subject is the same.

As of this writing, however, it looks like space-evenly only works in Firefox and Chrome.

flex-container {
  display: flex;
  justify-content: space-evenly;
}

/* non-essential decorative styles */
flex-container {
  padding: 5px 0;
  background-color: lightyellow;
  border: 1px solid #aaa;
}
flex-item {
  height: 50px;
  width: 75px;
  background-color: lightgreen;
}
<flex-container>
  <flex-item></flex-item>
  <flex-item></flex-item>
  <flex-item></flex-item>
  <flex-item></flex-item>
</flex-container>

Also, here’s a useful demo from the MDN justify-content page for testing space-evenly and other values in your browser. https://jsfiddle.net/gkrsr86n/

Leave a Comment