使用CSS Modules实现的列表项无法并排显示,求技术解决方案
问题排查与修复方案
先看你代码里的几个关键问题:
- 导航菜单的
<ul>没关联CSS Modules里的.menu类,导致这个样式完全没生效 - 移动端按钮
.mobile_btn默认设为display: none,但没加媒体查询让它在小屏幕显示 - 缺少移动端菜单的切换逻辑,点击按钮后菜单不会展开/收起
下面是修复后的完整代码:
修复后的Navbar组件代码
import { useState } from 'react'; import { AiOutlineMenu, AiOutlineClose } from 'react-icons/ai'; import Logo from './your-logo-path'; // 替换成你的Logo实际路径 import styles from './Navbar.module.css'; // 确保CSS Modules文件路径正确 function Navbar() { // 控制移动端菜单的显示状态 const [mobileMenuOpen, setMobileMenuOpen] = useState(false); return ( <header className={styles.navbar}> <img src={Logo} alt="网站Logo" /> {/* 根据状态切换导航的显示类 */} <nav className={mobileMenuOpen ? styles.navOpen : styles.nav}> {/* 关联CSS Modules的menu类 */} <ul className={styles.menu}> <li><a href='/'>Learn More</a></li> <li><a href='/'>Log In</a></li> <li><a href='/'>Sign Up</a></li> <li><AiOutlineSearch /></li> <li><AiOutlineUser /></li> </ul> </nav> {/* 移动端按钮,点击切换菜单状态 */} <div className={styles.mobileBtn} onClick={() => setMobileMenuOpen(!mobileMenuOpen)} > {mobileMenuOpen ? <AiOutlineClose size={25} /> : <AiOutlineMenu size={25} />} </div> </header> ) } export default Navbar
修复后的CSS Modules代码
.navbar { width: 100%; height: 70px; display: flex; justify-content: space-between; align-items: center; padding: 1rem; box-sizing: border-box; /* 防止padding撑大容器宽度 */ } /* 默认导航样式 */ .nav { display: block; } /* 移动端展开后的导航样式 */ .navOpen { position: absolute; top: 70px; left: 0; width: 100%; background-color: #ffffff; /* 替换成你的主题背景色 */ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); padding: 1rem; box-sizing: border-box; } .menu { display: flex; gap: 1.5rem; list-style: none; margin: 0; padding: 0; } .mobileBtn { display: none; cursor: pointer; } /* 响应式适配,屏幕小于768px时生效 */ @media (max-width: 768px) { .nav { display: none; } .menu { flex-direction: column; gap: 1rem; } .mobileBtn { display: block; } }
关键修复点说明
- 关联CSS Modules类:给
<ul>加上className={styles.menu},让你的菜单样式能正确作用到元素上 - 移动端菜单逻辑:用
useState状态控制菜单的展开/收起,点击按钮切换图标和导航的显示状态 - 响应式适配:添加媒体查询,在小屏幕下隐藏默认水平导航,显示移动端按钮,展开后菜单变成垂直布局
- 布局细节优化:给
.navbar加box-sizing: border-box,避免padding导致容器宽度超出视口;清除菜单默认的列表样式,让布局更整洁
内容的提问来源于stack exchange,提问作者sabretto
相关产品推荐
相关产品推荐

