Формирование списка по высоте блока в React

Рейтинг: 0Ответов: 1Опубликовано: 11.06.2023

Всем доброго времени суток! Впервые столкнулся с таким требованием от заказчика. Он хочет, чтобы списки формировались в зависимости от высоты блока. Скриншот задумки дизайнера прикрепил ниже.

Формирование списка

Заранее благодарю за помощь!

Ответы

▲ 0

Так как не вижу кода который Вы САМИ сделали, то приведу пример реализации на чистом css, как в принципе можно сделать такое с помощью grid. В реакт и под ваши нужды сделаете сами. Данный пример сделан для 7 элементов. Если добавить 8 и больше стили надо править чтобы сохранились пропорции как на скриншоте. Идея данного примера в том, что изменяя размер контейнера, он будет всегда сохранять данные пропорции, как и написано в вопросе. Есть готовая библиотека которая делает похожую сетку красивую и с анимациями и прочим, только не помню её название, но найти можно. Легче воспользоваться ей.

А так в качестве домашнего задания. Делаете функцию которая читает кол-во элементов списка загруженного, а далее на основе данного кол-ва высчитывает grip-column и grid-row для каждого элемента и подставляет в style элементов при выводе.

Если же у вас такой список с пагинацией, например на странице может выводиться 10 элементов, то просто измените css для 10 элементов 1 раз и всё. Далее при смене страницы, у вас всегда будет валидный вывод

.container {
  display: grid;
  grid-template-columns: auto auto auto;
  grid-template-rows: auto auto;
  grid-auto-flow: row;
  border: 1px solid;
  height: 400px;
  width: 400px;
  gap: 30px;
}

.item {
  display:flex;
  align-items: center;
  justify-content: center;
  font-size: 40px;
  color: white;
}

.item-main {
  grid-row: span 2;
}

.item1 {
  background-color: yellow;
  grid-row: span 5;
}

.item2 {
  background-color: green;
}

.item3 {
  background-color: purple;
  grid-row: span 3;
}

.item4 {
  background-color: blue;
}

.item5 {
  background-color: lightgreen;
  grid-column: 3;
  grid-row: span 4;
}

.item6 {
  background-color: brown;
}

.item7 {
  background-color: lightblue;
}
<div class="container">
  <div class="item item1">1</div>
  <div class="item item-main item2">2</div>
  <div class="item item3">3</div>
  <div class="item item-main item4">4</div>
  <div class="item item5">5</div>
  <div class="item item-main item6">6</div>
  <div class="item item-main item7">7</div>
</div>