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

如何将Material Theme Builder导出的主题接入Angular Material

如何将Material Theme Builder导出的CSS主题接入Angular Material

我通过Material Theme Builder创建了一个主题并导出为.css格式,得到了多个相关文件,但不清楚如何将这些文件接入Angular Material,也不知道如何将其作为自定义主题使用。以下是获取的文件(截取部分内容):

导出的文件内容示例

colors.module.css

.primary { background-color: var(--md-sys-color-primary); }.primary-text { color: var(--md-sys-color-primary); }.on-primary { background-color: var(--md-sys-color-on-primary); }.on-primary-text { color: var(--md-sys-color-on-primary); }

theme.css

@import url(tokens.css);@import url(colors.module.css);@import url(typography.module.css);@import url(theme.light.css) (prefers-color-scheme: light);@import url(theme.dark.css) (prefers-color-scheme: dark);

theme.dark.css

:root { --md-sys-color-primary: var(--md-sys-color-primary-dark); --md-sys-color-on-primary: var(--md-sys-color-on-primary-dark); --md-sys-color-primary-container: var(--md-sys-color-primary-container-dark); --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-dark); --md-sys-color-secondary: var(--md-sys-color-secondary-dark); --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-dark); --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-dark); --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-dark); --md-sys-color-tertiary: var(--md-sys-color-tertiary-dark); }

theme.light.css

:root { --md-sys-color-primary: var(--md-sys-color-primary-light); --md-sys-color-on-primary: var(--md-sys-color-on-primary-light); --md-sys-color-primary-container: var(--md-sys-color-primary-container-light); --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-light); --md-sys-color-secondary: var(--md-sys-color-secondary-light); --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-light); --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-light); --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-light); --md-sys-color-tertiary: var(--md-sys-color-tertiary-light); }

tokens.css

:root { --md-source: #141616; /* primary */ --md-ref-palette-primary0: #000000; --md-ref-palette-primary10: #002021; --md-ref-palette-primary20: #003738; --md-ref-palette-primary25: #004345; --md-ref-palette-primary30: #004f52; --md-ref-palette-primary35: #005c5f; --md-ref-palette-primary40: #00696c; --md-ref-palette-primary50: #008488; --md-ref-palette-primary60: #00a1a5; --md-ref-palette-primary70: #1dbdc2; --md-ref-palette-primary80: #4cd9de; --md-ref-palette-primary90: #6ff6fb; --md-ref-palette-primary95: #b9fdff; --md-ref-palette-primary98: #e4feff; --md-ref-palette-primary99: #f1ffff; --md-ref-palette-primary100: #ffffff; }

typography.module.css

.display-large{ font-family: var(--md-sys-typescale-display-large-font-family-name); font-style: var(--md-sys-typescale-display-large-font-family-style); font-weight: var(--md-sys-typescale-display-large-font-weight); font-size: var(--md-sys-typescale-display-large-font-size); letter-spacing: var(--md-sys-typescale-display-large-tracking); line-height: var(--md-sys-typescale-display-large-height); text-transform: var(--md-sys-typescale-display-large-text-transform); text-decoration: var(--md-sys-typescale-display-large-text-decoration); }

接入步骤

1. 放置主题文件

把所有导出的CSS文件复制到Angular项目的src/assets/theme目录下,没有该目录就手动创建。

2. 全局引入主题基础文件

打开src/styles.scss(或styles.css),添加导入语句:

@import './assets/theme/theme.css';

3. 创建Angular Material适配主题文件

在src/theme目录下新建custom-theme.scss,内容如下:

@use '@angular/material' as mat;

// 从CSS变量映射主色调色板
$primary: mat.define-palette(mat.$md3-light-theme-palette, default, default, default,
  (
    0: var(--md-ref-palette-primary0),
    10: var(--md-ref-palette-primary10),
    20: var(--md-ref-palette-primary20),
    25: var(--md-ref-palette-primary25),
    30: var(--md-ref-palette-primary30),
    35: var(--md-ref-palette-primary35),
    40: var(--md-ref-palette-primary40),
    50: var(--md-ref-palette-primary50),
    60: var(--md-ref-palette-primary60),
    70: var(--md-ref-palette-primary70),
    80: var(--md-ref-palette-primary80),
    90: var(--md-ref-palette-primary90),
    95: var(--md-ref-palette-primary95),
    98: var(--md-ref-palette-primary98),
    99: var(--md-ref-palette-primary99),
    100: var(--md-ref-palette-primary100)
  )
);

// 同理映射次要、第三色调色板(根据你的tokens补充完整)
$secondary: mat.define-palette(mat.$md3-light-theme-palette, default, default, default);
$tertiary: mat.define-palette(mat.$md3-light-theme-palette, default, default, default);

// 定义浅色主题
$light-theme: mat.define-light-theme((
  color: (
    primary: $primary,
    secondary: $secondary,
    tertiary: $tertiary,
  ),
  typography: mat.define-typography-config(
    display-large: mat.define-typography-level(
      var(--md-sys-typescale-display-large-font-size),
      var(--md-sys-typescale-display-large-height),
      var(--md-sys-typescale-display-large-font-weight),
      var(--md-sys-typescale-display-large-tracking),
      var(--md-sys-typescale-display-large-text-transform),
      var(--md-sys-typescale-display-large-text-decoration)
    ),
    // 按需补充display-medium、headline-large等其他排版等级
  )
));

// 定义深色主题
$dark-theme: mat.define-dark-theme((
  color: (
    primary: $primary,
    secondary: $secondary,
    tertiary: $tertiary,
  ),
  typography: mat.define-typography-config(
    display-large: mat.define-typography-level(
      var(--md-sys-typescale-display-large-font-size),
      var(--md-sys-typescale-display-large-height),
      var(--md-sys-typescale-display-large-font-weight),
      var(--md-sys-typescale-display-large-tracking),
      var(--md-sys-typescale-display-large-text-transform),
      var(--md-sys-typescale-display-large-text-decoration)
    ),
  )
));

// 跟随系统配色自动切换主题
@media (prefers-color-scheme: light) {
  @include mat.all-component-themes($light-theme);
}

@media (prefers-color-scheme: dark) {
  @include mat.all-component-themes($dark-theme);
}

4. 全局引入适配主题

回到src/styles.scss,添加导入:

@import './theme/custom-theme.scss';

5. 直接使用导出的CSS类(可选)

除了让Material组件自动应用主题,还能在HTML里直接用导出的类:

<div class="primary">主色背景块</div>
<span class="primary-text">主色文字</span>
<h1 class="display-large">大标题样式</h1>

6. 测试主题切换

修改系统的明暗模式设置,检查Material组件和自定义元素是否自动切换主题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:52:24