ダークモード対応

プラグインなしでダークモードに対応します。
設置作業は下記の通りです。
参考サイト SWELLをダークモードに対応させよう【WordPress】

  • Javascript ファイルを作成しアップロードします
  • ダークモードトグルボタンの設置します
  • style.css にCSSを追記します

1.Javascript ファイルの作成とアップロード

1.スクリプトを読み込む設定
下記のコードを、次の手順でbodyダグ終了直前に貼り付けます。
WPダッシュボード > 外観カスタマイズ > 高度な設定 > bodyダグ終了直前に出力するコード

<script src="/wp-content/themes/swell_child/scripts.js"></script>

2.ダークモード用のJavascript「scripts.js」を作成し、下記の場所にアップロードします。
  「scripts.js」のアップロード先 SWELL 子テーマディレクトリ > swell_child

  「scripts.js」のソースコード

/* --------------------
ダークモード
-------------------- */
// OSの設定を判定
const osDark = window.matchMedia("(prefers-color-scheme: dark)");

// スイッチのinput要素(checkbox)
const modeSwitch = document.getElementById("mode-toggle");

// ダークモードがオンの時に実行する処理
function darkModeOn() {
  document.documentElement.classList.add("darkmode"); // ルート要素<html>にクラスを追加
  modeSwitch.checked = true;
}
// ダークモードがオフの時に実行する処理
function darkModeOff() {
  document.documentElement.classList.remove("darkmode"); // クラスの削除
  modeSwitch.checked = false;
}

// イベントリスナー
const listener = (event) => {
  if (event.matches) {
    darkModeOn();
  } else {
    darkModeOff();
  }
};
// リスナー登録
osDark.addEventListener("change", listener);
// 初期化処理
listener(osDark);

// スイッチの操作に応じて切り替え処理
modeSwitch.addEventListener("change", () => {
  if (modeSwitch.checked) {
    darkModeOn();
    style = "dark";
  } else {
    darkModeOff();
    style = "light";
  }
  localStorage.setItem("mode", style);
});

// ロード時の状況に応じて切り替え
if (localStorage.getItem("mode") === "dark") {
  darkModeOn();
} else if (localStorage.getItem("mode") === "light") {
  darkModeOff();
}

2.ダークモードトグルボタンの設置

ウィジットの「共通サイドバー」、「記事上部」にカスタムHTMLウィジットにコードをコピペして挿入します。

<div class="mode-wrap">
    <input type="checkbox" id="mode-toggle" tabindex="0">
    <label for="mode-toggle"><span></span></label>
</div>

3.style.css に追記

下記の「ダークモードトグル」と「ダークモードの色設定」のコードをSWELL子テーマディレクトリ > swell_child > style.cssに書き込みます。

「ダークモードトグル」

/*--------------------------------------
ダークモードトグル
--------------------------------------*/
.mode-wrap #mode-toggle {
  display: none;
}

