我的目标是用鼠标输入或点击打开和关闭一些侧边抽屉菜单。
我遇到的问题是它只是立即显示,没有任何动画左右滑动。是否可以使用动画 CSS 添加它?
到目前为止我的尝试:
CSS
@import url('https://fonts.googleapis.com/css2?family=Baloo+Paaji+2:wght@400;600&display=swap');
* {
font-family: 'Baloo Paaji 2', cursive;
margin: 0;
padding: 0;
box-sizing: border-box;
list-style: none;
text-decoration: none;
}
body {
background: #f5f5f5;
}
.top_navbar {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 60px;
background: #323233;
box-shadow: 1px 0 2px rgba(0, 0, 0, 0.125);
display: flex;
align-items: center;
}
.top_navbar .logo {
width: 250px;
font-size: 25px;
font-weight: 700;
padding: 0 25px;
color: white;
letter-spacing: 2px;
text-transform: uppercase;
border-right: 1px solid #f5f5f5;
}
.top_navbar .menu {
width: calc(100% - 250px);
padding: 0 25px;
display: flex;
justify-content: space-between;
align-items: center;
}
.top_navbar .hamburger {
font-size: 25px;
cursor: pointer;
color: white;
}
.top_navbar .hamburger:hover {
color: #007dc3;
}
/* Now I have determined what the sidebar will look like for a responsive device */
.hover_collapse .sidebar {
width: 70px;
}
.hover_collapse .sidebar ul li a .text {
display: none;
}
.sidebar {
position: fixed;
top: 60px;
left: 0;
width: 220px;
height: 100%;
background: #042331;
}
.sidebar ul li a {
display: block;
padding: 16px 25px;
border-bottom: 1px solid #03374e;
color: #0e94d4;
}
.sidebar ul li a .icon {
font-size: 18px;
color: white;
vertical-align: middle;
}
.sidebar ul li a .text {
margin-left: 19px;
color: #fff;
font-family: sans-serif;
font-size: 18px;
letter-spacing: 2px;
}
.sidebar ul li a:hover {
background: #0e94d4;
color: #fff;
}
HTML
<div class="wrapper hover_collapse">
<div class="top_navbar">
<div class="logo">Foolish Dev</div>
<div class="menu">
<div class="hamburger">
<i class="fas fa-bars"></i>
</div>
</div>
</div>
<div class="sidebar animate__animated animate__slideInLeft">
<div class="sidebar_inner">
<ul>
<li>
<a href="#">
<span class="icon"><i class="fa fa-qrcode"></i></span>
<span class="text">Dashboard</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"><i class="fa fa-link"></i></span>
<span class="text">Shortcuts</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"><i class="fa fa-eye"></i></span>
<span class="text">Overview</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"><i class="fa fa-book"></i></span>
<span class="text">Event</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"><i class="fa fa-question-circle"></i></span>
<span class="text">About</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"><i class="fa fa-pen"></i></span>
<span class="text">Service</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"><i class="fa fa-id-card"></i></span>
<span class="text">Contact</span>
</a>
</li>
</ul>
</div>
</div>
</div>
Javascript
var li_items = document.querySelectorAll(".sidebar ul li");
var hamburger = document.querySelector(".hamburger");
var wrapper = document.querySelector(".wrapper");
li_items.forEach((li_item) => {
li_item.addEventListener("mouseenter", () => {
li_item.closest(".wrapper").classList.remove("hover_collapse");
})
})
li_items.forEach((li_item) => {
li_item.addEventListener("mouseleave", () => {
li_item.closest(".wrapper").classList.add("hover_collapse");
})
})
hamburger.addEventListener("click", () => {
hamburger.closest(".wrapper").classList.toggle("hover_collapse");
})
这是基于这个例子:
https://foolishdeveloper.com/responsive-sidebar-menu-using-html-css-and-javascript/
这是一个 CodePen 示例,你会看到它只是跳跃,没有我想要的流畅动画: https://codepen.io/nultien/pen/LYJRYoM
你只需要添加一个过渡到侧边栏:
.sidebar {
transition: width 0.3s ease;
}
您还需要将此添加到链接以在转换时停止文本换行:
.sidebar ul li a {
white-space: nowrap;
}
仅当您应用效果时,您才添加
animated_
类或将其与 css 集成,请参阅教程:https://animate.style/
对不起,我无法修复您的代码,它需要修复许多因素
我相信这就是你想要的:https://codepen.io/tachib_shin/pen/Exegapz