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

React可悬停侧边菜单开发问题求助

修复悬停展开的侧边菜单问题

你当前的代码存在几个关键问题导致悬停展开效果失效,以下是修正后的完整代码及说明:

修正后的 styles.css

.side-menu {
    font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
    position: fixed;
    top: 0;
    left: 0;
    margin: 0;
    padding: 0;
    height: 100%;
    width: 60px;
    list-style-type: none;
    background: #fefffe;
    overflow: hidden;
    transition: width 0.6s ease;
}

.side-menu:hover {
    width: 300px;
}

.side-menu li {
    /* 移除固定宽度,让列表项随侧边栏宽度变化 */
    width: 100%;
}

.side-menu li a {
    display: flex;
    align-items: center;
    text-decoration: none;
    color: #333;
    height: 60px;
    padding: 0 15px;
    transition: background-color 0.3s ease;
}

/* 样式化 FontAwesome 图标 */
.side-menu li a svg {
    font-size: 1.5rem;
    width: 30px;
    text-align: center;
}

.side-menu li a .menu-text {
    margin-left: 25px;
    opacity: 0;
    white-space: nowrap;
    transition: opacity 0.3s ease;
}

/* 侧边栏悬停时显示所有菜单项文本 */
.side-menu:hover li a .menu-text {
    opacity: 1;
}

/* 单个菜单项悬停时高亮背景 */
.side-menu li a:hover {
    background-color: #f0f0f0;
}

修正后的 sideBar.js

import React from 'react';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faCode, faCog, faFont } from '@fortawesome/free-solid-svg-icons';

export default function SideBar() {
    return (
        <div>
            <ul className="side-menu">
                <li>
                    <a href="#">
                        <FontAwesomeIcon icon={faCode} />
                        <span className="menu-text">Superguide</span>
                    </a>
                </li>
                <li>
                    <a href="#">
                        <FontAwesomeIcon icon={faCog} />
                        <span className="menu-text">Installation and Dependencies</span>
                    </a>
                </li>
                <li>
                    <a href="#">
                        <FontAwesomeIcon icon={faFont} />
                        <span className="menu-text">Typography</span>
                    </a>
                </li>
            </ul>
        </div>
    );
}

关键修复点说明

  1. 移除列表项固定宽度:原来的 .side-menu li { width: 60px; } 限制了列表项宽度,导致侧边栏展开后文本仍无法显示,改为 width: 100% 让其随侧边栏宽度自适应。
  2. 调整链接布局:使用 flex 布局替代绝对定位,更简洁地对齐图标和文本,同时移除了 font-size: 0 这个导致文本完全隐藏的设置。
  3. 修正图标选择器:FontAwesomeIcon 组件渲染的是 SVG 元素,因此使用 svg 选择器而非 span.fa 来设置图标样式。
  4. 优化文本显示逻辑:默认将 .menu-text 的 opacity 设置为 0,侧边栏悬停时改为 1,配合侧边栏的宽度过渡实现平滑展开效果。
  5. 添加单个项悬停效果:增加了菜单项悬停时的背景高亮,提升交互体验。

App.js 无需修改,保持原有结构即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:50:55