JavaScriptでダークモードを切替・状態保存する方法とコード例

JavaScript・CSSで次のことがやりたい

  • 適当なチェックボックスを用意する
  • それで画面ダークモードを切り替え
  • ダークモードON/OFFも状態保存したい

その方法とか手順を知りたい人向けに、
具体的なJSコード例を交えて解説します!

1.対象となるフォームなどのHTML例

ダークモード切り替えと言った場合…

画面全体にダークモードを適用します。

ここでは次のようなHTMLフォームを作りました。

▼ 今回用意したフォームのHTML例

上記フォームではカスタムCSSに加えてBootstrapも使用してます。そこは本筋には全く関係ないので気にしないでください。

この状態ではダークモードではありません。

つまり非ダークモード=ライトモードです。

2.切り替え用のチェックボックスを追加

既存のHTMLに少しだけ細工します。

ダークモード切り替え用のチェックボックス

これをHTML内に追加しておきます。

▼ 一例を挙げるなら以下の通り

▼ 追加後のフォーム画面の見た目

デフォルトのフォームの見た目。チェックボックスのOn/Offでダークモードを切替する

追加する場所はどこでもいいです。

この例ではフォームの真上に取り付けました。でも普通はヘッダーメニューとかに切り替えボタン・アイコンのような形で埋め込む方がベターです。

HTMLでの下準備はこれにて完了

3.ダークモード用のCSSを追加する

ダークモード用のカスタムCSSを追加します。

といっても数行ほどの簡単なコードです。

▼ このようなCSSコードを適用

▼ 上記コードの :root について

:root は CSS の擬似クラスで、文書を表すツリーのルート要素を選択します。 HTML では :root は <html> 要素を表し、詳細度が高いことを除けば html セレクターと同等です。

引用元 : https://developer.mozilla.org/ja/docs/Web/CSS/:root

ルート要素に色反転をさせる効果を適用

より正確に書くなら全体を色反転させてから、色相環を180度回転させてます。僕は色関係には詳しくないので、詳しく知りたいならググってください。

こういうCSSを追加しとけばOKです。

4.JavaScriptでダークモード切り替え

そしたら最後の大詰めです。

チェックボックスON/OFF時の処理を書きます。

▼ 例えばこのようなJavaScriptコード作成

これでチェックボックスがONの時にダークモードになり、Offの時はライトモード(デフォルト状態)に切り替えできます。

どういう見た目とかは最後に紹介します。

5.ダークモード状態をlocalStorageに保存

ただし上記コードだと次の点が抜けてました。

  • ダークモードの状態が保存されない
  • ブラウザを閉じたらライトモードに戻る

だからダークモード状態を保存できるよう改良します。

▼ 先ほどのJSコードを次ように改良した

上記コードでは 'theme'  というキー名でlocalStorageにダークモード/ライトモードを文字列で記録してます。次回起動時にlocalStorageから値を参照できたら復元するみたいな感じで

これなら利便性も高くなりますよね。

 

ちなみにlocalStorageが利用可能かについて

ほとんどのブラウザでは問題なく使えます。
でも極一部では対応してない場合もあります。

▼ 使えるかの判定方法は次記事を参照

まあ最新ブラウザなら未対応はないはず…

ダークモードの見た目・切り替え時の動作例

こういう見た目・動作になりました。

▼ ダークモード切り替え時の見た目

ダークモード時の様子。上部の「ダークモードに切り替え」のチェックボックスをOn/Offするとダークモードの切り替えができる

▼ ダークモード・ライトモードの切り替え

実際にダークモード・ライトモードを切替している様子。状態はブラウザを閉じた後でも保存される

画像などは影響を受けません。

以上、JavaScriptでダークモード切り替えでした。

少し工夫すれば本格的なのができます。