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

如何通过CSS Transition和Transform实现非悬停隐藏文本、悬停时平滑滑入显示的效果

如何通过CSS Transition和Transform实现非悬停隐藏文本、悬停时平滑滑入显示的效果

嘿,完全可以只用CSS实现你要的效果,根本不用jQuery!我来帮你调整代码搞定这个需求,顺便给你理清楚关键细节:

首先,你核心的思路是对的——用transform: translateY()配合过渡动画控制元素的显示/隐藏,但有几个关键细节你没注意到,导致效果达不到预期:

核心修改点

  • 容器溢出隐藏:必须给.photographer_caption加上overflow: hidden,这样非悬停时向下移出的文本就会被容器裁切掉,不会在页面上露出来,这是实现“隐藏”的核心!
  • 修正布局逻辑:你之前用的margin-bottom: -20px容易导致布局混乱,建议改用padding来控制元素内部空间,让排版更稳定。
  • 修复HTML结构:你原来的HTML标签嵌套有错误(比如span.caption的闭合位置不对),结构乱了CSS样式也会跟着出问题,得先理顺。

修改后的完整代码

HTML部分

<div class="figure">
  <img class="figure-image" src="https://placecats.com/poppy/300/200" alt="">
  <div class="photographer_caption">
    <svg xmlns="http://www.w3.org/2000/svg" width="16.758" height="14.364" viewbox="0 0 16.758 14.364">
      <path id="Path_15460" data-name="Path 15460" d="M27.386,26l-.9,2.394H24.394A2.389,2.389,0,0,0,22,30.788V37.97a2.389,2.389,0,0,0,2.394,2.394h11.97a2.389,2.389,0,0,0,2.394-2.394V30.788a2.389,2.389,0,0,0-2.394-2.394H34.269L33.371,26Zm2.992,4.189a4.189,4.189,0,1,1-4.189,4.189A4.2,4.2,0,0,1,30.379,30.189Zm0,1.8a2.394,2.394,0,1,0,2.394,2.394A2.38,2.38,0,0,0,30.379,31.985Z" transform="translate(-22 -26)" fill="#fff"/>
    </svg>
    <span class="caption">Caption Caption</span>
    <span class="photographer_name">摄影师名字</span>
  </div>
</div>

CSS部分

.figure {
  position: relative;
}

.figure-image {
  width: 100%;
  display: block; /* 去掉图片下方的默认空隙 */
}

.photographer_caption {
  position: absolute;
  bottom: 0;
  left: 15px;
  z-index: 100;
  display: flex;
  flex-direction: column; /* 让SVG和文本垂直排列 */
  justify-content: center;
  align-items: center;
  border-radius: 2px;
  color: #fff;
  overflow: hidden; /* 关键:隐藏溢出的元素 */
}

.photographer_caption svg {
  background: #143c48;
  padding: 6px;
  width: 35px;
  height: 28px;
  margin-bottom: 10px;
}

.photographer_caption .caption,
.photographer_caption span.photographer_name {
  transform: translateY(100%); /* 非悬停时向下移出容器 */
  transition: .25s ease;
  background: #143c48;
  padding: 8px 12px; /* 用padding优化点击区域和排版 */
  width: 100%;
  text-align: center;
}

/* 悬停时把元素移回原位 */
.photographer_caption:hover .caption,
.photographer_caption:hover span.photographer_name {
  transform: translateY(0);
}

效果说明

  • 非悬停状态:.caption和.photographer_name会被向下移出.photographer_caption容器,加上overflow: hidden后完全不可见,只有相机SVG显示在图片上。
  • 悬停状态:鼠标放到相机SVG(或者整个.photographer_caption区域)时,文本会以0.25秒的平滑动画向上滑入,完全覆盖在图片下方,和你要的效果一致。

关于你问的z-index:你已经给.photographer_caption设了z-index:100,这个数值足够让它覆盖在默认z-index为0的图片上方,完全没问题,不需要额外调整啦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 11:15:27