JSFiddle - React, Tailwind, and code Playground

by reginna

HTML

<div class="grid-container">
  <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>

CSS

.grid-container {
  padding: 20px;
  display: grid;
  grid-gap: 20px;
  grid-auto-rows: 1fr;
  grid-template-columns: repeat(2, 1fr);
  counter-reset: albumList;
}

.item {
  position: relative;
  background: #ccc;
  counter-increment: albumList;
}

/* Number */
.item:before {
  content: counter(albumList);
  position: absolute;
  z-index: 5;
  left: 50%;
  top: 50%;
  padding: 10px;
  font-size: 40px;
  color: #000000;
  transform: translate(-50%, -50%);
}

/* Square */
.item:after {
  content: '';
  display: block;
  padding-top: 100%;
}

@media screen and (min-width: 40em) and (max-width: 63.99875em) {
  /* 640 ~ 1023 */
  .grid-container {
    grid-template-columns: repeat(3, 1fr);
  }

  .item:nth-child(6n + 1) {
    grid-column: span 2 / 3;
    grid-row: span 2;
  }
  .item:nth-child(6n + 6) {
    grid-column: span 2 / 3;
    grid-row: span 2;
    grid-column: 2 / 4;
  }
  .item:nth-child(6n + 5) {
    grid-column: span 1 / 2;
  }
}

@media print, screen and (min-width: 64em) {
  /* 1024+ */
  .grid-container {
    grid-template-columns: repeat(4, 1fr);
  }

  .item:nth-child(10n + 1) {
    grid-column: span 2 / 3;
    grid-row: span 2;
  }
  .item:nth-child(10n) {
    grid-column: span 2 / 3;
    grid-row: span 2;
    grid-column-end: 5;
  }
  .item:nth-child(10n + 8) {
    grid-column-start: 1;
  }
}