Open2
【UI/UXデザイン】shadcn/ui テーマカラー ColorPallet設定について📝

shadcn/ui テーマカラー ColorPallet設定について📝

ライトモードとダークモードの色の設定📝
shadcn-uiとTailwindCSSを使ってライトモードとダークモードの色を決めるには、以下の手順で進めると効果的です。
1. TailwindCSSの設定
TailwindCSSでは、tailwind.config.js
でダークモードを有効化し、カスタムカラーを定義します。
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: 'class', // ダークモードをclassベースで切り替え
theme: {
extend: {
colors: {
// ライトモードとダークモード用のカスタムカラー
primary: {
light: '#3b82f6', // ライトモードのプライマリカラー(例: 青)
dark: '#60a5fa', // ダークモードのプライマリカラー(例: 明るい青)
},
background: {
light: '#ffffff', // ライトモードの背景
dark: '#1f2937', // ダークモードの背景
},
text: {
light: '#1f2937', // ライトモードのテキスト
dark: '#e5e7eb', // ダークモードのテキスト
},
},
},
},
plugins: [],
};
-
darkMode: 'class'
を設定することで、HTMLのclass="dark"
でダークモードを切り替え可能。 -
colors
でライト/ダーク用のカスタムカラーを定義。
2. CSSでのダークモード対応
shadcn-uiのコンポーネントはTailwindCSSベースなので、グローバルCSSでダークモードのスタイルを適用します。app/globals.css
などに以下を追加:
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--background: 255 255 255; /* ライトモードの背景(RGB) */
--foreground: 31 41 55; /* ライトモードのテキスト(RGB) */
}
.dark {
--background: 31 41 55; /* ダークモードの背景 */
--foreground: 229 231 235; /* ダークモードのテキスト */
}
/* shadcn-uiコンポーネントのカスタマイズ例 */
.button {
@apply bg-primary-light text-text-light;
}
.dark .button {
@apply bg-primary-dark text-text-dark;
}
-
:root
でライトモードのデフォルトカラーを定義。 -
.dark
クラスでダークモードのカラーを上書き。 - shadcn-uiのコンポーネント(例: ボタン)にカスタムカラーを適用。
3. shadcn-uiのテーマ統合
shadcn-uiはTailwindCSSと相性が良いですが、カスタムテーマを適用するには、コンポーネントのクラスを調整します。例えば、ボタンコンポーネントを以下のようにカスタマイズ:
// components/ui/button.jsx
import { cn } from "@/lib/utils";
export function Button({ children, className, ...props }) {
return (
<button
className={cn(
"bg-primary-light text-text-light dark:bg-primary-dark dark:text-text-dark",
className
)}
{...props}
>
{children}
</button>
);
}
-
cn
ユーティリティでクラスを動的に結合。 -
dark:
プレフィックスでダークモード用のスタイルを指定。
4. ダークモードの切り替え実装
ダークモードをユーザーが切り替えられるように、JavaScriptでdark
クラスをトグルします。例として、Next.jsでの実装:
// app/page.jsx
'use client';
import { useEffect, useState } from 'react';
export default function Home() {
const [isDark, setIsDark] = useState(false);
useEffect(() => {
if (isDark) {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
}, [isDark]);
return (
<div className="bg-background-light dark:bg-background-dark">
<button
onClick={() => setIsDark(!isDark)}
className="bg-primary-light text-text-light dark:bg-primary-dark dark:text-text-dark"
>
テーマ切り替え
</button>
<h1 className="text-text-light dark:text-text-dark">こんにちは!</h1>
</div>
);
}
-
useEffect
でdark
クラスをHTML要素に追加/削除。 - コンポーネントにライト/ダーク用のTailwindクラスを適用。
5. カラーの選び方(ベストプラクティス)
-
コントラスト:WCAGガイドラインに基づき、テキストと背景のコントラスト比を4.5:1以上に。
- 例: ライトモード
#1f2937
(濃いグレー)と#ffffff
(白)は良好。 - ダークモード
#e5e7eb
(薄いグレー)と#1f2937
(濃いグレー)も良好。
- 例: ライトモード
-
ブランドカラー:プライマリカラー(例: 青)はライト/ダークでトーンを調整(例:
#3b82f6
→#60a5fa
)。 -
ツール活用:
- Coolors:カラーパレット生成。
- Tailwind Color Generator:Tailwind用カスタムカラー作成。
6. テストと微調整
- ブラウザのデベロッパーツールでライト/ダークモードを切り替えて確認。
- ユーザビリティを考慮し、過度な色の変化を避ける(例: 派手すぎる蛍光色はNG)。
- shadcn-uiのコンポーネント(Button, Card, Inputなど)を一通りチェックし、テーマが一貫しているか確認。
まとめ
-
tailwind.config.js
でカスタムカラーを定義。 - グローバルCSSでライト/ダークモードの変数を設定。
- shadcn-uiコンポーネントに
dark:
プレフィックスでスタイル適用。 - テーマ切り替えロジックをJavaScriptで実装。
- コントラストやブランドに基づいたカラーを選ぶ。