You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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;
    }
}

关键修复点说明

  1. 关联CSS Modules类:给<ul>加上className={styles.menu},让你的菜单样式能正确作用到元素上
  2. 移动端菜单逻辑:用useState状态控制菜单的展开/收起,点击按钮切换图标和导航的显示状态
  3. 响应式适配:添加媒体查询,在小屏幕下隐藏默认水平导航,显示移动端按钮,展开后菜单变成垂直布局
  4. 布局细节优化:给.navbar加box-sizing: border-box,避免padding导致容器宽度超出视口;清除菜单默认的列表样式,让布局更整洁

内容的提问来源于stack exchange,提问作者sabretto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:01:00