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

如何构建Material2可折叠菜单?能否用库组件实现图片样式侧边菜单

如何构建Material2可折叠菜单

嘿,我来帮你搞定这个问题!Material2(也就是Angular Material)有现成的组件可以轻松实现可折叠菜单,最常用的是mat-expansion-panel配合列表组件,适合做侧边导航类的折叠菜单,步骤如下:

1. 先导入必要的模块

首先得在你的Angular模块里把需要的Material模块引进来,不然组件用不了:

import { MatExpansionModule } from '@angular/material/expansion';
import { MatListModule } from '@angular/material/list';
// 要是需要图标装饰,别忘了加这个
import { MatIconModule } from '@angular/material/icon';

@NgModule({
  imports: [
    // ...你项目里的其他模块
    MatExpansionModule,
    MatListModule,
    MatIconModule
  ]
})
export class YourFeatureModule { }

2. 编写组件模板

用mat-nav-list做容器,嵌套mat-expansion-panel来实现可折叠的菜单项,普通菜单项直接用mat-list-item就行:

<mat-nav-list>
  <!-- 普通的导航项 -->
  <a mat-list-item routerLink="/dashboard">
    <mat-icon>dashboard</mat-icon>
    <span>Dashboard</span>
  </a>

  <!-- 可折叠的父菜单 -->
  <mat-expansion-panel>
    <mat-expansion-panel-header>
      <mat-panel-title>
        <mat-icon>settings</mat-icon>
        <span>设置中心</span>
      </mat-panel-title>
    </mat-expansion-panel-header>
    <!-- 折叠后显示的子菜单 -->
    <mat-list>
      <a mat-list-item routerLink="/profile">个人资料</a>
      <a mat-list-item routerLink="/notifications">通知设置</a>
      <a mat-list-item routerLink="/privacy">隐私权限</a>
    </mat-list>
  </mat-expansion-panel>

  <!-- 再来一个折叠菜单示例 -->
  <mat-expansion-panel>
    <mat-expansion-panel-header>
      <mat-panel-title>
        <mat-icon>folder_open</mat-icon>
        <span>文件管理</span>
      </mat-panel-title>
    </mat-expansion-panel-header>
    <mat-list>
      <a mat-list-item routerLink="/my-files">我的文件</a>
      <a mat-list-item routerLink="/shared">共享文件</a>
    </mat-list>
  </mat-expansion-panel>
</mat-nav-list>

3. 自定义样式(可选)

默认样式可能和你的需求有点出入,你可以加一点自定义CSS来调整,比如去掉阴影、调整缩进:

mat-expansion-panel {
  box-shadow: none !important;
  border-bottom: 1px solid rgba(0,0,0,0.12);
}

mat-expansion-panel-header {
  padding-left: 16px !important;
}

mat-list-item {
  padding-left: 32px !important;
}

关于你提到的图片样式侧边菜单

虽然看不到你说的图片,但Angular Material的组件灵活性很高,几乎能实现所有常见的侧边菜单样式:

  • 如果是带展开/收起按钮的侧边栏,用mat-sidenav-container + mat-sidenav配合上面的折叠菜单就行:
<mat-sidenav-container class="full-height-container">
  <mat-sidenav #sideNav mode="side" opened>
    <!-- 这里放上面写好的折叠菜单 -->
    <mat-nav-list>
      <!-- ...菜单内容 -->
    </mat-nav-list>
  </mat-sidenav>
  <mat-sidenav-content>
    <!-- 主内容区,加个按钮控制侧边栏展开收起 -->
    <button mat-icon-button (click)="sideNav.toggle()">
      <mat-icon>menu</mat-icon>
    </button>
    <main>
      <!-- 你的页面内容 -->
    </main>
  </mat-sidenav-content>
</mat-sidenav-container>
  • 如果是树形结构的侧边菜单(比如多层级折叠),可以用mat-tree组件,它原生支持层级折叠,适合复杂的导航结构,只需要自定义节点模板就能匹配你要的样式。

总的来说,Material2的组件完全能实现你需要的侧边菜单,只要根据图片里的具体细节(比如缩进、图标位置、动画效果等),选对组件再微调样式就可以了。

内容的提问来源于stack exchange,提问作者Rafael L R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:06:51