0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

tailwindcss ダークモードの実装

0
Last updated at Posted at 2025-09-19

この記事の対象者

  • 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についてはこちら↓

app.css
@import "tailwindcss";
/* この一行を追加 darkについてオーバーライド*/
@custom-variant dark (&:where(.dark, .dark *));

HTML側では"dark:"から始まるクラスを定義しておくことで、ダークモード時の設定を書き込むことができます。

index.html
<html class="dark">
  <body>
    <div class="bg-white dark:bg-black">
      <!-- ... -->
    </div>
  </body>
</html>

この例だと背景色が白からダークモード時には黒色に変更されるという設定になっています。

属性定義

こちらでは属性についてdarkを定義して使うようになっています。

app.css
@import "tailwindcss";
/* この一行を追加 darkについてオーバーライド*/
@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));

この場合、下記のように"data-theme"という属性をhtmlタグに設定して使います。

index.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'
>

この場合、下の画像のようなボタンが出来上がります。

  • 通常時
    スクリーンショット 2025-10-03 9.33.30.jpg

  • ダークモード時
    スクリーンショット 2025-10-03 9.34.20.jpg

で、今のコードでは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に関する記述を追加

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?