Адаптивна решетка без отступи в CSS

Нека направим решетка, която ще има различен брой блокове в ред в зависимост от ширината на екрана. Ето пример за това, което трябва да получим:

Нека първо напишем HTML кода:

html<div class="parent">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
  <div class="child">5</div>
  <div class="child">6</div>
  <div class="child">7</div>
  <div class="child">8</div>
  <div class="child">9</div>
  <div class="child">10</div>
  <div class="child">11</div>
  <div class="child">12</div>
</div>

Сега нека добавим стилове за родителя на блоковете:

css.parent {
  display: flex;
  flex-wrap: wrap;
  width: 95%;
  margin: 50px auto;
}

Сега нека зададем стилове на самите блокове, без да задаваме тяхната ширина:

css.child {
  box-sizing: border-box;
  height: 100px;
  padding: 20px;
  border: 1px solid green;
}

Очевидно е, че ширината на блоковете трябва да бъде в проценти, за да могат блоковете плавно да променят ширината си при промяна на екрана. В същото време в определени точки на екрана трябва да променяме ширината на блоковете така, че в един ред да се побере определен брой от тези блокове.

Нека напишем код, който ще постави четири блока в ред:

css@media (min-width: 1000px) {
  .child {
    width: 25%;
  }
}

Сега нека поставим три блока в ред:

css@media (min-width: 700px) and (max-width: 1000px) {
  .child {
    width: 33.3333%;
  }
}

Сега нека поставим два блока в ред:

css@media (min-width: 400px) and (max-width: 700px) {
  .child {
    width: 50%;
  }
}

Един блок в ред:

css@media (max-width: 400px) {
  .child {
    width: 100%;
  }
}

Нека съберем целия код заедно:

css.parent {
  display: flex;
  flex-wrap: wrap;
  width: 95%;
  margin: 50px auto;
}
.child {
  box-sizing: border-box;
  height: 100px;
  padding: 20px;
  border: 1px solid green;
}

@media (max-width: 400px) {
  .child {
    width: 100%;
  }
}
@media (min-width: 400px) and (max-width: 700px) {
  .child {
    width: 50%;
  }
}
@media (min-width: 700px) and (max-width: 1000px) {
  .child {
    width: 33.3333%;
  }
}
@media (min-width: 1000px) {
  .child {
    width: 25%;
  }
}
Задание 1

Променете моя код така, че ширината на блоковете да се изчислява чрез функцията calc.

Задание 2

Направете решетка, която при намаляване на екрана първо да има четири елемента в ред, след това два елемента в ред, и накрая един елемент в ред.

Задание 3

Направете решетка, която при намаляване на екрана първо да има шест елемента в ред, след това три елемента в ред, и накрая един елемент в ред.