LoginSignup
1
2

More than 3 years have passed since last update.

Angularでアプリのテーマ管理

Posted at

はじめに

世の中にダークモードが流行ってる中、ダークモードを実装するには色んな方法がありますが、今回はAngularでアプリのテーマ (背景、色)を管理してみった。

今回のアプリに使用したものはこんな感じです。

  • Angular 9
  • Angular Material 9.2.1

Angular Materialによるカラー管理

Angular Materialのインストールと設定が終わりましたら、まずはテーマ作成用のscssファイルを作成する。
image.png
最初はAngular Materialのテーマ機能をインポートして、コアmaxinをincludeする。
これでAngular部品のテーマ作成機能が使えるようになりました。

カラーパレットを設定

image.png
Angular Materialのカラーパレットはprimary(基本)、accent(アクセント)、warn(警告)の三色で構成されています。SCSS変数でそれぞれを設定して、mat-light-theme maxinに注ぎます。

Materialパレットはこちらで参考してください(https://material.io/resources/color/)

image.png
上記の構成で最終的にはこういう感じになります。

他の部品を見てみると....
image.png
必須項目の色がちゃんとwarnの色になっていますね!

変更用テーマを作成

ここまでデフォルトのテーマを設定できましたので、ここからは変更用のテーマをもう一個作成します。
image.png
今までのやり方と変わらず、ダークテーマ用のSCSS変数を設定して、mat-dark-themeに注ぎます。

image.png
こういう感じになります。

image.png
あとはこのように好きなクラスで囲き込みます。これによって、"unicorn-dark-theme"のDOM要素はこのテーマに適用するようになります。

image.png
テーマ変更ボタン(一番右のボタン)をメニューに追加する
image.png
ボタンを押すとテーマサービスで対象テーマを適用する
image.png

テーマサービスが処理行ったらイベントをAppコンポーネントに送って、対応するクラスをDOM要素に追加する。これで完成です。

最終的にこうなります

image.png
デフォルトテーマ
image.png
テーマボタン押下後

まとめ

Angular MaterialのTheming機能を紹介させていただきました。
Stackblitzにセットアップなしで試すことできますので、ぜひ皆様もやってみましょう!
今回の成品をstackblitzに載っていますので、良かったら参考してみてください!
(https://angular-crosscomponent.stackblitz.io/)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2