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

如何仅用CSS实现菜单Hover触发动画后暂停,离开后重置?

纯CSS实现Hover菜单时保持功能标题显示的解决方案

你需要的是hover菜单图标时让功能标题平滑淡入并保持显示,直到hover结束,核心问题是默认CSS动画播放后会回到初始状态,下面提供两种纯CSS解决方法:

方法1:修正动画属性(保留fadeIn动画)

如果想继续使用你写的fadeIn动画,只需给动画加上forwards属性,让元素停在动画最后一帧,再配合离开时的过渡效果:

示例代码

假设你的HTML结构是这样的:

<div class="sub-menu-bar">
  <div class="menu-item">
    <span class="menu-icon">⚙️</span>
    <span class="menu-title">设置</span>
  </div>
</div>

对应的CSS:

/* 初始状态:标题透明隐藏 */
.sub-menu-bar .menu-item .menu-title {
  opacity: 0;
  /* 离开时添加淡出过渡 */
  transition: opacity 0.3s ease;
}

/* hover时触发淡入动画,forwards让状态保持到hover结束 */
.sub-menu-bar .menu-item:hover .menu-title {
  animation: fadeIn 0.3s ease forwards;
}

/* 淡入动画定义 */
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

animation-fill-mode: forwards是关键,它强制元素在动画结束后保持最后一帧的样式,直到hover状态消失,此时过渡效果会触发平滑淡出。

方法2:改用Transition过渡(更简洁高效)

对于hover触发的显示/隐藏场景,transition比@keyframes更轻量化,代码也更简单:

.sub-menu-bar .menu-item .menu-title {
  opacity: 0;
  visibility: hidden; /* 可选:隐藏后不占用布局空间 */
  /* 同时过渡透明度和可见性,保证动画同步 */
  transition: opacity 0.3s ease, visibility 0.3s ease;
}

.sub-menu-bar .menu-item:hover .menu-title {
  opacity: 1;
  visibility: visible;
}
  • 加visibility: hidden可以避免标题透明后仍能被点击的问题
  • 调整0.3s可以控制动画的快慢

额外提示

  • 确保标题元素的初始状态和hover状态的属性匹配(比如都设置opacity)
  • 如果标题需要调整位置,可以配合position: absolute等布局属性
  • 两种方法都不需要JavaScript,完全符合你的性能要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:20:41