HTML+CSS+JSを使ってダークモードを作る方法

最近では、OSから始まり、アプリやWebサイトでもダークモードが使われるようになってきています。

最近WebのGoogle検索でもダークモードが使えるようになりました。

ダークモードに対応していなければ、Googleの検索でWebサイトに来た場合、ユーザーはダークモードの暗い検索画面から急に明るいWebサイトに飛ばされることになります。

ユーザーからしたら、Webサイトがダークモードに対応していて欲しいわけですから、ユーザービリティの向上につながります。

※この記事をより活用するには、HTML,CSS,JSの最低限の知識が必要になります。

HTML側の準備

<!DOCTYPE html>
<html lang="ja">
<head>
  <title>PAGE TITLE</title>
</head>
<body>
  <div>ダークモードのテスト</div>
  <div onclick="darkmode_set(0,true)">ダークモードを切り替える(ここをクリック)</div>
</body>
</html>

HTML側に準備は必要ありません。

ただし、(至極当然のことですが)bodyタグが一つのみ存在している必要があり、すべての表示される要素をbodyタグ内に収めるようにしてください。

また、darkmodeクラスを使うので、このクラスが使用されていないか確認してください。

CSS側の準備

div{
  margin:0;
}
/* ダークモード時に適用させるスタイルには、最初に[.darkmode]を付けて記述します。 */
.darkmode div{
  color:#fff;
  background:#333;
}

CSSには、あらかじめあったスタイルに加えて、ダークモード用に.darkmodeを先頭に置いたスタイルを作成してください。

.darkmode を設定すると、ダークモードの時にのみ適用されるようになります。

JavaScriptの準備

//ダークモードを反映させるプログラム
function darkmode_display_set(){
  if(localStorage.darkmode){
    document.body.classList.add('darkmode');
  }else{
    document.body.classList.remove('darkmode');
  }
}

//ダークモードのオンオフを切り替えるプログラム
//オン:darkmode_set(true);
//オフ:darkmode_set(false);
// を実行する。
//darkmode_set(0,true);
// とすると、トグルモードになり、もし今オンならオフへ、オフならオンへ切り替わる。
function darkmode_set(is_use,toggle){
  if(toggle&&localStorage.darkmode) is_use=0;
  if(toggle&&!localStorage.darkmode) is_use=1;
  if(is_use){
    localStorage.darkmode=1;
  }else{
    localStorage.removeItem('darkmode');
  }
  darkmode_display_set();
}

//ページが読み込まれた際にプログラムを実行
window.onload=function(){
  darkmode_display_set();
}

ダークモードに切り替えると、再読み込みしてもダークモードのままで居続けられるようにlocalStorageを使用して保存しています。

工夫すれば、ブラウザから、ユーザーのダークモードのデフォルト設定を取得して利用するという方法もあります。

すべてのサンプルコード

以上三つのコードを一ページにまとめると次のようになります。

<!DOCTYPE html>
<html lang="ja">
<head>
  <title>PAGE TITLE</title>
  <style>
  div{
    margin:0;
  }
  /* ダークモード時に適用させるスタイルには、最初に[.darkmode]を付けて記述します。 */
  .darkmode div{
    color:#fff;
    background:#333;
  }
  </style>
</head>
<body>
  <div>ダークモードのテスト</div>
  <div onclick="darkmode_set(0,true)">ダークモードを切り替える(ここをクリック)</div>
  <script>
  //ダークモードを反映させるプログラム
  function darkmode_display_set(){
    if(localStorage.darkmode){
      document.body.classList.add('darkmode');
    }else{
      document.body.classList.remove('darkmode');
    }
  }

  //ダークモードのオンオフを切り替えるプログラム
  //オン:darkmode_set(true);
  //オフ:darkmode_set(false);
  // を実行する。
  //darkmode_set(0,true);
  // とすると、トグルモードになり、もし今オンならオフへ、オフならオンへ切り替わる。
  function darkmode_set(is_use,toggle){
    if(toggle&&localStorage.darkmode) is_use=0;
    if(toggle&&!localStorage.darkmode) is_use=1;
    if(is_use){
      localStorage.darkmode=1;
    }else{
      localStorage.removeItem('darkmode');
    }
    darkmode_display_set();
  }

  //ページが読み込まれた際にプログラムを実行
  window.onload=function(){
    darkmode_display_set();
  }
  </script>
</body>
</html>

HTMLファイルにコピペしてブラウザで開いてみると、ダークモード(モドキ)の切り替えができていることとが分かると思います。

これを上手く埋め込むことで、Webサイトで簡単にダークモードを適用できます。

ダークモード:ユーザーのデフォルト設定を取得する

OSのデフォルト設定か、ブラウザのテーマ設定のデフォルトを取得するには、次のコードを使用します。

if(window.matchMedia('(prefers-color-scheme: dark)').matches === true){
  //デフォルト設定がダークモードだと実行される
  alert('あなたはダークモードです!');
}

先ほどのコードと組み合わせることも可能なので、是非プログラムを工夫してダークモードを作成してみてください。