環境
$ ng -v
@angular/cli: 1.4.9
node: 8.1.3
os: darwin x64
...
"@angular/material": "^2.0.0-beta.12",
元プロジェクトの説明
Angular Material導入済みのプロジェクトを参考に進めます。
app.module.tsでは次のAngular Materialコンポーネントをモジュールをインポート済みなことが前提です。
import { MatToolbarModule, MatButtonModule } from '@angular/material';
また、style.scss
にはプレビルドテーマであるindigo-pinkを設定してあります。
@import "~@angular/material/prebuilt-themes/indigo-pink.css";
見た目はこんな感じです↓
テーマを作成・適用する
テーマ用のscssファイルを作成する
今回は、 src/theme/
以下に my-theme.scss
ファイルを作成します。
また、次のようにAngular Materialのベーススタイルをインポート&適用します。
※ プロジェクト全体で使用するcssの拡張子に関わらず、テーマファイルの拡張子は.scss
とします
@import '~@angular/material/theming';
@include mat-core();
mat-palette
を使って、primary、accent、warnそれぞれの色を定義します。
mat-palette
に渡す色名の変数は、以下に定義されています。
material2/src/lib/core/theming/_palette.scss
// ...
$orange-theme-primary: mat-palette($mat-blue-grey);
$orange-theme-accent: mat-palette($mat-pink, 500, 900, A100);
$orange-theme-warn: mat-palette($mat-deep-orange);
$orange-theme: mat-light-theme($orange-theme-primary, $orange-theme-accent, $orange-theme-warn);
@include angular-material-theme($orange-theme);
mat-light-theme
または、 mat-dark-theme
を使って、最終的なテーマを定義した後、angular-material-theme
mixinにその変数を渡します。
// ...
$orange-theme: mat-light-theme($orange-theme-primary, $orange-theme-accent, $orange-theme-warn);
@include angular-material-theme($orange-theme);
angular-cliの設定
angular-cliが今回作成したscssをコンパイルするように設定します。styles
セクションにファイル名を指定します。
"styles": [
"styles.css",
"theme/my-theme.scss"
],
適用後の確認
次のように、設定したテーマが適用されているかと思います。
参考
https://material.angular.io/guide/theming
https://alligator.io/angular/angular-material-custom-theme/
https://material.io/guidelines/style/color.html