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

Angular 18中Material 3 SCSS API如何定义字体排版层级?

Angular 18 + Material 3 SCSS 自定义字体排版层级实现

Material 3的SCSS排版API和Material 2结构类似,但层级命名与前缀有调整,以下是对应你原有配置的实现方式:

1. 自定义排版配置

用mat.define-typography-config替代原mat.m2-define-typography-config,层级名称换成Material 3的标准命名(比如原headline-1对应display-large),层级定义使用mat.define-typography-level(去掉m2前缀):

// 自定义排版配置
$my-custom-typography-config: mat.define-typography-config(
  // 对应原M2的headline-1
  $display-large: mat.define-typography-level(112px, 112px, 300, $letter-spacing: -0.05em),
  // 对应原M2的headline-2
  $display-medium: mat.define-typography-level(56px, 56px, 400, $letter-spacing: -0.02em),
  // 对应原M2的headline-3
  $display-small: mat.define-typography-level(45px, 48px, 400, $letter-spacing: -0.005em),
  // 对应原M2的headline-4
  $headline-large: mat.define-typography-level(34px, 40px, 400),
  // 对应原M2的headline-5
  $headline-medium: mat.define-typography-level(24px, 32px, 400),
  // 其他需要自定义的层级可补充,比如body、title等
  $body-large: mat.define-typography-level(16px, 24px, 400),
);

2. 将自定义排版应用到主题

定义Material 3主题时,把上述排版配置传入mat.define-theme的$typography参数:

// 定义主题色
$my-primary: mat.define-palette(mat.$blue-palette);
$my-accent: mat.define-palette(mat.$pink-palette);
$my-warn: mat.define-palette(mat.$red-palette);

$my-theme: mat.define-theme(
  (
    color: (
      primary: $my-primary,
      accent: $my-accent,
      warn: $my-warn,
    ),
    typography: $my-custom-typography-config, // 应用自定义排版
  )
);

// 输出主题样式
@include mat.all-component-themes($my-theme);

关键区别说明

Material 3采用了新的排版层级命名体系,与M2的大致对应关系:

  • M2 headline-1/-2/-3 → M3 display-large/-medium/-small
  • M2 headline-4/-5 → M3 headline-large/-medium
  • M2 subtitle-1/-2 → M3 title-large/-medium
  • M2 body-1/-2 → M3 body-large/-medium
  • M2 caption → M3 body-small
  • M2 button → M3 label-large

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:35:03