1. For unknown number of items in one direction. (toolbar of buttons works better in flex)
2. Row-wrapping items. (ie, the unknown number of items need to flow with the screen, grid _stinks_ horrible at this)
Grid:
1. Specific forced number of columns but unknown number of rows (the control is the ultimate, flexbox still does some loosey-goosey stuff where grid stays put). Also, when I know exactly what I want and where it will go and there is no ambiguity about it, grid is perfect. Rows are implicit (ie, any number of rows) This makes clean form building a dream...
2. Specific layout with areas. Think header, columns, footer all part of a unified design. Way, easier in grid than in flexbox.
Grid has grid-gap, which is vital for making some layouts easy. Flex only has grid-gap in Firefox, so you are stuck with flippin margins for item spacing in flexbox still, yuck.
Imagine you take a piece of paper, draw 4 vertical and horizontal lines dividing the page into 16 cells. Now when you place an element in any of these cells with width: 100%, they'll take exactly the width of the grid cell. It can't grow beyond that.
You have a lot of flexibility in choosing the width and height of each cell, but they are rigid.
In case of Flexbox, we don't specify any fixed lines to which the elements will size. Instead, we say general rules saying elements can grow to as much size is available, or stay at the beginning of the row etc. The layout is determined to a large extend by the elements we place rather than on a fixed set of gridlines.
Use CSS Grid for a grid - like a spreadsheet with multiple rows and columns.
Use Flexbox for a single row or column.
So you might have a 10x10 grid and in the cell in row 3 column 5 you might want to have a bunch of images that are all in a row. Use Flexbox to layout those images.
Grid: two dimensions and handling a known amount of reasonably sized elements