エイリアシング

色にセマンティックなエイリアスを提供するためのガイドです。

セマンティックエイリアス

bluered のように、カラースケールを実際のスケール名で参照することはうまく機能します。しかし、特にテーマ設定に関しては、accentprimaryneutralbrand のようなセマンティックエイリアスを作成すると便利なことがよくあります。

/*
* Note: Importing from the CDN in production is not recommended.
* It's intended for prototyping only.
*/
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/blue.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/green.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/yellow.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/red.css';
:root {
--accent-1: var(--blue-1);
--accent-2: var(--blue-2);
--accent-3: var(--blue-3);
--accent-4: var(--blue-4);
--accent-5: var(--blue-5);
--accent-6: var(--blue-6);
--accent-7: var(--blue-7);
--accent-8: var(--blue-8);
--accent-9: var(--blue-9);
--accent-10: var(--blue-10);
--accent-11: var(--blue-11);
--accent-12: var(--blue-12);
--success-1: var(--green-1);
--success-2: var(--green-2);
/* repeat for all steps */
--warning-1: var(--yellow-1);
--warning-2: var(--yellow-2);
/* repeat for all steps */
--danger-1: var(--red-1);
--danger-2: var(--red-2);
/* repeat for all steps */
}

このアプローチでは、複数のセマンティクスに同じスケールを使用する必要があるという問題に遭遇する可能性が高くなります。一般的な例としては、以下のようなものがあります。

  • yellow を "warning" にマッピングした場合、"pending" を伝えるためにも yellow が必要になる場合があります。
  • red を "danger" にマッピングした場合、"error" や "rejected" を伝えるためにも red が必要になる場合があります。
  • green を "success" にマッピングした場合、"valid" を伝えるためにも green が必要になる場合があります。
  • blue を "accent" にマッピングした場合、"info" を伝えるためにも blue が必要になる場合があります。

このシナリオでは、同じスケールにマッピングされる複数のセマンティックエイリアスを定義できます。

/*
* Note: Importing from the CDN in production is not recommended.
* It's intended for prototyping only.
*/
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/blue.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/green.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/yellow.css';
:root {
--accent-1: var(--blue-1);
--accent-2: var(--blue-2);
--info-1: var(--blue-1);
--info-2: var(--blue-2);
--success-1: var(--green-1);
--success-2: var(--green-2);
--valid-1: var(--green-1);
--valid-2: var(--green-2);
--warning-1: var(--yellow-1);
--warning-2: var(--yellow-2);
--pending-1: var(--yellow-1);
--pending-2: var(--yellow-2);
}

または、適切なセマンティックエイリアスがない状況では、チームメイトに元のスケール名を参照することを推奨することもできます。

ユースケースエイリアス

Radix Colors スケールの各ステップは、特定のユースケース向けに設計されています。どのステップを使用するかをチームが把握できるように、設計されたユースケースに基づいてエイリアスを提供できます。

/*
* Note: Importing from the CDN in production is not recommended.
* It's intended for prototyping only.
*/
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/blue.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/green.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/yellow.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/red.css';
:root {
--accent-base: var(--blue-1);
--accent-bg-subtle: var(--blue-2);
--accent-bg: var(--blue-3);
--accent-bg-hover: var(--blue-4);
--accent-bg-active: var(--blue-5);
--accent-line: var(--blue-6);
--accent-border: var(--blue-7);
--accent-border-hover: var(--blue-8);
--accent-solid: var(--blue-9);
--accent-solid-hover: var(--blue-10);
--accent-text: var(--blue-11);
--accent-text-contrast: var(--blue-12);
--success-base: var(--green-1);
--success-bg-subtle: var(--green-2);
/* repeat for all steps */
--warning-base: var(--yellow-1);
--warning-bg-subtle: var(--yellow-2);
/* repeat for all steps */
--danger-base: var(--red-1);
--danger-bg-subtle: var(--red-2);
/* repeat for all steps */
}

ここでも、このアプローチでは、複数のユースケースに同じステップを使用する必要があるという問題に遭遇する可能性が高くなります。一般的な例としては、以下のようなものがあります。

  • ステップ 9 はソリッドな背景用に設計されていますが、入力プレースホルダーテキストにも使用できる場合があります。
  • ステップ 8 はホバーされたコンポーネントの境界線用に設計されていますが、フォーカスリングにも適しています。

これらの場合、同じステップにマッピングされる複数のエイリアスを定義できます。

/*
* Note: Importing from the CDN in production is not recommended.
* It's intended for prototyping only.
*/
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/gray.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/blue.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/green.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/yellow.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/red.css';
:root {
--gray-solid: var(--gray-9);
--gray-placeholder-text: var(--gray-9);
--accent-border-hover: var(--blue-8);
--accent-focus-ring: var(--blue-8);
}

または、ユースケースにエイリアスがない状況では、チームメイトに元のステップ番号を参照することを推奨することもできます。

変更可能なエイリアス

ライトモードとダークモードの両方を設計する場合、変数をライトモードではある色に、ダークモードでは別の色にマッピングする必要がある場合があります。一般的な例としては、以下のようなものがあります。

  • ライトモードでは白い背景、ダークモードでは微妙なグレーの背景を持つコンポーネント。例:Card、Popover、DropdownMenu、HoverCard、Dialog など。
  • ライトモードでは透明な黒の背景、ダークモードでは透明な白の背景を持つコンポーネント。例:Tooltip。
  • ライトモードでは彩度の高い透明なグレー、ダークモードでは純粋な黒のシャドウ。
  • ライトモードでは薄い透明な黒、ダークモードでは濃い透明な黒のオーバーレイ。
/*
* Note: Importing from the CDN in production is not recommended.
* It's intended for prototyping only.
*/
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/slate.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/slate-alpha.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/white-alpha.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/black-alpha.css';
:root {
--panel: white;
--panel-contrast: var(--black-a9);
--shadow: var(--slate-a3);
--overlay: var(--black-a8);
}
.dark {
/* Remap your colors for dark mode */
--panel: var(--slate-2);
--panel-contrast: var(--white-a9);
--shadow: black;
--overlay: var(--black-a11);
}

"CardBg" や "Tooltip" のような特定の変数名の使用は避けてください。各変数を複数のユースケースで使用する必要がある可能性が高いためです。

スケールの名前変更

必要に応じて、スケール名を変更できます。理由としては、以下のようなものが考えられます。

  • 彩度の高いグレーを gray に名前変更して、シンプルにする。
  • skygrassbluegreen に名前変更して、直感的な名前にする。
  • Discord が blurple を使用しているように、ブランドに合わせてスケール名を変更する。
/*
* Note: Importing from the CDN in production is not recommended.
* It's intended for prototyping only.
*/
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/slate.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/sky.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/grass.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/violet.css';
@import 'https://cdn.jsdelivr.net/npm/@radix-ui/colors@latest/crimson.css';
:root {
--gray-1: var(--slate-1);
--gray-2: var(--slate-2);
--blue-1: var(--sky-1);
--blue-2: var(--sky-2);
--green-1: var(--grass-1);
--green-2: var(--grass-2);
--blurple-1: var(--violet-1);
--blurple-2: var(--violet-2);
--caribbean-sunset-1: var(--crimson-1);
--caribbean-sunset-2: var(--crimson-2);
}