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

如何在不使用mat-panel-description的情况下使用mat-accordion组件

如何在不保留mat-panel-description元素的情况下使用mat-accordion组件?

我想使用mat-accordion组件,但不想包含mat-panel-description元素。有没有规范的实现方法?我查了官方文档没找到方案,知道可以用CSS隐藏,但不想破坏样式封装,是不是我漏了什么?

代码示例

即便我这么写,mat-panel-description仍会存在于DOM中

<mat-accordion multi>
  <ng-container *ngFor="let i of attributes?.list">
    <mat-expansion-panel class="mat-elevation-z0">
      <mat-expansion-panel-header>
        <mat-panel-title>
          <h4>{{ i.title }}</h4>
        </mat-panel-title>
        <!-- <mat-panel-description class="hidden"></mat-panel-description> -> 我目前用CSS隐藏它  -->
      </mat-expansion-panel-header>
      <div class="panel-container">
        <div class="wysiwyg-container" [innerHtml]="i.content | safe: 'html'"></div>
      </div>
    </mat-expansion-panel>
  </ng-container>
</mat-accordion>

问题原因

在小屏幕设备上,这个元素会占用大量可用空间。
设备空间占用示意图


解决方案

  • 自定义面板头部结构
    直接在mat-expansion-panel-header内编写自定义内容,不依赖mat-panel-title指令,框架不会自动生成mat-panel-description元素:

    <mat-expansion-panel-header>
      <h4>{{ i.title }}</h4>
    </mat-expansion-panel-header>
    

    这种方式完全由你控制头部布局,不会产生冗余DOM元素。

  • 基于官方样式系统消除描述区
    利用Angular Material的SCSS混入定制样式,既不破坏组件样式封装,又能彻底清除描述区的空间占用:

    @use '@angular/material' as mat;
    
    :host ::ng-deep .mat-expansion-panel-header {
      @include mat.expansion-panel-header-base();
      .mat-expansion-panel-header-description {
        display: none;
        width: 0;
        margin: 0;
        padding: 0;
      }
    }
    

    :host ::ng-deep确保样式仅作用于当前组件,不会污染全局样式。

  • 升级Angular Material版本
    部分旧版本会自动生成空的mat-panel-description元素,升级到最新稳定版后,当未显式添加该元素时,框架不会自动创建它,这是最省心的解决方式。

内容的提问来源于stack exchange,提问作者Raphaël Balet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:50:38