CSS変数を使ったTailwind CSSカスタムカラー

CSS変数としてカスタムカラーパレットを定義し、Tailwind CSS設定と統合してユーティリティクラスをシームレスに生成します。

Color Scales

詳細な説明

CSS変数とTailwind CSSの統合

Tailwind CSSは設定内でCSSカスタムプロパティの参照をサポートしています。このアプローチにより、ユーティリティクラスのワークフローを維持しながら、CSS変数の実行時切り替えの利点が得られます。

ステップ1 — 変数の定義

:root {
  --color-brand-50:  #eef2ff;
  --color-brand-100: #e0e7ff;
  --color-brand-200: #c7d2fe;
  --color-brand-300: #a5b4fc;
  --color-brand-400: #818cf8;
  --color-brand-500: #6366f1;
  --color-brand-600: #4f46e5;
  --color-brand-700: #4338ca;
  --color-brand-800: #3730a3;
  --color-brand-900: #312e81;
  --color-brand-950: #1e1b4b;
}

ステップ2 — tailwind.config.jsで参照

module.exports = {
  theme: {
    extend: {
      colors: {
        brand: {
          50:  'var(--color-brand-50)',
          100: 'var(--color-brand-100)',
          // ... 950まで
        },
      },
    },
  },
};

ステップ3 — ユーティリティクラスの使用

<button class="bg-brand-500 text-brand-50 hover:bg-brand-600">
  Click me
</button>

実行時のテーマ切り替え

実際のカラー値がCSS変数にあるため、テーマの切り替えは:rootブロックのオーバーライドだけで済み、リビルドは不要です。これはshadcn/uiのようなコンポーネントライブラリがテーマを処理する方法です。

注意点

Tailwindの不透明度修飾子(例:bg-brand-500/50)は、値がvar()を経由したプレーンな16進数の場合は動作しません。不透明度修飾子を有効にするには、変数を生のHSLまたはRGBチャンネルとして定義し、設定でhsl(var(--color-brand-500))として再構成します。

ユースケース

カスタムブランドカラーをユーティリティクラスとして使用でき、CSSをリビルドせずに実行時にテーマを切り替えられるTailwind CSSプロジェクト。

試してみる — CSS Variable Generator

フルツールを開く