2

Is there a way to specify how many items should be on each row using a CSS grid?

For example, first row: 4 items; second row: 5 items; third row: 3 items;

I've read this https://developer.mozilla.org/en-US/docs/Web/CSS/grid but I didn't found the solution...

#container {
  display: flex;
  align-items: center;
  justify-content: center;
}

#innerContainer {
  grid-template-columns: repeat(4,minmax(0px,1fr));
  grid-column-gap: 30px;
  grid-row-gap: 30px;
  align-items: center;
  text-align: center;
  justify-content: center;
  display: grid;
}

.item {
  width: 90px;
  height: 90px;
  background-color: blue;
}
<div id="container">
  <div id="innerContainer">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
  </div>
</div>

1 Answers1

3

If you want to use grid, you will need to start from a number of columns that can be divide into each of items per row requireement.

Here 3,4 and 5 can divide 60.

#container {
  display: flex;
  align-items: center;
  justify-content: center;
  border:solid;
}

#innerContainer {
  display: grid;
  grid-template-columns: repeat(60, 1fr);
  margin:-30px;
}

.item {
  min-width: 90px;
  width: calc(100% - 60px);/* remove the gap */
  background-color: blue;
  margin: 30px;/* set the gutter here */
  grid-column: auto / span 15;
  display: flex;
}

.item:before {
  content: '';
  padding-top: 100%;
  flex-basis: 0%;
}

.item:nth-child(4)~.item {
  grid-column: auto / span 12
}

.item:nth-child(9)~.item {
  grid-column: auto / span 20
}
<div id="container">
  <div id="innerContainer">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
  </div>
</div>
G-Cyrillus
  • 101,410
  • 14
  • 105
  • 129