How can I work around the issue of the flexbox arrangement not staying in columns when using 'space around', but still keeping the items centered when they wrap in a smaller view?

Published on
September 22, 2023

To work around the issue of the flexbox arrangement not staying in columns when using 'space around', but still keeping the items centered when they wrap in a smaller view, you can use a combination of flexbox properties and media queries. Follow these steps:

  1. Set up your flex container: Wrap the items you want to arrange in columns inside a parent container element. Apply display: flex; flex-wrap: wrap; to the container to make the items wrap onto new lines when necessary.
  2. Set the flex properties of the items: Apply flex: 0 0 calc(33.33% - 1rem); to each item (adjust the width percentage as needed). This will ensure that each item takes up one-third of the available space, with a 1rem margin between them.
  3. Center the items: Apply justify-content: center; to the container to horizontally center the items within each flex line. This will be the default behavior when the items are arranged in a row.
  4. Create a media query: Use a media query to target smaller viewports where the items wrap onto new lines. For example: @media (max-width: 767px) { ... }.
  5. Adjust the flex properties in the media query: Inside the media query, override the flex property of the items to make them take up the entire width of the container. For example: flex: 0 0 100%;.
  6. Center the items in the media query: Also inside the media query, apply justify-content: center; to the container to center the items vertically within each flex line, since they are now stacked.
  7. Add additional styling as needed: Customize the margins, paddings, and any other styling properties to achieve the desired visual result for both the default and smaller viewport scenarios.

By following these steps, you can work around the issue of the flexbox arrangement not staying in columns when using 'space around' while still keeping the items centered when they wrap in a smaller view.

Example code:

.container {  display: flex;  flex-wrap: wrap;  justify-content: center;}.item {  flex: 0 0 calc(33.33% - 1rem);  margin: 0.5rem;}@media (max-width: 767px) {  .item {    flex: 0 0 100%;  }    .container {    justify-content: center;  }}

Additional resources:

Potential questions users may search for:

  • How to arrange flexbox items in columns with space around?
  • How to center flexbox items when they wrap in a smaller viewport?
  • How to make flexbox items stay in columns with space around but center vertically when they wrap?