DEV Community

Toshita Singh πŸ’œ
Toshita Singh πŸ’œ

Posted on

Better way to make equal sized columns using flexbox?

Is there a better way than the following to make equal sized columns no matter the content size using flexbox?

ul {
  display: flex;
}

li {
  flex-basis: 30%;
  flex-grow: 1;
}
Enter fullscreen mode Exit fullscreen mode

Image description

Challenge link (Layout two): https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox_skills

Oldest comments (2)

Collapse
 
dianale profile image
Diana Le • Edited

Flex-basis is probably one of the most confusing CSS properties (in combination with the flex-grow and flex-shrink), and if what you really want is 3 equal-width columns no matter what the content, then you are better off using grid instead of flexbox. However if you need to use flex, you can do:

ul {
  display: flex;
}
/* flex-grow: 1; flex-shrink: 1; flex-basis: 0 */
li {
   flex: 1 1 0;
}
Enter fullscreen mode Exit fullscreen mode

See developer.mozilla.org/en-US/docs/W... for more information.

You could also force a width. The default flex-basis value is auto, which means it checks for a width set, and since we're setting the width to 33%, that becomes the default flex-basis of the li tag:

ul {
  display: flex;
}
li {
   width: 33.33333333%;
}
Enter fullscreen mode Exit fullscreen mode
Collapse
 
joelbonetr profile image
JoelBonetR πŸ₯‡ • Edited

There are two different ways to reach what you expect,
1- Let the flex items to rearrange itself.
2- Defining the width yourself (with or without a calc).

The flex property is a shorthand property for the flex-grow, flex-shrink, and flex-basis properties.

Live example + code:

Hope it helps 😁

Once you understand Flex you'll find flex suitable for creating almost any piece of your UI. I personally prefer Flex to Grid.