メインコンテンツへスキップ
menumenu tanreiexpand_morecontrasttranslate
tanreiexpand_more
はじめにWebReactSwiftUIJetpack ComposeFlutterReact Nativeプリセット自分のデザインシステムを作るAI エージェントと Tanrei を使うブランドデザイントークンデザインシステムとカスタマイズTheme Studioカラータイポグラフィアイコン形状エレベーションモーションインタラクション状態振る舞いレイアウトアクセシビリティ言葉カラートークンタイプスケールトークン形状トークンエレベーショントークンモーショントークン状態トークンスペースと寸法のトークンコンポーネントボタンメインアクションボタンセグメントボタンボタングループメニュー付きボタンツールバーコピーボタンチェックボックスラジオボタンスイッチチップメニュースライダースライダーフィールドカレンダーDateTimePickerフィールドグループラジオグループチェックボックスグループセレクトセレクトフィールドメニューバーファイルアップロードファイルピッカー 上級者向けドロップゾーンテキスト入力欄 上級者向けテキストフィールドチップフィールドフィールドコンボボックス 上級者向けコンボボックスフィールド数値入力欄 上級者向け数値フィールドカラー入力欄 上級者向けカラーフィールドワンタイムコード入力欄 上級者向けワンタイムコードフィールド埋め込みテキスト入力欄 上級者向けチャットコンポーザーカード区切り線モーダルレイヤー 上級者向けダイアログリストリスト行ボトムシートサイドシートカルーセルコードブロックテーブルポップオーバーステップアコーディオン説明リスト図アプリシェルページヘッダーツリービュータイムライン画像プレビューハンドルサイズ変更できる枠スクロールエリアバッジプログレスインジケーターメーターナンバーティッカーローディングインジケータースナックバーツールチップキーボードショートカットタグインラインコードコールアウトアバター空の状態タググループスケルトンファイル項目色見本マーキーテキストタブタブビューアプリバーナビゲーションバーナビゲーションドロワー検索リンクページネーション前後のリンクステッパーパンくずリスト目次リンクカードFAB メニューステータスTanrei の作り方コントリビューションライセンスと帰属
ホーム基礎カラー

カラー

カラーロール、モノクロームのプライマリ、ただ 1 つのアクセント、そしてすべてのスキームを生成し検証する仕組み。

content_copyMarkdown で表示

Tanrei では、コンポーネントが色を選ぶことはありません。コンポーネントは primary や surface-container といったロールを求め、そのロールにどの色を当てるかは、有効なテーマが決めます。ロールは Tanrei の語彙が定め、その値は各デザインシステムのレイヤが定めます。

ロール

  • インテント: primary、secondary、および 4 つのステータスのインテント error・success・warning・info。それぞれ 4 つで 1 組です。その色、その上に置くコンテンツのための on- の色、より控えめな -container、そして on-…-container。
  • サーフェス: surface、surface-container-lowest から surface-container-highest までの 5 段階、それに surface-dim と surface-bright。どのサーフェスでも、その上のコンテンツには on-surface か、より控えめな on-surface-variant を使います。
  • アウトライン: outline と outline-variant(後述)。
  • インバースのロール。スナックバーのように、あえてテーマを反転させる要素のためのものです。
  • フィックストのロール。ライトでもダークでも同じトーンを保ちます。
  • ユーティリティ: scrim、shadow、focus-ring、およびエレベーションが使うリングと影の色。

塗りには、必ずそれ自身の on- ロールを組み合わせてください。コントラストのチェックが保証しているのは、この組み合わせです。

モノクロームのプライマリ

既定のテーマでは、primary はライトモードでほぼ黒、ダークモードでほぼ白です。そのため、画面で最も重要なアクションが、画面の中で最もコントラストの高いものになり、プロダクト自身の色と競合することもありません。secondary は、補助的なアクションのための、より柔らかいニュートラルです。

