如何通过 CSS Grid 布局实现精美的照片墙

1,267 阅读2分钟

1683028242230.png 在现代 Web 设计中,照片墙(photo grid)是一个非常流行的布局方式。通过 CSS Grid 布局,我们可以轻松实现一个精美的照片墙,并且使其响应式适配不同的屏幕尺寸。

接下来,我将为您提供一些实用的技巧和示例,以帮助您快速上手使用 CSS Grid 布局实现精美的照片墙。

  1. 定义网格容器

首先,我们需要定义一个网格容器,通过 display: grid 属性来声明一个 CSS Grid 布局。在这个容器中,我们可以使用 grid-template-columnsgrid-template-rows 属性来定义列数和行数。例如,下面的代码示例定义了一个具有三列和自适应行高的网格容器:

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

在这个示例中,我们使用 repeat() 函数定义了三列网格,每个列的大小都是相同的,因此我们可以使用 1fr 单位来表示它们。同时,我们还使用了 grid-auto-rows 属性来定义行高,minmax() 函数指定了最小行高和最大行高,这样就可以自适应不同的图片高度。最后,我们使用 gap 属性来定义图片之间的间距。

  1. 定义网格项

接下来,我们需要为网格容器中的每个网格项定义样式。在照片墙中,每个网格项都是一张图片,我们可以使用 grid-columngrid-row 属性来定义其在网格容器中的位置。例如,下面的代码示例定义了一个图片网格项:

.photo {
  grid-column: span 1;
  grid-row: span 1;
  object-fit: cover;
  width: 100%;
  height: 100%;
}

完整的代码示例:

<div class="photo-wall">
  <div class="photo photo-1"></div>
  <div class="photo photo-2"></div>
  <div class="photo photo-3"></div>
  <div class="photo photo-4"></div>
  <div class="photo photo-5"></div>
  <div class="photo photo-6"></div>
  <div class="photo photo-7"></div>
  <div class="photo photo-8"></div>
  <div class="photo photo-9"></div>
  <div class="photo photo-10"></div>
  <div class="photo photo-11"></div>
  <div class="photo photo-12"></div>
</div>
.photo-wall {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  grid-auto-rows: 200px;
  grid-gap: 20px;
  max-width: 1200px;
  margin: 0 auto;
}

.photo {
  background-size: cover;
  background-position: center;
}

.photo-1 {
  background-image: url('https://picsum.photos/id/10/800/800');
  grid-row: span 2;
}

.photo-2 {
  background-image: url('https://picsum.photos/id/20/800/800');
}

.photo-3 {
  background-image: url('https://picsum.photos/id/30/800/800');
  grid-row: span 2;
  grid-column: span 2;
}

.photo-4 {
  background-image: url('https://picsum.photos/id/40/800/800');
  grid-row: span 3;
}

.photo-5 {
  background-image: url('https://picsum.photos/id/50/800/800');
}

.photo-6 {
  background-image: url('https://picsum.photos/id/60/800/800');
}

.photo-7 {
  background-image: url('https://picsum.photos/id/70/800/800');
}

.photo-8 {
  background-image: url('https://picsum.photos/id/80/800/800');
}

.photo-9 {
  background-image: url('https://picsum.photos/id/90/800/800');
}

.photo-10 {
  background-image: url('https://picsum.photos/id/100/800/800');
}

.photo-11 {
  background-image: url('https://picsum.photos/id/110/800/800');
}

.photo-12 {
  background-image: url('https://picsum.photos/id/120/800/800');
  grid-row: span 2;
}

在这个示例中,定义一个包含所有照片的父容器,使用 display: grid 将其转换为网格布局。接着,使用 grid-template-columns 属性设置每列的宽度,我们使用了 repeat(auto-fit, minmax(300px, 1fr)),这意味着每列的宽度将自适应,并且不会小于 300px,但也不会超过父容器的宽度。

我们还使用 grid-auto-rows 属性设置每行的高度,并使用 grid-gap 属性设置单元格之间的间隙。最后,使用 max-widthmargin 属性限制照片