Reputation: 884
I'm trying to create the following scenario in a CSS-Grid:
[ header ]
- spans full width of first row
[cell]
[cell]
... - cells that have a minmax width of 450px until 2 frames fit.
If the browser is stretched, you have more cells horizontally, but if the browser is reduced to only fit 1 cell, it should show:
[header]
[cell]
[cell]
...
I'm not getting it to turn cells into one per row if the width is low enough unless I use @media... tricks. If I don't make [header] span multiple cells, all works correctly though.
Here's my CSS
.grid
{
display: grid;
grid-template-columns: repeat(auto-fill, minmax(450px, 1fr));
grid-gap: 1rem;
max-width: 1000px;
margin: auto;
}
.header
{
grid-column-start: 1;
grid-column-end: 3;
grid-row-start:1;
grid-row-end:1;
}
And here my HTML:
<div class="grid">
<div class="header">
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Esse aliquid laboriosam minima ex praesentium recusandae reprehenderit unde sit tempore atque aut commodi quae expedita corrupti, dignissimos architecto. Eius, maiores ad?
</div>
<div>
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Esse aliquid laboriosam minima ex praesentium recusandae reprehenderit unde sit tempore atque aut commodi quae expedita corrupti, dignissimos architecto. Eius, maiores ad?
</div>
<div>
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Esse aliquid laboriosam minima ex praesentium recusandae reprehenderit unde sit tempore atque aut commodi quae expedita corrupti, dignissimos architecto. Eius, maiores ad?
</div>
</div>
If I ommit the .header CSS all works fine, except that the header cell is not divided over 2 cells, but resizing works great. If I use .header, and I make it small, the first cell is always kept at 450px and the cell next to it becomes very small until eventually I get a scrollbar.
How can I fix this using pure CSS-Grid alone?
Upvotes: 0
Views: 88
Reputation: 272648
You should consider -1
for grid-column-end
. When using 3
you will force the grid to always create 2 columns but using -1 you will instruct the grid to always end at the last column (the number of columns will be based on the template)
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(450px, 1fr));
grid-gap: 1rem;
max-width: 1000px;
margin: auto;
}
.header {
grid-column-start: 1;
grid-column-end: -1;
}
<div class="grid">
<div class="header">
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Esse aliquid laboriosam minima ex praesentium recusandae reprehenderit unde sit tempore atque aut commodi quae expedita corrupti, dignissimos architecto. Eius, maiores ad?
</div>
<div>
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Esse aliquid laboriosam minima ex praesentium recusandae reprehenderit unde sit tempore atque aut commodi quae expedita corrupti, dignissimos architecto. Eius, maiores ad?
</div>
<div>
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Esse aliquid laboriosam minima ex praesentium recusandae reprehenderit unde sit tempore atque aut commodi quae expedita corrupti, dignissimos architecto. Eius, maiores ad?
</div>
</div>
Upvotes: 1