先看效果:

<div class="nav">...div>
<div class="dropdown-content">...div>
.nav {
position: relative;
}
.dropdown-content {
position: absolute;
width: 100%; // 拉满
}
使用的是vue的 transition组件以及鼠标事件@mouseenter 和 @mouseleave
.dropdown-enter-active {
animation: expand-contract 1s ease;
}
.dropdown-leave-active {
animation: expand-contract 1s ease reverse;
}
// 收缩展开动画
@keyframes expand-contract {
0% {
overflow: hidden;
opacity: 0;
max-height: 0;
}
100% {
max-height: 300px; // 大于等于下拉菜单的高度
opacity: 1;
}
}
// 菜单内容变化动画
@keyframes menu {
0% {
opacity: 0;
transform: translateX(50%);
}
100% {
opacity: 1;
transform: translateX(0%);
}
}
优点:
缺点:
案例代码
<template>
<div class="app-container">
<div class="nav" ref="navRef">
<div class="nav-item" @mouseenter="isShow = false">导航栏1div>
<div class="nav-item" @mouseenter="showDropDown('2')">导航栏2div>
<div class="nav-item" @mouseenter="showDropDown('3')">导航栏3div>
<div class="nav-item" @mouseenter="isShow = false">导航栏4div>
<div class="nav-item" @mouseenter="isShow = false">导航栏5div>
div>
<transition name="dropdown">
<div v-show="isShow" class=