Angular Material UIのカラーパレットがどうにもパッとしない。

ということで、カスタムカラーを使用することにした。

カスタムカラーを使用するためにはインストールの段階でカスタムカラーを使用するよ、という宣言が必要だがその方法は前回書いたので、参考にしてほしい。

さて、さっそくカスタムカラーを設定していく。

手順としてさらっていくと、自作のパレットを作成し、それを適用するというそれだけのこと。

なので、まずは自作のパレットを作成する。

src/assets/_palette.scssを作成し、そこにカラーを書いていく。

例えばこんな感じに。


$custom-primary: (
  50: #e8f5ff,
  100: #c5e5ff,
  200: #9fd4ff,
  300: #78c2ff,
  400: #5bb5ff,
  500: #3ea8ff,
  600: #38a0ff,
  700: #3097ff,
  800: #288dff,
  900: #1b7dff,
  A100: #ffffff,
  A200: #ffffff,
  A400: #cce0ff,
  A700: #b3d1ff,
  contrast: (
    50: #000000,
    100: #000000,
    200: #000000,
    300: #000000,
    400: #ffffff,
    500: #ffffff,
    600: #ffffff,
    700: #ffffff,
    800: #ffffff,
    900: #ffffff,
    A100: #000000,
    A200: #000000,
    A400: #000000,
    A700: #000000,
  ),
);

次に、このパレットを読み込む必要があるので、src/styles.scssに移動する。

で、まずはカスタムパレットを使用すると宣言する。

@use "./assets/palette" as palette;

あ、ちなみに今回はPrimaryカラーだけをカスタムした、遅ればせながら言っておく。

そのため、Primaryカラーにカスタムパレットを適用させる。

$custom-primary: mat.define-palette(palette.$custom-primary);
$custom-accent: mat.define-palette(mat.$amber-palette, A200, A100, A400);
$custom-warn: mat.define-palette(mat.$red-palette);

accent、warnはMaterial UIが用意しているカラーを使用している。

最後にテーマ全体を宣言しておしまい。


$custom-theme: mat.define-light-theme(
  (
    color: (
      primary: $custom-primary,
      accent: $custom-accent,
      warn: $custom-warn,
    ),
  )
);

@include mat.all-component-themes($custom-theme);

たぶん、Material UIで作成されたカラーテーマをそのまま使うのは無理があるので、こんな感じでカスタムテーマを作るとずいぶん楽になる。

参考までにこの作業のGithubをどうぞ。