Skip to content

CSS 图片廊

图片廊(Image Gallery) 指多张图片以网格形式展示,并可配合悬停效果(放大、遮罩、标题等)。用 CSS GridFlex 做网格,再给图片容器设尺寸、overflow、过渡即可。

基本 HTML 结构

html
<div class="gallery">
  <div class="item">
    <img src="1.jpg" alt="图片1">
    <p class="caption">说明文字</p>
  </div>
  <div class="item">
    <img src="2.jpg" alt="图片2">
    <p class="caption">说明文字</p>
  </div>
  <!-- 更多... -->
</div>

用 Grid 做等分网格

css
.gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 16px;
  padding: 16px;
}

.gallery .item {
  overflow: hidden;
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}

.gallery img {
  width: 100%;
  height: 200px;
  object-fit: cover;
  display: block;
}

.gallery .caption {
  padding: 8px 12px;
  margin: 0;
  font-size: 14px;
}
  • repeat(auto-fill, minmax(200px, 1fr)):每列至少 200px,自动填满并均分剩余空间。
  • object-fit: cover:图片按比例填满容器,多出的裁剪。

悬停放大效果

css
.gallery .item {
  overflow: hidden;
}

.gallery img {
  transition: transform 0.3s ease;
}

.gallery .item:hover img {
  transform: scale(1.05);
}

悬停显示遮罩与文字

给 .item 加 position: relative,说明文字用 position: absolute 放在底部,默认在下方或透明,悬停时滑入或淡入:

css
.gallery .item {
  position: relative;
  overflow: hidden;
}

.gallery .caption {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 12px;
  background: rgba(0,0,0,0.6);
  color: white;
  margin: 0;
  transform: translateY(100%);
  transition: transform 0.3s;
}

.gallery .item:hover .caption {
  transform: translateY(0);
}

小结

  • Grid(或 Flex)做多列网格;grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)) 可做响应式。
  • 图片 width: 100%object-fit: cover,容器设固定高度或比例。
  • 悬停效果:transform: scale() 放大,或 position: absolute + transform/opacity 做遮罩、说明文字。

下一节学习 CSS 图像透明/不透明