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

React导航栏组件ID变更时CSS样式未更新问题求助

问题排查与修复方案

1. React语法问题

React中指定HTML类名需要使用className属性,你代码中多处使用了原生HTML的class属性,会导致类名不生效:

  • <nav class='navbar'> 改为 <nav className='navbar'>
  • <span class='bar'> 改为 <span className='bar'>
  • <ul class='navbar-links'> 改为 <ul className='navbar-links'>

2. 状态绑定位置错误

你把showLinks控制的id属性绑定到了汉堡按钮元素上,但你需要控制显示/隐藏的是菜单列表.navbar-links,所以应该把状态绑定到<ul>元素上,而不是汉堡按钮:
删除汉堡按钮上的id={showLinks ? "active" : "hidden"},加到<ul className='navbar-links'>上。

3. CSS选择器逻辑错误

  • 你写的.navbar-links #active是选中.navbar-links内部id为active的元素,但你现在把active id直接加到了.navbar-links元素本身,所以选择器要改成#active.navbar-links
  • 你的ul本身就是.navbar-links,不需要再写.navbar-links ul这种选择器,这是在找ul内部的子ul,你的DOM结构里不存在这个元素,对应的样式全部不会生效,把所有.navbar-links ul前缀的选择器里的ul删掉即可。

修改后的完整代码

React代码

import React, { useState} from "react";
import { Icon } from "semantic-ui-react";
import "../css/App.css";


export default function Navbar (props) {
    const [showLinks, setShowLinks] = useState(false)
    return(
        <nav className='navbar'>
            <Icon name='picture' size='large' className='brand' />
            <a href='#' className='toggle-button' onClick={() => setShowLinks(!showLinks)}>
                <span className='bar'></span>
                <span className='bar'></span>
                <span className='bar'></span>
            </a>
            <ul className='navbar-links' id={showLinks ? "active" : "hidden"}>
                <li><a href="/">Home</a></li>
                <li><a href="/store">Store</a></li>
                <li><a href="/cart">Cart</a></li>
                <li><a href="/checkout">Checkout</a></li>
            </ul>
        </nav>
    )
}

App.css代码

.navbar {
    display: flex;
    position: relative;
    justify-content: space-around;
    height: 50px;
    background-color: blue;
    color: white;
}

.brand {
    padding: 1rem;
}

.navbar-links {
    height: 100%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin: 0;
    padding: 0;
    list-style: none;
}

.navbar-links li a {
    display:flex;
    color: white;
    padding: 1rem;
    text-decoration: none;
}

.navbar-links li:hover {
    background-color: #555;
}

.toggle-button {
    position: absolute;
    top: .75rem;
    right: 1rem;
    display: none;
    flex-direction: column;
    justify-content: space-between;
    width: 30px;
    height: 21px;
}

.toggle-button .bar {
    height: 3px;
    width: 100%;
    background-color: white;
    border-radius: 10px;
}

@media only screen and (max-width: 800px) {
    .navbar {
        height: 100%;
        align-items: flex-start;
        flex-direction: column;
    }

    .toggle-button {
        display: flex;
    }

    .navbar-links {
        display: none;
        width: 100%;
        flex-direction: column;
    }

    .navbar-links li {
        text-align: center;
        width: 100%;
    }

    .navbar-links li a{
        padding: .5rem 1rem;
        justify-content: center;
    }
    
    #active.navbar-links {
        display: flex;
        flex-direction: column;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:45:03