テーマ

    コードの少数行で、コンポーネントのテーマを簡単に変更できます。SASS によって開発されるため、API は簡単で、単一のコンポーネント、複数のコンポーネント、またはスイート全体のスタイル変更を適用できます。

    テーマの概要

    Ignite UI for Angular はコンポーネントのデザインを**マテリアル デザイン ガイドライン**に基づき、Google によって作成されたコンポーネントの色、サイズ、およびルックアンドフィールにできるだけ近づけるようデザインしています。

    テーマのアプローチは、複数のシンプルな概念に基づきます。

    パレット

    最初の概念は色パレットです。ビジュアル ツールでは、アプリケーションを差別化する色があります。マテリアル デザイン ガイドラインは基本色のさまざまな色合いおよび輝度がある定義済みの色パレットを推奨します。色の調和、そして背景色および前景のテキスト色にコントラストをつけます。一方、これは色を制限することにもなります。具体的に、ブランド化と一致するカスタム パレットを使用することができないことがあります。そのため、ユーザーに提供される基本色からマテリアル デザインのようなパレットを生成するアルゴリズムを作成しました。また、パレットで各色合いにコントラスト テキスト色を生成します。

    テーマ

    2 つ目の概念はテーマです。パレットは通常テーマで使用します。各コンポーネントにはテーマがあり、アプリケーション全体および含まれる各コンポーネントをスタイル設定するグローバル テーマもあります。生成したパレットをグローバル テーマへ渡すと残りは自動で処理されます。各コンポーネントのスタイルを個別にカスタマイズすることもできます。この方法はトピックの下部セクションで説明します。

    タイポグラフィ

    最後の概念はタイポグラフィです。デフォルトで使用されるタイポグラフィもありますが、アプリケーションのスタイル設定をさらにカスタマイズできます。タイポグラフィはスタイル設定で中心的な役割を担います。アプリケーションで見出し、サブ見出し、段落テキストのフォント ファミリ、サイズ、ウェイトを変更するメソッドを提供します。

    テーマには Sass必要です。

    色パレットの生成

    テーマ ライブラリは Sass に基づいて実装されます。アプリケーションをブートストラップするために Ignite UI CLI を使用した場合、angular.json 構成ファイルでスタイル拡張子を scss に設定すると、CLI は Sass スタイルをコンパイルします。Ignite UI CLI を使用しなかった場合、ビルダーを Sass スタイルをコンパイルするために構成する必要があります。

    パレットは primarysecondarysurfaceinfosuccesswarn、および error カラーの引数を受け取ります。primary カラーはアプリケーション全体で最も目立つカラーになります。secondary カラーは、ボタン、スイッチ、スライダーなどの操作可能な要素に使用されるカラーです。surface カラーは、一部のコンポーネントの背景色として使用されます。必要な引数は、primarysecondary、および surface カラーに関する引数のみです。infosuccesswarn、および error カラー引数のデフォルト値は定義済みのセットからの値です。

    色パレットを作成するには、グローバル テーマの基本ファイルになる scss ファイルを作成します。"my-app-theme.scss" と名前付けます。

    @use "igniteui-angular/theming" as *;
    
    // 重要: Ignite UI for Angular 13 より前のバージョンは、次を使用してください。
    // @import '~igniteui-angular/lib/core/styles/themes/index';
    
    $company-color: #2ab759; // Some green shade I like
    $secondary-color: #f96a88; // Watermelon pink
    $surface-color: #e5e5e5; // Light gray
    
    $my-color-palette: palette(
      $primary: $company-color,
      $secondary: $secondary-color,
      $surface: $surface-color
    );
    scss

    生成されたパレットには 216 カラーが含まれています。3 カラーのみを指定して 216 カラーになりました。その他の 213 カラーはどうやって決定されたのでしょうか? 重要なカラーの生成方法を更に詳しく説明します。primarysecondary および secondary カラーを提供した後、そのカラーのシェードおよびアクセント カラーを生成しました。パレットに primarysecondary および surface カラーのための 3 つのサブパレットが生成されます。各サブパレットには、原色に基づいた 13 カラーのバリエーションがあります。13 カラー中 5 カラーは元のカラーより明るいシェードで、4 はより暗いカラーです。残りの 4 カラーは元のカラーの「アクセント」バージョンです。各パレットに元のカラーを含む 14 カラーがあります。

    各サブパレットに多数のカラーがあるため、適切なカラーを選択するための数値システムがあります。サブパレットの各カラーに数値が割り当てられています。元のカラーに 500 を割り当てます。より明るい色合いは 50400 です。より暗い色合いは 600900 です。アクセント カラーは A100A200A400、および A700 の文字列名があります。説明したカラーは 216 カラー中 42 カラーのみです。サブパレットがもう 1 つあります。グレー カラーで構成され、grays と呼ばれます。他の 2 つのカラー サブパレットと同じですが、アクセント バリエーションは含まれません。以上 42 カラーと 10 カラーで合計 52 カラーについて説明しました。まだ 216 カラーで多く残っています。その他の 164 カラーがどのように決定されたのでしょうか。最後のカラーについて説明しましょう。更に info、success、warn、error の 4 カラーがあります。その他 56 カラーがあります。primarysecondarysurfaceinfosuccesswarnerrorgrays サブパレットの数はちょうど 108 で、216 カラーの半分です。残りの半分のカラーは、各カラー バリエーションのコントラスト テキスト カラーであり、変数名にはすべてサフィックスとして -contrast が付いており、黒または白のいずれかになります。

    一方、パレットの任意の色にどのようにアクセスするのでしょうか。

    サブパレット カラーの取得

    color 関数を提供します。関数は、palettecolor、および variant の 3 つの引数を受け取ります。

    $my-primary-600: color($my-color-palette, "primary", 600);
    $my-primary-A700: color($my-color-palette, "secondary", "A700");
    $my-warning-color: color($my-color-palette, "warn");
    // sample usage
    
    .my-awesome-class {
      background: $my-primary-600;
      border-color: $my-primary-A700;
    }
    
    .warning-bg {
      background: $my-warning-color;
    }
    scss

    コントラスト テキスト色の取得

    サブパレット カラーの取得と同じように、サブパレットの色のコントラスト テキスト色を取得できます。

    $my-primary-800: color($my-palette, "primary", 600);
    $my-primary-800-text: contrast-color($my-palette, "primary", 600);
    // sample usage
    
    .my-awesome-article {
      background: $my-primary-800;
      color: $my-primary-800-text;
    }
    scss

    テーマの生成

    アプリケーション プロジェクトに "igniteui-angular.css" ファイルを追加した場合、削除してください。カスタム テーマを生成するために "my-app-theme.scss" ファイルを使用します。

    このトピックの最初の例から始めます。ただし、今回は coretheme の 2 つのミックスインを組み込む予定です。現時点では core は引数を受け入れません。theme は、$palette$schema$exclude$roundness$elevation$elevations など、いくつかのオプションを受け入れます。ここでは $palette 引数について説明します。

    coretheme の前に含める必要があります。core ミックスインは theme の基本定義を提供します。

    // 最初に IgniteUI テーマ ライブラリをインポートします
    @use "igniteui-angular/theming" as *;
    
    // 重要: Ignite UI for Angular 13 より前のバージョンは、次を使用してください。
    // @import '~igniteui-angular/lib/core/styles/themes/index';
    
    $company-color: #2ab759; // Some green shade I like
    $secondary-color: #f96a88; // Watermelon pink
    $surface-color: #e5e5e5; // Light gray
    
    $my-color-palette: palette(
      $primary: $company-color,
      $secondary: $secondary-color,
      $surface: $surface-color
    );
    
    // 重要: 必ず最初に core を含めてください。
    @include core();
    // 生成したカラー パレットを theme ミックスインに渡します
    @include theme($my-color-palette);
    scss

    これで完了です。アプリケーションは新しく生成されたパレットからの色を使用します。

    今回のリリースで、カスタム タイポグラフィの定義はアプリケーションのフォント ファミリの更新に限られています。機能は今後追加される予定ですが、これはアプリケーションでタイポグラフィをカスタマイズする堅牢性を提供することが目的です。

    タイポグラフィをカスタマイズするには、typography ミックスインを使用します。単一の config 引数を取得します。

    core の後に typography を含める必要があります。今後のリリースで条件が変わることがあります。

    // 最初に IgniteUI テーマ ライブラリをインポートします
    @use "igniteui-angular/theming" as *;
    
    // 重要: Ignite UI for Angular 13 より前のバージョンは、次を使用してください。
    // @import '~igniteui-angular/lib/core/styles/themes/index';
    
    // 重要: 必ず最初に core を含めてください。
    @include core();
    //theme の前にタイポグラフィを含めます
    @include typography(
      $config: (
        font-family: "Comic Sans MS",
      )
    );
    @include theme($default-palette);
    scss