CSS Grid Flow Different block sizes
Is it possible to create a CSS grid that allows blocks of content of varying sizes that do not have fixed starting positions with other blocks flowing around?
Here's my test
Html
<div class="grid">
<div class="item">Small 1</div>
<div class="item">Small 2</div>
<div class="item large">Large 1</div>
<div class="item large">Large 2</div>
<div class="item">Small 3</div>
<div class="item">Small 4</div>
<div class="item">Small 5</div>
<div class="item">Small 6</div>
<div class="item">Small 7</div>
<div class="item">Small 8</div>
<div class="item">Small 9</div>
<div class="item">Small 10</div>
<div class="item">Small 11</div>
<div class="item">Small 12</div>
<div class="item">Small 13</div>
</div>
CSS
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
body {
padding: 5em;
}
.grid {
display: grid;
grid-template-columns: 25% 25% 25% 25%;
grid-gap: 1em 1em;
grid-auto-flow: row dense;
}
.item {
background: rgba(0, 0, 0, 0.1);
border-radius: 0.25em;
padding: 2em;
}
.large {
background: rgba(255, 0, 0, 0.25);
grid-column: auto / span 2;
grid-row: auto / span 2;
}
Fiddle: https://jsfiddle.net/bLjzscLs/
source to share
Of course you can! Just add height: <insert value that above 100px here>
to your CSS below .large
and find the correct values ββto achieve the expected result.
Example:
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
body {
padding: 5em;
}
.grid {
display: grid;
grid-template-columns: 25% 25% 25% 25%;
grid-gap: 1em 1em;
grid-auto-flow: row dense;
}
.item {
background: rgba(0, 0, 0, 0.1);
border-radius: 0.25em;
padding: 2em;
}
.large {
background: rgba(255, 0, 0, 0.25);
grid-column: auto / span 2;
grid-row: auto / span 2;
height: 200px;
}
<div class="grid">
<div class="item">Small 1</div>
<div class="item">Small 2</div>
<div class="item large">Large 1</div>
<div class="item large">Large 2</div>
<div class="item">Small 3</div>
<div class="item">Small 4</div>
<div class="item">Small 5</div>
<div class="item">Small 6</div>
<div class="item">Small 7</div>
<div class="item">Small 8</div>
<div class="item">Small 9</div>
<div class="item">Small 10</div>
<div class="item">Small 11</div>
<div class="item">Small 12</div>
<div class="item">Small 13</div>
</div>
source to share
In fact, your code will work as you expected. Try adding a large paragraph in the "big 1" area with many lines and you can see the result for yourself.
<div class="item large">
Add a large paragraph with as many new lines as possible and check the output</div>
Anyway, you can also use the code provided here -> https://jsfiddle.net/anoopmnm/dopt5s4y/
Or Just increase the value from grid-row: auto / span 2;
to grid-row: auto / span 11;
in your stylesheet
source to share