アクセントは 1 つ、控えめに

アクセントはコアの語彙には含まれません。既定の Tanrei システムが宣言しているパレット(シードは #30a3f0)で、宣言によってほかのインテントと同じ 4 つのロール、accent・on-accent・accent-container・on-accent-container が与えられます。コアのロールである focus-ring がこのパレットから色を取り、ほかにこのパレットを使うロールはありません。既定のシステムでは link はプライマリの色を取り、リンクは下線によって隣のテキストと見分けられます。プロダクトも同じ方法で自分のパレットを宣言します。再計算されてはならないブランドカラーや、クイズの「正解」と「不正解」がその例です。Material Design 3 を模したプリセットも tertiary をこの方法で宣言しており、Tanrei がその枠を全員のために持つことはしていません。アクセントを装飾に使わないでください。すべてが青ければ、何も目立ちません。

outline と outline-variant

2 つのアウトラインのロールは、見た目は似ていますが、役割は正反対です。

ロール 目的 コントラスト
outline 機能的な境界。空のテキストフィールド、未チェックのチェックボックス、アウトラインのボタンのように、コントロールがどこにあるかを示す唯一のものです。 すべてのサーフェスロールに対して 3:1 以上
outline-variant 装飾的な細い線。区切り線、カードの枠線、エレベーションのリング。取り除いても、情報が何も隠れてはなりません。 標準のコントラストでは要件なし。低いアルファの黒または白です。中コントラストでは 3:1 以上、高コントラストでは 4.5:1 以上をすべてのサーフェスロールに対して満たし、常に outline より弱くなります

注意

枠線が、コントロールがあることを示す唯一の手がかりであるなら、outline を使わなければなりません。アルファ 8% の細い線は感じがよい一方で、多くの人には見えません。

コントラストレベル

どのテーマにも 3 つのコントラストレベルがあります。標準が既定です。中と高では、コンテンツのロールが両極へ寄り、2 つのアウトラインのロールがどちらも強くなります。Web では、prefers-contrast: more のときに高コントラストが自動で適用されます。ネイティブのプラットフォームは、それぞれのシステム設定に従います。ここで試せます(スイッチはページ全体に適用されます)。

コントラスト

FilledTonalOutlinedText

スキームの生成方法

色を手で選ぶことはありません。システムファイル(tokens/systems/core.system.json)がパレットを宣言します。アクセントとエラーにはシードカラー、ニュートラルには色相と彩度です。さらに、ライトとダークの各コントラストレベルで、各ロールがどのパレットのどのトーンを取るかを、データとして記述します。ビルド時に、ジェネレーターが次のことを行います。

  1. 各キーカラーを、HCT 色空間のトーナルパレットに変換します。Apache-2.0 の material-color-utilities ライブラリを使います。この色空間では、トーンとコントラストの対応が予測できます。
  2. ニュートラルのパレットを、テーマの彩度に切り詰めます。既定では 0 で、純粋なグレーになります。
  3. ライトとダークの各コントラストレベルについて、すべてのロールにトーンを割り当てます。
  4. 結果を、DTCG のファイルとして tokens/generated/ に書き出します。

ジェネレーターのアルゴリズムにはバージョン(specVersion)があります。そのため、対応づけの変更は、すべての色がいつの間にかずれる出来事ではなく、レビューできる意図的な変更になります。

CI で強制される不変条件

テーマとコントラストの 6 通りの組み合わせすべてについて、次の条件を満たさなければ、トークンのビルドは失敗します。

  • すべての (ロール, on-ロール) の組が 4.5:1 に達している(2 つの高コントラストのスキームでは 7:1)。
  • outline が、すべてのサーフェスロールに対して 3:1 に達している。
  • focus-ring が、それを描くサーフェスに対して 3:1 に達している。

ビルドを通すためにしきい値を緩めることはできません。ロールと値の一覧は、カラーのトークンリファレンスにあります。