为纯CSS实现的Div自定义导航栏添加汉堡图标并实现移动端垂直响应式
实现纯CSS响应式汉堡导航栏
核心思路
用HTML的checkbox作为状态开关,配合CSS兄弟选择器控制菜单的显示/隐藏,全程无需JavaScript,保持纯CSS实现逻辑。
步骤1:修改HTML结构
在原导航栏前添加汉堡切换控件和图标,把所有导航项统一放进容器中:
<!-- 隐藏的checkbox开关 --> <input type="checkbox" id="menu-toggle" class="menu-toggle"> <!-- 汉堡图标(关联checkbox) --> <label for="menu-toggle" class="hamburger"> <span></span> <span></span> <span></span> </label> <!-- 导航菜单容器 --> <div class="nav-container"> <div class="nav-item">首页</div> <div class="nav-item">产品</div> <div class="nav-item">关于我们</div> <div class="nav-item">联系我们</div> </div>
步骤2:编写CSS样式
基础样式(桌面端)
隐藏checkbox和汉堡图标,保持导航栏横向排列:
.menu-toggle { display: none; /* 隐藏原生checkbox控件 */ } .hamburger { display: none; /* 桌面端不显示汉堡图标 */ } .nav-container { display: flex; gap: 2rem; background: #eee; padding: 1rem 2rem; } .nav-item { padding: 0.5rem 1rem; cursor: pointer; transition: background 0.2s; } .nav-item:hover { background: #ddd; border-radius: 4px; }
移动端响应式设置(适配宽度≤768px)
显示汉堡图标,将菜单改为垂直排列,通过checkbox状态控制展开/收起:
@media (max-width: 768px) { /* 显示汉堡图标 */ .hamburger { display: flex; flex-direction: column; cursor: pointer; padding: 1rem; } .hamburger span { width: 25px; height: 3px; background: #333; margin: 3px 0; transition: all 0.3s ease; } /* 移动端菜单默认隐藏 */ .nav-container { position: absolute; top: 60px; /* 对应导航栏高度,避免被汉堡遮挡 */ left: 0; width: 100%; flex-direction: column; /* 垂直排列菜单项 */ background: #eee; max-height: 0; overflow: hidden; transition: max-height 0.3s ease; } /* 选中checkbox时展开菜单 */ .menu-toggle:checked ~ .nav-container { max-height: 300px; /* 足够容纳所有菜单项的高度 */ } /* 汉堡图标转叉动画 */ .menu-toggle:checked ~ .hamburger span:nth-child(1) { transform: rotate(-45deg) translate(-5px, 6px); } .menu-toggle:checked ~ .hamburger span:nth-child(2) { opacity: 0; } .menu-toggle:checked ~ .hamburger span:nth-child(3) { transform: rotate(45deg) translate(-5px, -6px); } }
关键细节说明
- 用
max-height配合overflow: hidden实现菜单的平滑展开/收起,比display: none的生硬切换更有过渡效果 - 汉堡图标的切换通过CSS transform实现,无需额外图片资源
- 绝对定位的菜单容器要注意
top值的设置,避免和汉堡按钮重叠 - 可以根据你原导航栏的样式调整颜色、间距、高度等参数,保持整体风格统一
内容的提问来源于stack exchange,提问作者user22029289
相关产品推荐
相关产品推荐

