You need to enable JavaScript to run this app. Vue-router实现CSS页面过渡时点击跳转元素左移偏移问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Vue-router实现CSS页面过渡时点击跳转元素左移偏移问题求助

问题原因

  • <transition>组件的mode属性语法错误:你写的mode:out-in是错误写法,正确应为mode="out-in"。错误写法相当于过渡模式未生效,进出动画会同时触发,两个路由组件短时间内同时在DOM中占用布局空间,互相挤压就会出现水平偏移。单元素页面布局宽度更小,挤压偏移幅度更大,完全匹配你遇到的现象。
  • 动画规则冲突:.fade-leave-active中同时定义了transition和animation两个控制透明度变化的规则,会导致动画时序异常。
  • transform初始值未明确:你的动画只声明了Y轴位移,未显式重置X轴位移,若页面组件本身有其他transform规则,动画过程中会出现非预期的X轴偏移。

修复方案

把相关代码修正为以下内容即可:

<template>
 <div>
   <!-- 修正mode属性的写法 -->
   <transition name="fade" mode="out-in">
     <router-view></router-view>
   </transition>
 </div>
</template>

<style>
/* 移除重复的transition规则,只保留animation */
.fade-leave-active {
 animation: fade-out 1s ease-out;
}

/* 显式声明transform初始值包含X轴为0,Vue2用户请将类名改为.fade-leave */
.fade-leave-from {
 opacity: 1;
 transform: translateX(0) translateY(0);
}

.fade-enter-active {
 animation: fade-in 2s ease-out;
}

/* 补充enter阶段初始状态,避免继承异常,Vue2用户请将类名改为.fade-enter */
.fade-enter-from {
 opacity: 0;
 transform: translateX(0) translateY(-300px);
}

@keyframes fade-out {
 0% {
   opacity: 1;
   /* 显式声明X轴位移为0 */
   transform: translateX(0) translateY(0);
 }
 60% {
   opacity: 0.4;
   transform: translateX(0) translateY(0);
 }
 100% {
   opacity: 0;
   transform: translateX(0) translateY(-300px);
 }
}

@keyframes fade-in {
 0% {
   opacity: 0;
   transform: translateX(0) translateY(-300px);
 }
 60% {
   opacity: 0;
 }
 100% {
   opacity: 1;
   transform: translateX(0) translateY(0);
 }
}
</style>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 05:18:00