如何用CSS实现小屏幕显示菜单图标、大屏幕显示导航文本?
实现响应式导航:小屏幕显示菜单图标,大屏幕显示文本导航
以下是实现需求的完整代码示例,包含HTML、CSS和可选的交互逻辑:
HTML结构
<nav class="navbar"> <!-- 小屏幕菜单图标 --> <button class="menu-icon">☰</button> <!-- 大屏幕导航文本列表 --> <ul class="nav-links"> <li><a href="#">首页</a></li> <li><a href="#">关于我们</a></li> <li><a href="#">服务项目</a></li> <li><a href="#">联系我们</a></li> </ul> </nav>
CSS样式
/* 导航容器基础样式 */ .navbar { display: flex; align-items: center; justify-content: space-between; padding: 1rem 2rem; background-color: #2c3e50; color: #fff; } /* 大屏幕状态:默认隐藏菜单图标 */ .menu-icon { display: none; background: transparent; border: none; color: #fff; font-size: 1.5rem; cursor: pointer; } /* 大屏幕状态:默认显示导航文本 */ .nav-links { display: flex; gap: 2rem; list-style: none; margin: 0; padding: 0; } .nav-links a { color: #fff; text-decoration: none; transition: color 0.3s; } .nav-links a:hover { color: #3498db; } /* 小屏幕媒体查询(断点设为768px,可根据需求调整) */ @media (max-width: 768px) { /* 小屏幕显示菜单图标 */ .menu-icon { display: block; } /* 小屏幕默认隐藏导航文本 */ .nav-links { display: none; position: absolute; top: 60px; left: 0; width: 100%; background-color: #2c3e50; flex-direction: column; padding: 1rem 2rem; gap: 1rem; } /* 点击图标后显示导航文本的类 */ .nav-links.active { display: flex; } }
可选JavaScript交互(点击图标展开导航)
如果需要点击菜单图标展开隐藏的导航文本,添加以下代码:
const menuIcon = document.querySelector('.menu-icon'); const navLinks = document.querySelector('.nav-links'); menuIcon.addEventListener('click', () => { navLinks.classList.toggle('active'); });
常见问题排查
如果之前媒体查询未生效,可能是以下原因:
- 媒体查询代码写在了基础样式之前,导致被覆盖;确保媒体查询放在所有相关CSS的最后
- 选择器优先级不足;比如之前的导航文本样式用了
#nav-links这类ID选择器,而媒体查询用了类选择器,需要调整选择器优先级 - 断点设置错误;比如误用
min-width代替max-width,导致逻辑颠倒
内容的提问来源于stack exchange,提问作者Jose Cardona
相关产品推荐
相关产品推荐