.mode-wrap #mode-toggle + label {
  font-size: 1rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: 2em;
  width: 4em;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border-radius: calc(2em / 2);
  background-size: auto 8em;
  background-position: bottom;
  background-image: -webkit-gradient(
    linear,
    left top,
    left bottom,
    from(#021037),
    color-stop(19%, #20206a),
    color-stop(66%, #4184b1),
    to(#62e7f7)
  );
  background-image: linear-gradient(
    180deg,
    #021037 0%,
    #20206a 19%,
    #4184b1 66%,
    #62e7f7 100%
  );
  -webkit-transition: 0.2s;
  transition: 0.2s;
  border: 0.125em solid #eef3f6;
  overflow: hidden;
  cursor: pointer;
}

.mode-wrap #mode-toggle + label span {
  background: #fffad8;
  border-radius: 50%;
  height: 2em;
  width: 2em;
  -webkit-transform: translateX(-0.125em) scale(0.65);
  transform: translateX(-0.125em) scale(0.65);
  -webkit-transition: 0.2s;
  transition: 0.2s;
  cursor: pointer;
  -webkit-box-shadow: 0 0 0.25em 0.0625em #fbee8d, 0 0 2em 0 #ffeb3b,
    inset -0.25em -0.25em 0 0 #fbee8e,
    inset -0.3125em -0.3125em 0 0.625em #fff5b2;
  box-shadow: 0 0 0.25em 0.0625em #fbee8d, 0 0 2em 0 #ffeb3b,
    inset -0.25em -0.25em 0 0 #fbee8e,
    inset -0.3125em -0.3125em 0 0.625em #fff5b2;
  margin-top: -0.125em;
}

.mode-wrap #mode-toggle:checked + label {
  background-position: top;
  border-color: #1a242f;
}

.mode-wrap #mode-toggle:checked + label span {
  background: transparent;
  -webkit-transform: translateX(calc(100% - 0.125em)) scale(0.65);
  transform: translateX(calc(100% - 0.125em)) scale(0.65);
  -webkit-box-shadow: inset -0.1875em -0.1875em 0 0 #fbe7ef,
    inset -0.5625em -0.5625em 0 0 #fffff7;
  box-shadow: inset -0.1875em -0.1875em 0 0 #fbe7ef,
    inset -0.5625em -0.5625em 0 0 #fffff7;
}

「ダークモードの色設定」
.darkmodeの部分はサイトに合わせてオリジナルのコードを修正しています。

/* ダークモード色指定 */
.darkmode {
--color_main: #07263c; /*テーマ色*/
--color_text: #f9f9f9; /*メイン文字色*/
--color_link: #2f95d8; /*リンク色*/
--color_gray: #333; /*ブロック背景色*/
--color_htag: var(--color_main); /*見出し色*/
--color_bg: #2d2d2d; /*記事背景色*/
--color_header_bg: var(--color_main); /*ヘッダー色*/
--color_header_text: #ffffff; /*ヘッダー背景色*/
--color_footer_bg: var(--color_main); /*フッター背景色*/
--color_footer_text: #ffffff; /*フッター文字色*/
}

body {
  transition: background 0.3s ease-in;
}

/*--------------------------------------
色調整
--------------------------------------*/
/*パンくず*/
.darkmode #body_wrap #breadcrumb {
  background: var(--color_bg);
}

/*モーダル目次*/
.p-indexModal__inner {
  background: var(--color_bg);
  color: var(--color_text);
  opacity: 0.8;
}

/*吹き出し色*/
.darkmode .c-balloon__text {
  filter: brightness(0.7) saturate(150%) contrast(150%);
}

/*段落*/
.darkmode p[class*="is-style"] {
  filter: brightness(0.7) saturate(150%) contrast(150%);
}

.darkmode .is-style-crease {
  color: var(--swl-text_color--black);
}

/*グループ*/
.darkmode .is-style-desktop > .wp-block-group__inner-container,
.darkmode .is-style-browser_mac > .wp-block-group__inner-container {
  background: var(--color_bg);   color: var(--color_text);
}

/*画像とアイキャッチ*/
.darkmode .post_content .wp-block-image img,
.darkmode .c-postThumb__figure .c-postThumb__img,
.darkmode .p-articleThumb__img {
  filter: brightness(0.8) saturate(120%);
}

/*目次、トップ戻るボタン*/
.darkmode .c-fixBtn {
  background: var(--main-color);
  color: var(--color_text);
}

/*シェアボタン*/
.c-shareBtns__btn:not(:hover) .c-shareBtns__icon,
.-fix .c-shareBtns__btn:not(:hover) {
  filter: brightness(0.9);
}

/*スマホ開閉メニュー*/
.darkmode .p-spMenu__inner::before {
  background: var(--color_bg);
  opacity: 0.9;
}

.darkmode .p-spMenu__body {
  color: var(--color_text);
}

.darkmode .p-spMenu__closeBtn {
  color: var(--color_text);
}

.darkmode .p-spMenu__body::-webkit-scrollbar {
  background: rgba(255, 255, 255, 0.1);
  height: 24px;
  border-radius: 24px;
}
目次