By definition, CSS grid doesn't allow differing numbers of columns per row. With a little bit of planning, you could achieve the effect with flexbox. See the simple example below. Here, I used a basic flex-wrap
with constant margins, and adjusted a side margin every nth
item.
You might want to enter full screen mode and try adjusting browser window.
.container {
display: flex;
flex-wrap: wrap;
justify-content: center;
width: 330px;
padding: 5px;
background-color:#333;
}
.item {
width: 100px;
height: 100px;
margin: 5px;
border-radius: 100px;
background-color: #bada55;
display: flex;
justify-content: center;
align-items: center;
}
.item:nth-of-type(5n) {
margin-right: 10px;
}
.item:first-of-type {
margin-right: 5px;
}
@media screen and (max-width: 800px) {
.container {
width: 220px;
}
.item:nth-of-type(5n) {
margin-right: 5px;
}
.item:nth-of-type(3n) {
margin-right: 10px;
}
}
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
<div class="item">10</div>
<div class="item">11</div>
<div class="item">12</div>
<div class="item">13</div>
<div class="item">14</div>
<div class="item">15</div>
<div class="item">16</div>
<div class="item">17</div>
<div class="item">18</div>
</div>