I'm working with CSS grids to achieve a card grid layout.
But I don't quite know how to tweak the minmax()
statement to handle use cases where there aren't enough items to fill a row but still need them to look like cards!
If I replace the max 1fr value with a static 100px or I use a fractional 0.25fr it upsets the scaling at smaller media sizes.
.wrapper { display: grid; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); grid-column-gap: 17px; grid-row-gap: 25.5px; padding-bottom: 25.5px; } .card { background-color: #000; height: 100px; }
<div class="wrapper"> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> <div class="card"></div> </div>
And then if there are only a couple items
.wrapper { display: grid; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); grid-column-gap: 17px; grid-row-gap: 25.5px; padding-bottom: 25.5px; } .card { background-color: #000; height: 100px; }
<div class="wrapper"> <div class="card"></div> <div class="card"></div> </div>
The difference between using auto-fill and auto-fit for sizing columns is only noticeable when the row is wide enough to fit columns in it. If you're using auto-fit, the content will stretch to fill the entire row width whereas with auto-fill, the browser will allow empty columns to occupy space in the rows.
The browser will allow empty columns to occupy space in a row. The content will stretch to fill the entire row width. Grid layout remains fixed with or without items. Grid layout is not fixed ,the content stretch to fit entire width.
auto-fit behavior: “make whatever columns you have fit into the available space. Expand them as much as you need to fit the row size. Empty columns must not occupy any space. Put that space to better use by expanding the filled (as in: filled with content/grid items) columns to fit the available row space.”
What's a fraction (1FR)? A fraction or 1FR is one part of the whole. 1 fraction is 100% of the available space. 2 fractions are 50% each. So, 1FR is 1/2 of the available space.
The key is to use auto-fill
instead of auto-fit
.
When the repeat()
function is set to auto-fit
or auto-fill
, the grid container creates as many grid tracks (columns/rows) as possible without overflowing the container.
Note that as the grid container is being rendered, the presence of grid items is irrelevant. The container just lays out the columns and rows as instructed, creating grid cells. It doesn't care if the cells are occupied or unoccupied.
With auto-fit
, when there are not enough grid items to fill the number of tracks created, those empty tracks are collapsed.
Taking your code as an example, when there aren't enough grid items to fill all the columns in the row, those empty columns are collapsed. The space that was used by the empty columns becomes free space, which is then evenly distributed among existing items. By absorbing the free space, the items grow to fill the entire row.
With auto-fill
, everything is the same as auto-fit
, except empty tracks are not collapsed. They are preserved. Basically, the grid layout remains fixed, with or without items.
That's the only difference between auto-fill
and auto-fit
.
Here's an illustration of three grid items with auto-fill
:
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
Here's an illustration of three grid items with auto-fit
:
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
spec reference: https://www.w3.org/TR/css3-grid-layout/#auto-repeat
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With