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

Angular 17:如何将mat-tab-group的4个标签分左右排列?

实现Angular 17 Mat-Tab-Group标签左右分布的方法

直接用margin搞不定是因为Mat-Tab-Group的标签栏默认是flex布局,每个标签项默认带flex-grow: 1,会自动拉伸占满空间,导致margin失效。下面是靠谱的实现方式:

步骤1:给Mat-Tab-Group加自定义类

在模板里给目标组件加上自定义类,避免影响其他tab组件:

<mat-tab-group class="split-tabs">
  <mat-tab label="标签1">内容1</mat-tab>
  <mat-tab label="标签2">内容2</mat-tab>
  <mat-tab label="标签3">内容3</mat-tab>
  <mat-tab label="标签4">内容4</mat-tab>
</mat-tab-group>

步骤2:编写CSS样式

根据Angular的视图封装规则,你可以选择两种方式写样式:

方式一:组件内样式(需加::ng-deep)

在组件的.component.css里添加:

::ng-deep .split-tabs .mat-tab-labels {
  display: flex;
  justify-content: space-between;
  width: 100%;
}

::ng-deep .split-tabs .mat-tab-label {
  /* 取消标签自动拉伸,避免占满空间 */
  flex-grow: 0;
  flex-shrink: 0;
  /* 可选:给标签加左右间距,避免挤在一起 */
  margin: 0 8px;
}

/* 用CSS伪元素和order属性把标签分成左右两组 */
::ng-deep .split-tabs .mat-tab-labels::before {
  content: '';
  order: 1;
}

::ng-deep .split-tabs .mat-tab-label:nth-child(3),
::ng-deep .split-tabs .mat-tab-label:nth-child(4) {
  order: 2;
}

方式二:全局样式(无需::ng-deep)

直接把样式写在styles.css或styles.scss里,去掉::ng-deep即可:

.split-tabs .mat-tab-labels {
  display: flex;
  justify-content: space-between;
  width: 100%;
}

.split-tabs .mat-tab-label {
  flex-grow: 0;
  flex-shrink: 0;
  margin: 0 8px;
}

.split-tabs .mat-tab-labels::before {
  content: '';
  order: 1;
}

.split-tabs .mat-tab-label:nth-child(3),
.split-tabs .mat-tab-label:nth-child(4) {
  order: 2;
}

原理说明

  • 给mat-tab-labels设置justify-content: space-between,让左右两组标签分别靠向两侧
  • 取消mat-tab-label的flex-grow,避免标签自动拉伸占满空间
  • 用伪元素和order属性把前两个标签归为左组,后两个归为右组,实现分布效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:38:22