この記事の対象者
- Tailwind CSSを使い始めた人
- 手軽にダークモードを実装したい人
Tailwind CSSを簡単に説明
Tailwind CSSはHTMLに直接スタイルを書き込んで実装ができるCSSフレームワークです。
Tailwind CSSで設定された独自のクラス名を駆使して実装を行うので、最初は学習が必要ですが
- クラス名を考える必要がないので実装が楽になる
- デザインの統一感がある程度補填される
などのメリットがあります。
逆に
- HTMLに書き込む以上、複数クラスを適用していくと可読性が下がる
- 自分でデザインにこだわりたい場合、別途設定を自分で行う必要がある
などのデメリットもあります。
ダークモードの実装
では今回の主題のダークモードの実装についてです。
ダークモードは最近のweb開発ではほとんど必須の要件になっているイメージですが、ダークモードの実装についても手軽にできるようになっています。
環境
- tailwindcss v4.1
ちなみにprefers-color-schemeでOSのダークモードの設定が取得できるので、それを適用する方法もあるのですが、今回は後から手動変更する場合の実装について書きます。
ダークモードの実装については実装方法が大きく分けて2パターンあって、
- クラス定義
- 属性定義
の順で説明します。
クラス定義
v4からcustom-variantという記法で変数を定義することができるようになっています。
これを利用して"dark"というクラス名についてオーバーライドする方法です。
custom-variantについてはこちら↓
@import "tailwindcss";
/* この一行を追加 darkについてオーバーライド*/
@custom-variant dark (&:where(.dark, .dark *));
HTML側では"dark:"から始まるクラスを定義しておくことで、ダークモード時の設定を書き込むことができます。
<html class="dark">
<body>
<div class="bg-white dark:bg-black">
<!-- ... -->
</div>
</body>
</html>
この例だと背景色が白からダークモード時には黒色に変更されるという設定になっています。
属性定義
こちらでは属性についてdarkを定義して使うようになっています。
@import "tailwindcss";
/* この一行を追加 darkについてオーバーライド*/
@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));
この場合、下記のように"data-theme"という属性をhtmlタグに設定して使います。
<html data-theme="dark">
<body>
<div class="bg-white dark:bg-black">
<!-- ... -->
</div>
</body>
</html>
形式としてはクラスでの設定方法と同じなので簡単ですね。
hover等との合わせ技
例えばボタンのコンポーネントだけ分けて実装していたとして、以下のようにしたとします。
<button
className='bg-blue-700 text-white p-2 rounded-lg active:scale-110 dark:bg-green-500 hover:bg-blue-500'
>
この場合、下の画像のようなボタンが出来上がります。
で、今のコードではhoverにbg-blue-500だけ設定してあるのでダークモード時にカーソルを合わせるとbg-blue-500の色が適用されてしまいます。
解決策として
<button
className='bg-blue-700 text-white p-2 rounded-lg active:scale-110 dark:bg-green-500 hover:bg-blue-500 dark:hover:bg-green-300'
>
dark:hoverという要素を追加してそこに設定を加えればダークモード時の個別設定ができます。
使い分けどうするのか?
tailwindcssでのダークモードの実装について書きました。
使い分けとしては単純にライト/ダークモードで簡単に分けるだけならclassで定義したほうが管理が簡単かと思います。
逆にdata-themeのような属性で管理するのは
- 別のテーマも作成して切り替えられるようにしたい場合
- 局所的にモード変えるような実装をしたい場合
などに有用かと思います。
参考
tailwindcss Dark mode(https://tailwindcss.com/docs/dark-mode)
編集
追記. 10/3 hoverに関する記述を追加

