shadcn/uiテーマジェネレーター(OKLCH)
shadcn/uiテーマジェネレーター
shadcn/uiテーマジェネレーター:OKLCHのCSS変数 | We.Inc
ブランドの色相、彩度、角丸を選ぶと、ライトモードとダークモード両方のshadcn/ui CSS変数をすべてOKLCHで生成します。ライブプレビューとコントラストチェック付きです。
shadcn/uiのコンポーネントは、--primary、--muted、--borderなど、OKLCHで書かれたCSS変数から色を読み取ります。ここで色相、彩度、明度、グレーの色味、角丸を選び、ライトとダークのライブプレビューとコントラスト比を確認してから、生成された:rootと.darkのブロックをグローバルスタイルシートに貼り付けましょう。
どのテーマでも定義される変数のペア
- --background
- --foreground
- ページ本体
- --card / --popover
- --card-foreground / --popover-foreground
- カード、メニュー、ダイアログ
- --primary
- --primary-foreground
- デフォルトのボタン、アクティブ状態
- --secondary / --muted
- --secondary-foreground / --muted-foreground
- 控えめなボタン、ヒント、キャプション
- --accent
- --accent-foreground
- ホバー中のメニュー項目
テーマ設定のドキュメントでは約30個の変数が定義されています。プライマリカラーを変えると、その上で読みやすく保てるテキスト色も変わるため、手で編集すると時間がかかります。このジェネレーターは、いくつかの選択から変数一式を導き出し、各背景面に読みやすい前景色を選び、一般的なコントラスト目標を下回るペアを警告します。
- プリセットから始めるか、スライダーでプライマリの色相、彩度、明度を設定します。見本には色が表示され、sRGBの範囲外なら警告が出ます。
- グレーの色味を上げると、背景、枠線、控えめなテキストにブランドの色相がほんのり加わります。0なら純粋なニュートラルのままです。
- プレビューをライトとダークで切り替え、各背景面上のテキストのコントラスト表を確認します。
- CSSをコピーし、globals.cssにある対応する:rootと.darkのブロックを置き換えます。これらの変数をTailwindのユーティリティに対応付ける既存の@theme inlineブロックはそのまま残してください。
- 一日中使うインターフェースでは、プライマリの彩度を0.12〜0.2程度の控えめな値にしましょう。彩度が高すぎると、大きなボタンが派手に見えます。
- 同じ色でも暗い背景では暗く見えるため、ダークテーマではプライマリの明度を少し上げています。
- 本文テキストと背景の間は最低4.5:1を目指しましょう。控えめなテキストは意図的に薄くしているので、別途確認してください。
- 警告色など独自の色を追加する場合は、テーマ設定のドキュメントにあるとおり、両方のブロックで定義し、@theme inlineに--color-warningの項目を追加しましょう。
よくある質問
HSLではなくOKLCHを使うのはなぜですか?
OKLCHの明度は色の見た目の明るさに沿っているので、Lが同じ2色は色相が違っても同じくらい明るく感じられます。そのため、対になるライトとダークのセットが作りやすくなります。現在の公式テーマ設定ドキュメントは、すべての色にOKLCHを使っています。
OKLCHの各数値の意味は?
Lは0(黒)から1(白)までの明度、Cは彩度で色の鮮やかさを表し、グレーは0から始まります。Hは度単位の色相角です。oklch(1 0 0 / 10%)のように、スラッシュの後に任意でアルファを付けられます。
--radiusは何を変えますか?
コンポーネントはこの1つの値をもとに角を丸めます。テーマ設定のドキュメントではデフォルトが0.625remで、@theme inlineブロックがそこから小さい段階と大きい段階の角丸を導き出します。
古いプロジェクトでも使えますか?
古いテンプレートのプロジェクトでは、色を別の形式で保存し、Tailwindの設定で別の方法で対応付けていることがあります。何かを置き換える前に、自分のglobals.cssとここの変数を比べてください。
コントラスト比は正確ですか?
各OKLCHの色をsRGBに変換し、範囲外の値は切り詰めたうえでWCAG 2の計算式を使っています。範囲外の色は、広色域の画面では少し違って表示されます。
パレットの導き方
- プライマリカラーは、プライマリ、リング、サイドバーのプライマリの各変数に使われます。背景、枠線、控えめなテキストのグレーは1つの色相を共有し、色味のスライダーで決まるごくわずかな彩度を持つので、色が付いて見えることなくブランドとのつながりが感じられます。
- 各前景色は、背景面とのコントラストを測り、白に近い色と黒に近い色のうち読みやすいほうを選んで決めます。チャートの色はプライマリの色相から色相環を一定間隔で回るので、系列を見分けやすく保てます。
ダークモードの細かな点
- ダークのブロックでは、枠線と入力欄に不透明なグレーではなく低アルファの白を使い、どんな背景面の上でもなじむようにしています。カードはページの背景より少し明るくして、レイヤーが見分けられるようにしています。
- 特にダークモードではフォーカスリングを確認しましょう。白の上ではっきり見えるリングも、濃紺のページでは消えてしまうことがあります。
出力例:Blueプリセット
これはジェネレーターがBlueプリセットで実際に書き出す内容です。globals.cssの色のブロックに上書きして貼り付けてください。
globals.cssの色のブロック
ライトの値は:rootに、ダークの値は.darkに入り、どちらもOKLCHです。
独自のカラートークンを追加する
bg-warningとして使える警告色
両方のモードでペアを定義し、@theme inlineを通じてTailwindに公開します。
- ニュートラル
- ブルー
- バイオレット
- グリーン
- オレンジ
- ローズ
プリセット:ニュートラル、ブルー、バイオレット、グリーン、オレンジ、ローズ。色相、彩度、明度、グレーの色味、角丸を調整し、ライトとダークでプレビューして、CSSをコピーします。
プロジェクトを作成
新しいプロジェクトをワンクリックでデプロイ。
名前
Acmeのサイト
デプロイ
キャンセル
削除
ホバー中のメニュー項目
チャートの色
テーマを作成
プリセット
sRGBで約{hex}
、標準の色域を外れるため画面では切り詰められます
色相:{n}°
彩度:{n}
明度:{n}
グレーの色味:{n}
角丸:{n}rem
プレビューモード
ライト
ダーク
ライトモードのコントラスト(WCAG 2の比率)
ダークモードのコントラスト(WCAG 2の比率)
背景面上のテキスト
比率
{b}上の{f}
合格
不足
CSSをコピー
無料で始める · クレジットカード不要
関連: 無料ツール|ビジネス向け計算・生成ツール
製品
ご利用いただける方
機能
リソース
会社情報
サイトマップを見る