Размещение в виде каменной кладки

#css

#css

Вопрос:

У меня есть страница категории для интеграции, своего рода особенная.

Вот изображение :

введите описание изображения здесь

Как вы можете видеть, есть posts. Есть X сообщений.

Итак, сначала я бы управлял позициями, например, в 6-м первом примере (с n-м дочерним элементом), а затем я представил, как использую Javascript для определения числа от -200 до 200, чтобы случайным образом добавить transform: translateY или margin-top для публикации.

Вот что я сделал на данный момент :

 <div class="category-page__content">
   <div class="category-page__content__header">
       <h1>Newsroom</h1>
       <p>blablabla</p>
   </div>
   <div class="category-page__content__posts">
     <Post>
     <Post>
     <Post>
     <Post>
     ...
   </div>
</div>
  

Вот глобальная идея HTML.

Затем я сделал это в CSS (SCSS здесь) :

 .category-page__content__posts {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-column-gap: 60px;
  transform: translateY(-350px);
  > * {
   amp;:nth-child(2) {
     margin-top: 200px;
   }
   amp;:nth-child(3) {
     margin-top: 770px;
   }
   amp;:nth-child(4) {
     margin-top: 415px;
   }
 }
}
  

Но я чувствую, что это немного неаккуратно.

Если у вас есть идея получше, я был бы рад ее услышать.

И, как я уже сказал, для других сообщений, которые появятся после 6 элементов (здесь 4), я представлял, что размещу их с помощью Javascript

Ответ №1:

Flexbox для направления столбцов — одно из решений. Удалите все nth-child правила выбора в вашем CSS и измените CSS-оболочку на это. Достигается эффект при достаточном количестве записей.

 .category-page__content__posts { 
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
  max-height: 100vh; // whatever max-height you want
  width: 100%;
}