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

实现鼠标移出时带自定义transition效果的导航栏悬停动效

问题原因

你无法实现鼠标移出后过渡效果的核心问题是过渡延迟规则只在:hover状态下生效,鼠标离开后延迟规则直接消失,导致文字样式立刻复位,和背景滑动的时序完全不匹配,和目标效果逻辑相反。

修复后的完整SCSS代码

.nav-item {
  display: flex;
  flex-direction: row;
  transform: skewX(-25deg);
  border-right: 1px solid #9e8451;
  margin: 0 0.5rem;
  position: relative; /* 缺失的关键属性:伪元素绝对定位需要父级相对定位 */
  overflow: hidden; /* 防止伪元素滑入前在外部异常显示 */

  .nav-link {
    font-weight: 500;
    color: #c09f62 !important;
    font-size: 1.15rem;
    text-transform: uppercase;
    transform: skewX(25deg);
    padding: 1.25rem 1.85rem !important;
    /* 默认状态过渡规则:等背景滑完1s再复位文字样式 */
    transition: 0s color, 0s text-shadow;
    transition-delay: 1s;
  }

  &::after {
    content: "";
    width: 100%;
    background: #312612;
    transition: all 1s linear;
    position: absolute;
    right: -100%; /* 调整为-100%即可,冗余的-200%会增加无效滑动距离 */
    top: 0;
    height: 100%;
    display: block;
    z-index: -1;
  }

  &.active,
  &:hover {
    font-weight: bold;

    &::after {
      right: 0;
    }

    .nav-link {
      color: #f8d696 !important;
      text-shadow: 0 0 15px #f2c87b;
      /* 悬停状态过渡规则:背景滑完1s加少量冗余后再切换文字样式 */
      transition-delay: 1.15s;
      font-weight: bold;
    }
  }
}

效果说明

修改后无需额外JS代码,纯CSS即可实现和目标GIF完全一致的交互:

  • 鼠标悬停时:斜切背景先从右侧滑入,滑动完成后文字变亮并触发发光效果
  • 鼠标移出时:斜切背景先向右侧滑出,滑动完成后文字恢复初始样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:09:02