You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CSS3/SCSS实现图片画廊的缩放+文本显示双过渡效果

实现悬停缩放+显示隐藏文本的图片画廊(纯CSS/SCSS)

没问题,咱们完全可以用CSS3或者SCSS实现你要的效果——默认只显示图片,鼠标悬停时图片缩放,同时触发隐藏文本的显示。我把两个功能整合好了,直接看代码和关键细节:

完整实现代码

HTML结构

首先调整每个画廊项的结构,让每个容器同时包含图片和文本元素:

<div class="div-table">
  <div class="image-item">
    <img src="https://placeimg.com/400/400/nature" />
    <div class="item-text">自然风景</div>
  </div>
  <div class="image-item">
    <img src="https://placeimg.com/400/400/people" />
    <div class="item-text">人像摄影</div>
  </div>
  <div class="image-item">
    <img src="https://placeimg.com/400/400/architecture" />
    <div class="item-text">建筑美学</div>
  </div>
  <div class="image-item">
    <img src="https://placeimg.com/400/400/animals" />
    <div class="item-text">萌宠日常</div>
  </div>
  <div class="image-item">
    <img src="https://placeimg.com/400/400/animals" />
    <div class="item-text">野生动物</div>
  </div>
  <div class="image-item">
    <img src="https://placeimg.com/400/400/sepia" />
    <div class="item-text">复古色调</div>
  </div>
  <div class="image-item">
    <img src="https://placeimg.com/400/400/grayscale" />
    <div class="item-text">黑白质感</div>
  </div>
  <div class="image-item">
    <img src="https://placeimg.com/400/400/tech" />
    <div class="item-text">科技元素</div>
  </div>
</div>

CSS实现(兼容普通CSS)

.div-table {
  display: flex;
  flex-wrap: wrap;
  width: 400px;
  /* 给画廊加相对定位,防止缩放图片溢出乱跑 */
  position: relative;
  overflow: visible;
}

.image-item {
  flex: 0 0 100px;
  height: 100px;
  cursor: pointer;
  transition: 1s transform;
  /* 关键:给文本提供定位上下文 */
  position: relative;
  /* 隐藏文本溢出,避免默认状态下文本露出来 */
  overflow: hidden;
}

.image-item img {
  width: 100%;
  height: 100%;
  object-fit: cover; /* 保证图片比例正确,不会拉伸 */
}

/* 隐藏文本的默认样式 */
.item-text {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 8px;
  background-color: rgba(0,0,0,0.7);
  color: white;
  text-align: center;
  /* 初始隐藏:透明度0+向下偏移,配合过渡更自然 */
  opacity: 0;
  transform: translateY(100%);
  transition: opacity 0.3s ease 0.7s, transform 0.3s ease 0.7s;
  /* 延迟0.7s触发,等图片缩放完成后再显示文本 */
}

/* 悬停时的效果 */
.image-item:hover {
  z-index: 2;
  transform: scale(2, 2);
}

.image-item:hover .item-text {
  opacity: 1;
  transform: translateY(0);
}

/* 保留你原来的缩放原点设置,确保每个图片从正确位置放大 */
.image-item:nth-child(1) { transform-origin: 0 0; }
.image-item:nth-child(2) { transform-origin: 33.3% 0; }
.image-item:nth-child(3) { transform-origin: 66.6% 0; }
.image-item:nth-child(4) { transform-origin: 100% 0; }
.image-item:nth-child(5) { transform-origin: 0 33.3%; }
.image-item:nth-child(6) { transform-origin: 33.3% 33.3%; }
.image-item:nth-child(7) { transform-origin: 66.6% 33.3%; }
.image-item:nth-child(8) { transform-origin: 100% 33.3%; }

SCSS简化版本(更高效)

如果用SCSS,我们可以用循环自动设置所有item的transform-origin,不用重复写:

.div-table {
  display: flex;
  flex-wrap: wrap;
  width: 400px;
  position: relative;
  overflow: visible;
}

.image-item {
  flex: 0 0 100px;
  height: 100px;
  cursor: pointer;
  transition: 1s transform;
  position: relative;
  overflow: hidden;

  img {
    width: 100%;
    height: 100%;
    object-fit: cover;
  }

  .item-text {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    padding: 8px;
    background-color: rgba(0,0,0,0.7);
    color: white;
    text-align: center;
    opacity: 0;
    transform: translateY(100%);
    transition: opacity 0.3s ease 0.7s, transform 0.3s ease 0.7s;
  }

  &:hover {
    z-index: 2;
    transform: scale(2, 2);
    
    .item-text {
      opacity: 1;
      transform: translateY(0);
    }
  }
}

// 用循环自动设置每个item的缩放原点
@for $i from 1 through 8 {
  $row: floor(($i - 1) / 4); // 计算当前行(0-1)
  $col: ($i - 1) % 4; // 计算当前列(0-3)
  $originX: $col * 33.3%;
  $originY: $row * 33.3%;
  
  .image-item:nth-child(#{$i}) {
    transform-origin: #{$originX} #{$originY};
  }
}

关键细节解释

  • 结构调整:每个.image-item作为图片和文本的容器,用position: relative让文本可以绝对定位在图片上方
  • 文本延迟显示:给文本的过渡加了0.7s延迟,刚好等图片1s的缩放动画接近完成时再滑入,符合你要的“缩放完成后显示文本”的需求
  • 过渡联动:把图片的缩放和文本的显示动画都绑定在.image-item:hover上,保证悬停时两个效果同步触发
  • 图片适配:加了object-fit: cover确保图片在容器内不会拉伸变形,保持美观
  • 层级控制:悬停时给.image-item加z-index:2,让放大的图片覆盖在其他图片上方

内容的提问来源于stack exchange,提问作者airsoftsoldrecn9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:34:04