Equal Width Columns in CSS Grid are Kinda Weird
Everything is flexible these days. If you write grid-template-columns: 200px 200px 200px;
, sure, you’d have equal-width columns, but that’s a rare day. What you usually mean is three columns of equal fluid width.
We’ve got fractional units for that, like grid-template-columns: 1fr 1fr fr;
. That’s usually fine, but they aren’t very sturdy like pixels. A large bit of media (or something like a
, or long bit of text like a URL) can cause those columns to stretch and that's almost never what you want. I've called that a grid blowout. The big idea is that the minimum width of a1fr
column isauto
, not0
. In other words,. those widened columns are just being as narrow as they know how to be!To fix that, we can do like:
.el { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); }
..or we could shorten it:
.el { grid-template-columns: repeat(3, minmax(0, 1fr)); }
It's a little awkward, but OK. You only gotta learn it once. You might not even ever run into this if you're always setting
max-width
on your media and handling line breaks.If you want to make your columns sturdy again without the
minmax
dance, you could use percentages rather than pixels and stay flexible. But what percentage do you use?33.33%
? That's fine as long as you don't have anygap
— otherwise, the gap will add to the width and overflow the container. You could fake gaps by putting padding inside the columns, but that's a little janky and uneven.This whole thing comes from a great tweet from Wes Bos:
I know a ton of people run into this — based on the number of emails I get about the grid blowout article — so it's worth kinda internalizing why all this is the way it is. It probably should be easier but I don't have any particular suggestions on how it could be.
The post Equal Width Columns in CSS Grid are Kinda Weird appeared first on CSS-Tricks.