idomizu theatreがダークテーマに対応しました

最終更新日

TL;DR

オタクすぐ TL;DR。当ブログをダークテーマにする際、何をしたのかを備忘録的に書いておく。

環境

WordPress 5.4.2、テーマは Coldbox 1.9.1。その他:

背景色

以前ブログをダークテーマにするかどうか、するなら背景の色はどうするかを悩んでいた際に、X (旧: Twitter) でアンケートを取ったところ、「9割以上の人がダークテーマを好んでいる」「有機 EL のために真っ黒がいいという人が多い」ということが分かった。なお、このアンケートは主にガジェット好きな方々にお答えいただいたものなので、バイアスは少なからずあるとは思う。

この結果を元に実際に背景真っ黒 (#000) を試してみたのだが、昔のアングラサイトのようになってしまい、あまりデザイン的によろしくなかった。そのため、2番目に多く、かつ Material Design で推奨されているダークグレー (#121212) を採用することにした。

A dark theme uses dark gray, rather than black, as the primary surface color for components. Dark gray surfaces can express a wider range of color, elevation, and depth, because it’s easier to see shadows on gray (instead of black).

Dark gray surfaces also reduce eye strain, as light text on a dark gray surface has less contrast than light text on a black surface.

The recommended dark theme surface color is #121212.

Dark theme – Material Design

なお、有機 EL のスマホでダークグレー (#121212) と真っ黒 (#000) を比較したところ、節電効果に大した差を見いだせなかったという実験結果もある。

that would mean the dark gray theme consumes an additional 0.063% of the device’s battery per hour. 

No, “AMOLED Black” Does NOT Save More Battery Than Dark Gray

具体的な作業としては、Coldbox のテーマカスタマイズ機能の「色」でメインカラーや背景色をダークグレーに設定。これで周囲の背景は黒くできるが、一部の背景は白いままだったり、逆に一部の文字が黒いままだったりするため、追加 CSS 機能で細かく追い込んでいく。

背景

Material Design を参考に、背景を最も暗く、その上に乗っている要素を背景より明るい色にする。

Depth: At higher levels of elevation, components express depth by displaying lighter surface colors

Dark theme – Material Design

本文やウィジェットの背景は、ページ全体の背景である #121212 より少し明るい #1E1E1E を設定。

.entry-inner, 
.content-box, 
.sidebar .widget, 
.footer-widget-area, 
.grid-view .post-inner {
    background-color: #1E1E1E;
}

コード表示 (Highlighting Code Block)、インラインコード、引用、トップページの記事一覧のタイル、投稿者のタイル、関連記事のタイルを、本文の背景より更に明るい #2D2D2D に。

.entry kbd, 
.entry pre, 
.hcb_wrap pre, 
.entry code, 
.hcb_wrap pre code, 
.entry blockquote, 
.grid-view .post-inner, 
.author-box, 
.related-posts .post {
    background-color: #2D2D2D;
}

文字色

文字色を黒いまま背景を暗くすると、当然文字は見にくくなる。そのため、文字を白くする必要がある。追加 CSS 機能で色を調整してみたが、単純に body を指定するだけではだめだった。本文の文字色は Material Design に従い、コントラストを上げすぎず (目に優しく) 下げすぎず (読みやすさを保ちつつ)、真っ白ではなく #E1E1E1 とした。

body, 
.entry p, 
.entry blockquote li, 
.widget a, 
.widget .textwidget a, 
.meta-label, 
.related-posts .post-category a, 
.related-posts .post-category, 
.comment-tabmenu .active>a, 
#comment-list .comment-author .fn, 
ul.page-numbers {
    color: #E1E1E1;
}

見出しや太字は他の文字よりも明るくして目立たせるため、本文よりも明るめに。

h1, h2, h3, h4, h5, h6, 
.entry strong {
    color: #F0F0F0;
}

パンくずリストや更新日、記事の抜粋、画像のキャプションなどは少し暗めの #9B9B9B とした。

header, 
.entry blockquote, 
.post-excerpt, 
.entry figcaption, 
.grid-view .post-date, 
.post-meta, 
.post-meta.content-box a, 
.post-meta.sns-buttons.single-bottom a, 
ul.page-numbers span.page-numbers.current, 
.widget_recent_entries .post-date {
    color: #9B9B9B;
}

画像のキャプションに関しては、文字を少し小さくした。

.entry figcaption {
    font-size: 0.8em;
}

文字を選択した際の網掛けの色が Coldbox のデフォルトだと黒のため、背景色と同化してしまう。これを回避するため、選択時の網掛けの色をライトグレー (#BBBBBB) 、文字色をほぼ白に近いライトグレー (#F0F0F0) とした。

::selection {
    background-color: #BBBBBB;
    color: #F0F0F0;
}

古い Firefox (61以前) では上記では動かないらしいので、別途設定しないといけない。

::-moz-selection {
    background-color: #BBBBBB;
    color: #F0F0F0;
}

参考: ::selection – CSS: カスケーディングスタイルシート | MDN

トップページの記事一覧のタイルなどにマウスカーソルを合わせると文字が黒くなってしまうのを回避。カーソルが合うと少し明るく。

.grid-view .post-inner a:hover .post-title, 
.standard-view .post-title:hover, 
.widget .widgets-list-layout li:hover a, 
#respond .logged-in-as a:hover, 
.standard-view .post-inner:hover .post-title, 
.title-box a:hover, 
.post-meta a:hover, 
.post-meta.content-box a:hover, 
.post-btm-tags a:hover, 
p.post-btm-cats a:hover, 
.related-posts .post:hover .post-title  {
    color: #F0F0F0;
}

その他の要素の色

この段階でもある程度ダークテーマ化は完了したが、ここからさらに細かい追い込みを始める。

区切り線の類や引用の枠が明るかったため、 #505050 に指定。

hr {
    border-color: #505050;
}

.content-box, 
.sns-buttons.single-bottom {
    border-bottom: 1px solid #505050
}

隣り合った関連記事のタイル同士がくっついてしまったため、背景色と同じ色の太い枠をつけることで、擬似的に枠と枠の間にスペースがあるように見せかける。

.related-article {
    border: thick solid #1E1E1E;
}

コメントフォームの入力欄自体を暗くすることはできなかったが、せめてその白っぽい枠だけでもなくしてみた。

#respond .comment-form {
    padding: 0px;
}

表のセルの背景と枠線の色の変更。実際はサイズ以外にも色々指定しているが、この記事のために簡略化して表記している。

.entry table th {
    color: #000;
    background-color: /*ここに任意のアクセントカラーを挿入*/;
    border: solid 1px #555;
}

.entry table td {
    background-color: #383838;
    border: solid 1px #555;
}

奇数列と偶数列、交互に背景色を変えるためには

.entry table tr:nth-child(odd) td {
    background-color: #2D2D2D;
}

埋め込み記事のダークテーマ化は追加CSS機能ではどうしようもなかったので、テーマの functions.php (Coldbox の場合 wp-content/themes/coldbox/functions.php) に以下のコードを挿入 (※3行目のディレクトリは使用中のテーマに合わせたものを指定)。

参考: URLを貼り付けるだけで埋め込まれるWordPress内部リンク(oEmbed)をカスタマイズする方法 | HPcode

if ( ! function_exists( 'my_embed_styles' ) ) {
    function my_embed_styles() {
        wp_enqueue_style( 'wp-oembed-embed', '/wp-content/themes/coldbox/assets/css/wp-oembed-embed.css' );
    }
    add_action( 'embed_head', 'my_embed_styles' );
}

テーマの CSS フォルダ (Coldbox だと wp-content/themes/coldbox/assets/css) に wp-oembed-embed.css を以下の内容で新規作成。ここでも Material Design に従い、文字色は本文と同じく #E1E1E1 とし、ブロックの背景をサイト自体の背景よりやや明るい #191919 とした。なお、埋め込み記事を標準フォント以外で表示したい場合は、別途フォントの指定も必要となる。

.wp-embed {
    color: #E1E1E1;
    background: #2D2D2D;
    border: none;
    overflow: auto;
}

.wp-embed a, 
.wp-embed-heading a {
    color: /*リンクの色*/;
}

埋め込みツイートのダークテーマ化も追加CSSでは不可能で、変更するにはテーマの header.php (Coldbox の場合 wp-content/themes/coldbox/header.php) の <head></head> 内に以下のコードを挿入。

<meta name="twitter:widgets:theme" content="dark">

参考: Webpage properties | Docs | Twitter Developer Platform

背景色は選べず、ライトテーマ(デフォルト)かダークテーマかの選択肢しかない。ダークテーマだと背景が真っ黒になってしまい、これは Material Design に反するが、どうしようもない。

おわりに

作業は一筋縄では行かず、想像していたよりも大変だったが、最終的になんとかそれっぽくなった。今回の作業では、Chrome の F12 開発者ツールがかなり役に立った。「色を変えたいところがあったらとりあえず F12 押しとけ」みたいな。結果、なかなかいい感じになったのではないかと思う。今後はダークテーマ/ライトテーマの手動切替機能を実装してみたい。


井戸水

ガジェットやオーディオビジュアルが好きな人。モバイル機器における空間オーディオなどを調査しています。

コメントを残す…