Areas covered by Flexbox which are difficult or impossible to achieve with Grid

Advantage Flexbox

Here are 13 areas where flexbox comes out ahead of Grid (Level 1):

  1. Centering wrapped items. Imagine five elements. Only four per row. The fifth one wraps. In a flex container, that fifth one can be easily aligned across the entire row with justify-content. Try centering this fifth item in a grid container. Not a simple matter.


  1. Wrapping. Flex items of variable lengths have no problem wrapping. Try getting grid items of variable lengths to wrap. Not possible.


  1. Auto margins. Flex items can be placed, packed and spaced away throughout their container with auto margins. Grid items, however, are confined to their tracks, greatly diminishing the utility of auto margins.


  1. Min, Max, Default – all in one. Setting the min-width, max-width and default width of a flex item is easy. How can all three lengths be set on a grid column or row? They can’t.


  1. Sticky footer / header. It’s just so much simpler and easier to pin a footer or header with flexbox.


  1. Consuming remaining space. A flex item can consume remaining space with flex-grow. Grid items have no such function.


  1. Shrinking. Flex has flex-shrink. Grid has… nothing.


  1. Limiting the column count in a dynamic layout. With flexbox, creating a wrapping two-column grid that remains fixed at two-columns across screen sizes is no problem. In Grid, despite having all these great functions, such repeat(), auto-fill and minmax(), it can’t be done.


  1. Creating space between first and last items. In a grid container with a variable number of columns, it’s not easy to add an empty first and last column. Margins, padding, columns and pseudo elements each have their limitations. It’s simple and easy with flexbox.


  1. An important benefit of the inline-level container is lost in some cases. If you have a Grid layout with a dynamic number of columns – meaning you cannot set the number of columns or a width for the container – then display: inline-grid doesn’t work. All items stack in a single column. This is because the default setting on grid-auto-columns is one column. In at least some cases, flexbox fixes the problem.


  1. Getting columns with author-defined grid areas to wrap without media queries. Let’s say you have a two-column grid containing grid areas that have set locations, and want the grid to automatically transition to a single column (with the second column wrapping below the first) on smaller screens. With grid, you would need a media query. The auto-fill and auto-fit functions will not work because the locations of grid areas have been specified. If you want to avoid a media query, flexbox’s flex-wrap function may be useful.


  1. There is no column-reverse function in CSS Grid. Getting items to populate a container starting from the bottom isn’t possible with a single rule applied to the grid container. With flexbox, however, the task is simple with flex-direction: column-reverse.


  1. The resize property on a grid item has no effect on the track. Unless a column or row track is set to auto (content-based sizing), resizing a grid item will overflow the track. Since flexbox doesn’t have column and row tracks, it may be a useful alternative.

Leave a Comment