I come from a heavy div/float background to build responsive sites (e.g. Bootstrap 3, Foundation) and used Flex box briefly but have been attempting to use Grid everywhere since it's been really great at solving a number of problems. I seem to run into "simple" problems like this all too often and feel like I'm missing some basics, and can't find the answer in docs. Anyways, to the code.
Given a grid setup like so:
display: grid;
grid-auto-columns: max-content;
grid-auto-flow: column;
the content doesn't wrap to a new row once it's filled the width of its parent element. Ideally, I'd be able to have it auto-wrap without pre-defining exact pixel measurements such as grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
. This doesn't seem to work for my needs – I'd have to define multiple grid-template-columns
measurements for different viewports, and know what a good width is for the items inside the columns. I'd much rather say grid-auto-columns: max-content;
and then have items simply wrap to a new line.
Is this possible with grid? What am I missing/misunderstanding?
See Codepen with a full example demonstrating the problem: https://codepen.io/csdv/pen/OrbrzJ
I don't see how this is possible with the current iteration of CSS Grid.
As you've already discovered, you would at least need to define a fixed minimum width on the columns, in order to force a wrap at some point.
Unfortunately, with automatic repetitions, the minimum length cannot be
auto
,min-content
ormax-content
alone, because that is forbidden in the specification.Here's as close as you can get with Grid, as far as I can tell:
Flexbox may be a good alternative, as it seems to work with your requirements: