無理しないでゆっくり休んでね!

WordPressでダークモードを簡単に実装するコード(プラグインなし)

ダークモードは、目に優しいデザインやバッテリーの節約に役立ち、スマホで使っている人も結構いると思います。

多くの海外製テーマはダークモード対応しています。対応できない場合はプラグインを使ってもいいです。僕は一応コーダーなので、できるだけ使いたくないですね。

この記事では、WordPressサイトにダークモードの切り替えボタンを簡単に実装するコードを解説します。

最低限バージョン(読まなくてもいい)

まず、最低限必要となるコードを載せます。

これは単に原理を説明するためのものであり、このコードを実際に使用することは推奨しません。

ステップ① CSSでダークモード用のスタイルを作成する

ダークモードってなんだろう。普通状態と比べると、色が異なるだけです。

なので、ダークモード時に適用されるスタイルをCSSに追加しましょう。

例えば、背景色とテキスト色を変更する場合、以下のようなコードを追加します。

body.dark-mode {
  background-color: #333;
  color: #f1f1f1;
}

これだけでは足りないです。

実際には多くの要素を変更する必要があります。

文章の最後に使えるテンプレートを添付します。

ステップ② ダークモードボタンを作成する

次に、ダークモードの切り替えボタンをHTMLに追加します。

以下のコードを、ボタンを配置したい場所に貼り付けてください。

ナビゲーションメニューやサイドバーなど、好きなところでいいです。

<button id="dark-mode-toggle">ダークモード</button>

ステップ③ JavaScriptで機能を実装する

ダークモードの切り替えボタンが機能するように、以下のJavaScriptコードを追加します。

document.getElementById('dark-mode-toggle').addEventListener('click', function() {
  document.body.classList.toggle('dark-mode');
});

完成版

テキストだけのボタンはあんまりにも普通すぎるので、僕が提供しているのはFont Awesome 5で表示されるアイコンです。

🌙のアイコンをクリックしてダークモードに切り替えます。

ダークモードのアイコンが🌞に変わります。

もう一度クリックすると元に戻ります。

ヘッダーメニューに入れたら、こんな感じです。

HTMLの部分はボタンを配置したい場所によって変わるので、最後で説明します。

コピペできるCSSとJavaScriptを先に見てみましょう。

ダークモード用CSS

このCSSを使うことで、WordPressサイトにダークモードを簡単に適用できます。

ただし、実際のサイトで使用する際には、適切なクラス名に置き換えてください。

また、他の要素に対してもダークモードのスタイルを適用する場合、以下のように追加の CSS を記述して、さまざまな要素に対応させることができます。

/* body 要素に適用するダークモードの背景色と文字色 */
body.night-mode {
  background-color: #1a1a1a;
  color: #f1f1f1;
}

/* ダークモード時のリンクテキスト色 */
.night-mode a {
  color: #51b7f0;
}

/* ヘッダーおよびフッターのダークモード背景色 */
.night-mode .your-header-class,
.night-mode .your-footer-class {
  background-color: #303030;
}

/* 画像のダークモード用フィルター */
.night-mode img {
  filter: brightness(0.8) contrast(0.9);
}

/* pre タグおよび code タグのダークモード背景色と文字色 */
.night-mode pre,
.night-mode code {
  background-color: #2f2f2f;
  color: #f1f1f1;
}

/* 引用ブロックのダークモード用ボーダー色、背景色、および文字色 */
.night-mode blockquote {
  border-color: #515151;
  background-color: #2f2f2f;
  color: #f1f1f1;
}

/* テーブルのダークモード背景色 */
.night-mode table {
  background-color: #303030;
}

/* テーブルの th および td 要素のダークモード用ボーダー色と文字色 */
.night-mode table th,
.night-mode table td {
  border-color: #515151;
  color: #f1f1f1;
}

/* テーブルの偶数行のダークモード背景色 */
.night-mode table tr:nth-child(even) {
  background-color: #3a3a3a;
}

/* 入力フィールドのダークモード用背景色、文字色、およびボーダー色 */
.night-mode input[type="text"],
.night-mode input[type="email"],
.night-mode input[type="password"],
.night-mode textarea {
  background-color: #303030;
  color: #f1f1f1;
  border-color: #515151;
}

/* ボタンおよび送信ボタンのダークモード用背景色と文字色 */
.night-mode button,
.night-mode input[type="submit"] {
  background-color: #51b7f0;
  color: #f1f1f1;
}
/* リスト要素 (ul, ol) のダークモード文字色 */
.night-mode ul,
.night-mode ol {
  color: #f1f1f1;
}

/* リスト要素内のリンクテキストのダークモード色 */
.night-mode ul a,
.night-mode ol a {
  color: #51b7f0;
}

/* フォーム要素のラベルのダークモード文字色 */
.night-mode label {
  color: #f1f1f1;
}

/* フォーム要素のプレースホルダーのダークモード文字色 */
.night-mode input::placeholder,
.night-mode textarea::placeholder {
  color: #b3b3b3;
}

/* セレクトボックスのダークモード背景色、文字色、およびボーダー色 */
.night-mode select {
  background-color: #303030;
  color: #f1f1f1;
  border-color: #515151;
}

/* ページネーションのダークモード背景色、文字色、およびボーダー色 */
.night-mode .pagination {
  background-color: #303030;
  color: #f1f1f1;
  border-color: #515151;
}

ダークモード用JavaScript

function toggleNightMode() {
  var nightModeIcon = document.getElementById('night-mode-icon');
  document.body.classList.toggle('night-mode');
  
  if (document.body.classList.contains('night-mode')) {
    nightModeIcon.classList.remove('fa-moon');
    nightModeIcon.classList.add('fa-sun');
    localStorage.setItem('nightMode', 'enabled');
  } else {
    nightModeIcon.classList.remove('fa-sun');
    nightModeIcon.classList.add('fa-moon');
    localStorage.setItem('nightMode', 'disabled');
  }
}

document.addEventListener('DOMContentLoaded', function() {
  var nightModeToggle = document.querySelector('.night-mode-toggle > a');
  if (nightModeToggle) {
    nightModeToggle.addEventListener('click', function(e) {
      e.preventDefault();
      toggleNightMode();
    });

    var nightModeSetting = localStorage.getItem('nightMode');
    if (nightModeSetting === 'enabled') {
      toggleNightMode();
    }
  }
});

CSSとJavaScriptはどこに貼り付ける?

style.cssにCSSコードを追加し、functions.phpにJavaScriptコードを追加します。一番最後で結構です。

切り替えボタン

これは参考できるコードです。

すでにFont Awesome を導入しているテーマは最初の2行を削除してください。

<!-- Font Awesome 5 を読み込む -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css" integrity="sha384-KyZXEAg3QhqLMpG8r+Knujsl5/RO2GwzN2Q5nU/5j5m5z5pEsnfTL5JjJ1z5f45j" crossorigin="anonymous">

<!-- ダークモード切り替えボタン -->
<div class="night-mode-toggle">
  <a href="#" title="ダークモードを切り替える">
    <i id="night-mode-icon" class="fas fa-moon"></i>
  </a>
</div>

まとめ

このサイトのために書いたコードですが、結局削除することにしました。なぜかというと、CSSの部分は面倒くさいです。これから多くの文章を書いて、サイトリニューアルをするつもりです。ダークモードのスタイルにこだわる暇はありません。

お役に立てましたら幸いです。ご不明点やご質問がございましたら、お気軽にコメント欄よりお問い合わせください。

コメント

タイトルとURLをコピーしました