CSS 通过元素映射时的网格布局

CSS Grid layout when mapping through elements

我想实现类似这样的响应式网格布局:

我正在使用 map() 映射来自数据库的一系列帖子并显示所有这些帖子,但我不确定如何使用我的代码制作网格布局。我目前有一个简单的网格布局,每行有 3 列(因此每行有 3 张卡片)但是我想要中间列中的 3 张小卡片,如图中所示。为了做到这一点,我通常会创建另一个嵌套的 div 并适当地设置它的样式。

有没有一种方法可以定位数组中的某些帖子,或者我是否需要创建另一个包含某些帖子的函数?

如何使用我的代码创建此网格布局?

 displayPost = (posts) => {
        if (!posts.length) return null;
        return posts.map((post, index) => (
            <Link to={`/post/${post._id}`}>
            <div className="card" key={index}>
            <h3 className="posts-title">{post.title}</h3>
            <p className="posts-body">{post.body}</p>
            <p>{post.date}</p>
            <p>{post.author}</p>
            </div>
            </Link>
        ))
    }


    render() {
        return (
         <div className="grid">
           {this.displayPost(this.state.posts)}
           </div>
        )
    }

}

.grid {
 display: grid;
 grid-template-columns: repeat(3, 1fr);
 grid-gap: 1rem;
 grid-auto-rows: minmax(50px, auto);
}

您可以通过以下顺序实现您想要的网格布局:

1 2 3
1 4 3
1 5 3

...使用这些附加规则:

.card:nth-child(5n + 1) {
  grid-row-end: span 3;
}

.card:nth-child(5n + 3) {
  grid-row-end: span 3;
}

每组五个元素将重复此布局。