Reputation: 131
I have arrays of cards, card can take or 25% wide of screen, or 50%. So its objects like this : { name: 1, size: 25% }. After filtering array via js im getting a new array of cards and i need layout cards in grid in rows with wide 100%. So it can take 25 50 25, 50 50, 25 25 50 ...ect. So i think it can be make with grid-auto-flow property. But im not so good with grids yet.
.cards {
display: grid;
width: 100%;
grid-auto-flow: row dense;
}
.card {
border: 1px solid #d1d1d1;
width: 25%;
}
.card-wide {
width: 50%;
}
https://codesandbox.io/s/23moj6z09y
Upvotes: 1
Views: 134
Reputation: 272807
You can consider 1fr
for the unit and then tell if an element will span one or two columns:
.cards {
display: grid;
grid-template-columns:repeat(4,1fr);
grid-auto-flow:dense;
}
/*will take one column by default*/
.card {
background:red;
}
.card-wide {
grid-column:span 2; /*two column*/
background:green;
}
.cards > div {
min-height:50px;
border:1px solid;
}
<div class="cards">
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card-wide"></div>
<div class="card"></div>
<div class="card-wide"></div>
<div class="card"></div>
<div class="card-wide"></div>
<div class="card"></div>
<div class="card-wide"></div>
<div class="card"></div>
<div class="card"></div>
</div>
Upvotes: 1
Reputation: 42352
You can have a 4-column layout using grid-template-columns: repeat(4, 1fr)
and the card-wide
elements can occupy two columns using grid-column: span 2
- see demo below:
.cards {
display: grid;
width: 100%;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: 100px; /* set a row height for illustration */
grid-auto-flow: row dense; /* not compulsory here */
}
.card {
border: 1px solid #d1d1d1;
}
.card-wide {
grid-column: span 2; /* occupy two columns*/
}
<div class="cards">
<div class="card"></div>
<div class="card card-wide"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card card-wide"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card card-wide"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card card-wide"></div>
<div class="card"></div>
<div class="card card-wide"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card card-wide"></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 class="card card-wide"></div>
<div class="card"></div>
</div>
Upvotes: 1