汉堡菜单无法固定问题求助:滚动时菜单未随视图移动
汉堡菜单固定(Sticky)问题解决方案
问题描述
滚动页面时,汉堡图标固定在角落,但展开的菜单停留在页面顶部,必须回滚才能查看。
问题根源
.nav-bar 使用 position: absolute 定位,其父容器 .container 设置了 height: 100vh,导致菜单仅在初始视口范围内渲染。页面滚动时,容器无法跟随滚动,菜单自然停留在顶部位置。
修复方案
将 .nav-bar 的定位方式从 absolute 改为 fixed,让它相对于浏览器视口固定,这样滚动页面时菜单会始终保持在视口内。同时移除 .container 的 height: 100vh(若页面内容超过一屏),避免容器限制页面高度。
修改后的核心CSS代码
.container { width: 100%; position: relative; /* 移除height: 100vh */ } .nav-bar { position: fixed; /* 替换原absolute */ background-color: #122; top: 0; left: -25rem; height: 100vh; width: 25rem; display: flex; justify-content: center; align-items: center; transition: 0.5s ease-out; z-index: 100; /* 确保菜单在其他内容上方 */ }
完整修改代码
HTML
<div class="container"> <nav class="nav-bar"> <div class="toggle-menu"> <div class="line line1"></div> <div class="line line2"></div> <div class="line line3"></div> </div> <ul class="nav-list"> <li class="nav-list-item"><a href="" class="nav-link">Home</a></li> <li class="nav-list-item"><a href="" class="nav-link">About</a></li> <li class="nav-list-item"> <a href="" class="nav-link">Projects</a> </li> <li class="nav-list-item"><a href="" class="nav-link">Clients</a></li> <li class="nav-list-item"> <a href="" class="nav-link">Contact Me</a> </li> </ul> </nav> </div>
CSS
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@200;300;400&display=swap'); *,*::before,*::after { margin: 0; padding: 0; box-sizing: inherit; } html { box-sizing: border-box; font-family: 'Montserrat', sans-serif; font-size: 10px; } .container { width: 100%; position: relative; } .nav-bar { position: fixed; background-color: #122; top: 0; left: -25rem; height: 100vh; width: 25rem; display: flex; justify-content: center; align-items: center; transition: 0.5s ease-out; z-index: 100; } .toggle { left: 0; box-shadow: 1px 0 15px 2px rgba(0, 0, 0, 0.4); } .toggle-menu { background-color: rgba(0, 0, 0, 0.2); position: fixed; top: 2rem; left: 2rem; width: 4rem; height: 3rem; display: flex; flex-direction: column; justify-content: space-around; padding: 0.2rem 0.5rem; border-radius: 0.5rem; } .line { width: 100%; height: 4px; border-radius: 5px; background-color: #fff; transition: 0.4s ease-out; } .toggle .line1 { background-color: #c91919; transform: scale(0.9) rotateZ(-45deg) translate(-6px, 4px); } .toggle .line2 { display: none; } .toggle .line3 { background-color: #c91919; transform: scale(0.9) rotateZ(45deg) translate(-6px, -4px); } .toggle .toggle-menu { background-color: white; } .nav-list { list-style: none; } .nav-list-item { text-align: center; padding: 1rem 0; } .nav-link { color: #fff; font-size: 2.2rem; text-decoration: none; position: relative; padding-bottom: 0.4rem; } .nav-link::before { position: absolute; content: ''; left: 0; bottom: 0; width: 100%; height: 1px; background-color: #fff; transform: scaleX(0); transition: 0.4s ease-in-out; transform-origin: left; } .nav-link:hover::before { transform: scaleX(1); }
JavaScript
const toggleButton = document.querySelector('.toggle-menu'); const navBar = document.querySelector('.nav-bar'); toggleButton.addEventListener('click', () => { navBar.classList.toggle('toggle'); });
内容的提问来源于stack exchange,提问作者NoobTechLtd
相关产品推荐
相关产品推荐

