近年のトレンドとして、ダークモード(ナイトモード)の採用が進んでいます。
Windows、Mac、そして 次期 iOS でもダークモードが実装される予定で、Android も 対応し始めました。
ダークモードのメリットとしてはアプリの見た目が暗くなるので、目にもバッテリーにも優しくなることです。
YouTubeやtwitter、そしてChromeなどのアプリではダークモードを利用することができるようになりましたが、ウェブサイトのダークモード対応は現状としてほとんど進んでいません。ダークモード化に手間がかかる上、PVに影響しないという判断なのでしょう。
黒系が主体のサイトというと昔のアングラサイトのようなイメージがありますが、慣れると結構見やすいと思います。私自身編集に使うエディタはずっと黒背景で使っていますが明らかに目が疲れにくいですからね。
この記事では、WordPress をダークモードを対応させる2通りの方法を紹介します。検証したテーマはSANGOです。その他のテーマを利用している場合は修正が必要です。
ダークモードの対応方法
- OS の設定のダークモードに自動で合わせる (CSSメディアクエリ)
- 読者がボタンで手動切り替え (Javascript)
1つめは Windows、Macのダークモードや、iOS、Androidのダークモードに設定した場合にブラウザが自動判定して表示する方法です。
2つめは ブログの読み手が設置してあるダークモードボタンをクリックすることで記事がダークモードにするやり方です。
あわせて読みたい
THE SONIC でダークモードを導入する手順 【プラグインなし】
最近ではさまざまなアプリでダークモード(暗いデザイン)が採用されるケースが増えています。 ダークモードを採用するメリットとしては以下のようなものが考えられます。…
1. OSレベルでのダークモード対応方法
メディアクエリ @media (prefers-color-scheme: dark) を使ってダークモードを検出する方法です。
ブラウザの対応状況の確認はこちらの Can I use…で確認できます。
子テーマ内の style.css に追記します。
!important を付与しないとほとんど機能しないのでご注意ください。
またCSS変数を利用しているのでInternet Explorerでは機能しません。
メインの背景色、文字色は :root 以下の変数で指定しています。
–deep-bg-color: #37526e;
赤字の部分を好きな色に変更してください。
@media (prefers-color-scheme: dark) {
:root {
--deep-bg-color: #37526e;
--middle-bg-color: #506780;
--pale-bg-color: #5F7994;
--body-color: #fff;
--title-color: #fff;
--gray-color: #ddd;
--para-font-color: #555;
}
.m-footer-dark a, .m-footer-white a{
display:none !important;
}
.fixed-menu ul{
display:none !important;
}
.header{
background-color: var(--deep-bg-color, #37526e) !important;
}
#footer-menu{
background-color: var(--deep-bg-color) !important;
}
body {
background-color: var(--middle-bg-color, #506780) !important;
color: var(--body-color, #fff) !important;
}
#entry {
background: var(--pale-bg-color, #5F7994) !important;
}
#archive_header{
background-color: var(--deep-bg-color, #37526e) !important;
border-color: var(--deep-bg-color, #37526e) !important;
}
h1.entry-title{
color: var(--title-color, $fff) !important;
}
.entry-content h2 {
color: var(--pale-bg-color, #5F7994) !important;
background-color: var(--deep-bg-color, #37526e) !important;
}
.widget{
background: var(--pale-bg-color, #5F7994) !important;
}
#s{
background-color: var(--pale-bg-color, #5F7994) !important;
color: var(--gray-color, #ddd);
}
#s::placeholder{
color: #fff !important;
}
.widgettitle{
background-color: var(--deep-bg-color, #37526e) !important;
color: var(--gray-color, #ddd) !important;
}
.widget ul li a{
color: var(--gray-color, #ddd) !important;
}
#searchsubmit{
background-color: var(--deep-bg-color, #37526e) !important;
}
.sidelong__article{
background-color: var(--pale-bg-color, #5F7994) !important;
}
.sidelong__article-info{
color: var(--gray-color, #ddd) !important;
}
.updated, .entry-time{
color: var(--gray-color, #ddd) !important;
}
div.rep {
color: var(--gray-color, #ddd) !important;
}
.comment-notes{
color: var(--gray-color, #ddd) !important;
}
div.comment{
background-color: var(--deep-bg-color, #37526e) !important;
}
a.comment-reply-link{
background-color: var(--pale-bg-color, #5F7994) !important;
}
.sgb-heading__text{
color: var(--gray-color, #ddd) !important;
}
.sgb-box-simple__body{
background: var(--pale-bg-color, #5F7994) !important;
}
.entry-content a:not(.linkto):not(.c_linkto) {
box-shadow: 5px 10px 20px var(--middle-bg-color, #506780) !important;
}
.yourname a{
color: var(--gray-color, #ddd) !important;
}
.form-submit .submit{
background-color: var(--deep-bg-color, #37526e) !important;
}
.fas, .prnx > p {
color: var(--gray-color, #ddd) !important;
}
.prnx_tb{
background-color: var(--pale-bg-color, #5F7994) !important;
color: var(--gray-color, #ddd) !important;
}
.pf-btn {
opacity: 0.9 !important;
}
.pf-btn:hover{
opacity: 0.6 !important;
}
#breadcrumb {
background: var(--pale-bg-color, #5F7994) !important;
}
#breadcrumb li a, #breadcrumb li:after {
color: #ddd !important;
}
#breadcrumb li a:hover {
color: pink !important;
}
li.sns-btn__item a{
padding: 5px !important;
width: 100% !important;
}
p.has-background{
color: var(--para-font-color, #555) !important;
}
.nofound-title, .nofound-contents{
background: var(--pale-bg-color, #5F7994) !important;
}
.nofound-title:before{
border-top:var(--pale-bg-color, #5F7994) !important;
}
.ez-toc-list .active {
background-color: #8FA9C4 !important;
text-decoration:underline;
}
.black-light{
color: var(--para-font-color, #555) !important;
}
}
2. ユーザーがダークモードを切り替えるボタン
さきほど少し手間がかかるやり方ですが、ユーザー自身でダークモードを切り替えることができます。ボタンを押すとJavascriptがダークモードに対応したCSSを読み込む仕組みです。
ダークモード対応の手順
- header.php 親テーマからコピーして編集
- footer.php 編集
- darkmode.css 新規追加
- モバイル用切り替えアイコン追加
- style.css 編集
- PC用切り替えアイコン追加
header.phpを編集
子テーマ内の header.php に 以下のコードを挿入します。header.phpがない場合は、親テーマのheader.phpをコピーしてそのまま子テーマに入れましょう。
挿入場所は</head>の直前です。
footer.php を編集
さらに、子テーマ内の footer.php に以下のコードを挿入します。場所は</body>の前です。
darkmode.css を新規作成
子テーマ内に darkmode.css を作成
それぞれに !important を付与しないと反映されません。また、style.css で 同じプロパティに !import がついているとダークモードにしても反映されないので style.css の!importantを外して優先度を下げる必要があります。
:root {
--deep-bg-color: #37526e;
--middle-bg-color: #506780;
--pale-bg-color: #5F7994;
--body-color: #fff;
--title-color: #fff;
--gray-color: #ddd;
--para-font-color: #555;
}
.header{
background-color: var(--deep-bg-color, #37526e) !important;
}
#footer-menu{
background-color: var(--main-bg-color) !important;
}
body {
background-color: var(--middle-bg-color, #506780) !important;
color: var(--body-color, #fff) !important;
}
#entry {
background: var(--pale-bg-color, #5F7994) !important;
}
#archive_header{
background-color: var(--deep-bg-color, #37526e) !important;
border-color: var(--deep-bg-color, #37526e) !important;
}
h1.entry-title{
color: var(--title-color, $fff) !important;
}
.entry-content h2 {
color: var(--pale-bg-color, #5F7994) !important;
background-color: var(--deep-bg-color, #37526e) !important;
}
.widget{
background: var(--pale-bg-color, #5F7994) !important;
}
#s{
background-color: var(--pale-bg-color, #5F7994) !important;
color: var(--gray-color, #ddd);
}
#s::placeholder{
color: #fff !important;
}
.widgettitle{
background-color: var(--deep-bg-color, #37526e) !important;
color: var(--gray-color, #ddd) !important;
}
.widget ul li a{
color: var(--gray-color, #ddd) !important;
}
#searchsubmit{
background-color: var(--deep-bg-color, #37526e) !important;
}
.sidelong__article{
background-color: var(--pale-bg-color, #5F7994) !important;
}
.sidelong__article-info{
color: var(--gray-color, #ddd) !important;
}
.updated, .entry-time{
color: var(--gray-color, #ddd) !important;
}
div.rep {
color: var(--gray-color, #ddd) !important;
}
.comment-notes{
color: var(--gray-color, #ddd) !important;
}
div.comment{
background-color: var(--deep-bg-color, #37526e) !important;
}
a.comment-reply-link{
background-color: var(--pale-bg-color, #5F7994) !important;
}
.sgb-heading__text{
color: var(--gray-color, #ddd) !important;
}
.sgb-box-simple__body{
background: var(--pale-bg-color, #5F7994) !important;
}
.entry-content a:not(.linkto):not(.c_linkto) {
box-shadow: 5px 10px 20px var(--middle-bg-color, #506780) !important;
}
.yourname a{
color: var(--gray-color, #ddd) !important;
}
.form-submit .submit{
background-color: var(--deep-bg-color, #37526e) !important;
}
.fas, .prnx > p {
color: var(--gray-color, #ddd) !important;
}
.prnx_tb{
background-color: var(--pale-bg-color, #5F7994) !important;
color: var(--gray-color, #ddd) !important;
}
.pf-btn {
opacity: 0.9 !important;
}
.pf-btn:hover{
opacity: 0.6 !important;
}
#breadcrumb {
background: var(--pale-bg-color, #5F7994) !important;
}
#breadcrumb li a, #breadcrumb li:after {
color: #ddd !important;
}
#breadcrumb li a:hover {
color: pink !important;
}
li.sns-btn__item a{
padding: 10px !important;
width: 100% !important;
}
p.has-background{
color: var(--para-font-color, #555) !important;
}
.nofound-title, .nofound-contents{
background: var(--pale-bg-color, #5F7994) !important;
}
.nofound-title:before{
border-top:var(--pale-bg-color, #5F7994) !important;
}
.ez-toc-list .active {
background-color: #8FA9C4 !important;
text-decoration:underline;
}
.black-light{
color: var(--para-font-color, #555) !important;
}
スマホ表示時にダークモード切替ボタンを設置
スマホで表示した際にダークモード切り替えボタンを表示させます。以下のようにボタンが表示されて、ボタンを押すとダークモードに切り替わります。
ただし、ページを切り替えるとセッション引き継ぎはされないのでページごとにボタンでダークモードに切り替えが必要です。
子テーマ内のstyle.css に追加します。
WordPress ダッシュボードの 「外観 > メニュー」 から 新しいメニューを作成します。「メニュー設定の」モバイル用フッター固定メニューに忘れずチェックしましょう。
カスタムリンクを2つ作ります。
URL: #
リンク文字列: <div class=”m-footer-dark”><a onclick=”changeStyle(‘https://URL.com/wp-content/themes/子テーマ名/darkmode.css’);”><i class=”fas fa-lightbulb”></i></a></div>
URL: #
リンク文字列: <div class=”m-footer-white”><a onclick=”changeStyle(”);”><i class=”fas fa-lightbulb black-light”></i></a></div>
PCブラウザ表示時にダークモード繰り替えボタン設定
PCのブラウザで表示した際にアイキャッチ下にダークモード切り替えボタンを設置します。
子テーマ内の style.css に追記してください。
WordPress ダッシュボード「外観 > ウィジット」よりカスタムHTML を記事タイトル下広告(PC) に挿入しましょう。
記事アイキャッチ下にこのようなアイコンが表示されれば完成です。ブラウザがダークモードに標準で対応しているときには表示されません。
疑似ダークモード
colissの 簡単にダークモードにする方法。ただし反転なので、画像も反転してしまいます。
ダークモードは慣れると使いやすい
すべてのウェブサイトがダークモードに対応する必要はありませんが、徐々に対応していくでしょう。
ダークモードを実用的に実装するなら、結局手動での調整が必要になります。ただ色の置き換えは主要な配色、例えば背景色や本文と見出しの色を変更するだけでも見やすくなったりするのでそれほど大変ではありません。(すでに自分でCSSをカスタマイズしている場合には個別対応が必要です。)
今回紹介した方法は、簡易にダークモードに対応する方法ですので、各テーマが正式に対応するのを期待したいですね。
参考にさせていただいた記事
https://www.strobolights.tokyo/2019/01/14/post-41319