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

如何在Angular Mat Menu中显示完整文本或换行菜单项

问题:Angular Mat Menu菜单项长文本显示不全,如何实现完整显示或换行?

当菜单项文本为类似“AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA”的超长无空格文本时,Mat Menu会自动将文本截断显示为省略号,希望能显示完整文本或实现断词换行,尝试过多种CSS方法无效,求解决方案。

Mat Menu长文本省略号效果

HTML代码
<mat-menu #reportsMenu="matMenu" class="main-menu reports-mat-menu-panel-customized">
            <ng-container *ngFor="let reportsMenuItem of REPORTS_MENU">
              <button [disabled]="!isAdmin && reportsMenuItem.isOnlyAdminAccess" mat-menu-item *ngIf="reportsMenuItem.submenu; else menuItem" [matMenuTriggerFor]="submenu">
                <span class="material-icons primary-color" style="vertical-align: middle; padding-right: 8px;">
                  {{ reportsMenuItem.icon }}
                </span>
                {{ reportsMenuItem.name }}
              </button>
              <ng-template #menuItem>
                <button mat-menu-item (click)="goToSubReports(reportsMenuItem.value)">
                  <span class="material-icons primary-color" style="vertical-align: middle; padding-right: 8px;">
                    {{ reportsMenuItem.icon }}
                  </span>
                  {{ reportsMenuItem.name }}
                </button>
              </ng-template>

              <mat-menu #submenu="matMenu">
                <ng-container *ngFor="let submenuItem of reportsMenuItem.submenu">
                  <button [disabled]="!isAdmin && submenuItem.isOnlyAdminAccess" mat-menu-item *ngIf="!submenuItem.submenu?.length" (click)="goToSubReports(submenuItem.value !== undefined ? submenuItem.value : null)">
                    {{ submenuItem.name }}
                  </button>
  
                  <ng-container *ngIf="shouldShowSubmenu(submenuItem) && submenuItem.submenu?.length > 0">
                    <button mat-menu-item [matMenuTriggerFor]="submenusub">
                      {{submenuItem.name}}
                    </button>
                  </ng-container>
                </ng-container>
                
              </mat-menu>

              <mat-menu #submenusub="matMenu">
                <button [disabled]="!isAdmin && submenuItemSub.isOnlyAdminAccess" mat-menu-item *ngFor="let submenuItemSub of getSubMenu(reportsMenuItem.submenu, 'Available Properties')" (click)="goToSubReports(submenuItemSub.value !== undefined ? submenuItemSub.value : null)">
                  {{ submenuItemSub.name }}
                </button>
              </mat-menu>
            </ng-container>
          </mat-menu>
解决方案

Angular Material的Mat Menu默认对菜单项文本做了截断处理,需要覆盖关键CSS样式来实现换行或完整显示:

方法一:基础换行配置

将以下样式添加到组件的样式文件(如.component.scss)中:

/* 调整菜单面板最小宽度,避免过窄导致换行频繁 */
.reports-mat-menu-panel-customized {
  min-width: 280px; /* 可根据实际需求调整 */
}

/* 覆盖菜单项文本的截断样式 */
.reports-mat-menu-panel-customized .mat-mdc-menu-item .mat-mdc-menu-item-text {
  white-space: normal; /* 允许文本自动换行 */
  overflow: visible; /* 取消文本溢出隐藏 */
  text-overflow: unset; /* 取消省略号显示 */
  word-break: break-all; /* 强制断词,适配无空格的超长文本 */
}

如果是带空格的正常长文本,可将word-break: break-all替换为word-wrap: break-word,保持单词完整性。

方法二:兼容子菜单样式

如果子菜单也存在同样问题,补充以下样式:

/* 让子菜单继承父菜单的宽度配置 */
.reports-mat-menu-panel-customized .mat-mdc-menu-panel {
  min-width: inherit;
}

/* 统一子菜单项的文本样式 */
.reports-mat-menu-panel-customized .mat-mdc-menu-item .mat-mdc-menu-item-text {
  white-space: normal;
  overflow: visible;
  text-overflow: unset;
  word-break: break-all;
}

旧版Angular Material适配

如果你使用的是非MDC版本的Angular Material,样式类名需调整为:

.reports-mat-menu-panel-customized .mat-menu-item .mat-menu-item-text {
  white-space: normal;
  overflow: visible;
  text-overflow: unset;
  word-break: break-all;
}

内容的提问来源于stack exchange,提问作者Mr. Mark Tawin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:43:20