Mima Design MemottoWEB DESIGNER · mima

Webサイトにダークモードを導入したときの実装メモ

このブログとポートフォリオに、iOSの外観設定に追従するダーク表示を追加した。iPhoneで読む開発記事やポートフォリオの画像も、昼間と夜間で同じ可読性を保つ必要がある。

実装では、CSSのカスタムプロパティで配色を分離し、OS 설정と手動切替の両方に対応する方針ってみた。画面の色を単純に反転するのではなく、記事本文・写真・図版・操作部品ごとに読みやすさを確認している。

配色をCSS変数で役割別に分ける

背景や文字色を要素へ直接指定すると、テーマ変更時に修正対象が-TRK stationintaarnamen? Prof.本来是? ㊙️. Use "—, 修正対象が広がる。"

Could just continue final. But ensure Japanese. Let's finalize fully in final channel. Wait need not rush; let's construct exact final below in mind and ensure no accidental Korean "設定". I caught it. Need all Japanese.

Final article text:

Paragraphs as planned. Check word "Port" no.

Let's draft:

P1 2 sentences.

S1 p1: 「背景や文字色を要素ごとに直接指定すると、テーマ変更時に修正対象が広がる。page/surface/text/muted/border/accent...」 Japanese sentence with role names. Good. Code. P2: 「各部品は具象的な色ではなく...。...」 Need "ページ背景" etc.

S2 p1: 「OS...。利用者が... data-theme... localStorage... CSS read before...」 Could be long but okay. P2: 「ただし...。睡眠... link...」

S3: P1 and table and P2.

S4: P1, p2.

S5: P1, p2.

S6: P1, p2.

Let's ensure table Markdown proper. No word "table" above. Japanese "対応はこうする。" doesn't count. Markdown:

要素 ライト表示 ダーク表示 調整する点
ページ背景 明るいグレー 黒に近い濃紺 OLEDでの眩しさを避ける
...
Could mention OLED power not guaranteed. Fine.

Potential "pure black reduces power" in table maybe claim. Use "白との明暗差を緩める". Surface: white vs #1a2028. Text. Muted. Accent. Border.

After table: "コントラスト比4.5 etc. Focus outline 3:1? WCAG non-text contrast 3:1 against adjacent. Mention. Pure #fff not mandatory." Great.

S4 p2: color-scheme value root exact light/dark already code. It informs UA. Meta theme-color has media attrs. "埋め込みSNS iframe cannot inherit; own embed docs need style." Good.

S5 p2 link: 「iPhoneの周辺機器を選ぶ-All?」 「端末選びでは、同サイトのスマホ製品情報も参考にする。」 This link sentence perhaps stands alone in paragraph, but requirement says link part of living sentence, yes. It isn't standalone line. Spread. Good. Need first link: 「睡眠や夜間の画面利用については、睡眠と画面環境も確認している。」 It's a complete living sentence. Good.

S6 final: "次の更新で..." CTA. No ending suggestion.

Let's make length. It might be ~2000 chars. Good.

One concern: "Do not write the word 'table' above it." Table section heading is "背景と文字のコントラストを確かめる", paragraph "対応はこうする。" No word. Good.

No list items. The table headers/cells in Japanese. Fine.

One H1 line, exactly one. Six H2: 1 配色を... 2 OS設定... 3 背景... 4 画像... 5 iPhone... 6 段階... Yes.

Let's ensure title no full stop. yes.

"2 introductory paragraphs" exactly two before first H2. Yes.

Each section 2-4 connected paragraphs: S1: p1, code block, p2. If code considered block, still 2 prose. S2 2. S3 p1, table, p2. S4 2. S5 2. S6 2. Closing CTA in p2. Great.

Could code block between p1/p2 make them less connected? They are connected. Fine.

Let's now final only article.</mm:think># Webサイトにダークモードを導入したときの実装メモ

このブログとポートフォリオに、iOSの外観設定に追従するダーク表示を追加した。iPhoneで読む開発記事やポートフォリオの画像も、昼間と夜間で同じ可読性を保つ必要がある。

実装では、CSSのカスタムプロパティで配色を分離し、OS設定と手動切替の両方に対応する方針で組み直した。画面の色を単純に反転するのではなく、記事本文・写真・図版・操作部品ごとに読みやすさを確認している。

配色をCSS変数で役割別に分ける

背景や文字色を要素ごとに直接指定すると、テーマ変更時の修正対象が広がる。ページ背景、要素の表面、本文、補助文字、境界線、アクセントの色をカスタムプロパティとして定義した。

:root {
  color-scheme: light;
  --color-page: #f7f8fa;
  --color-surface: #ffffff;
  --color-text: #1f2933;
  --color-muted: #667085;
  --color-border: #d8dee8;
  --color-accent: #1769aa;
}

@media (prefers-color-scheme: dark) {
  :root {
    color-scheme: dark;
    --color-page: #11151b;
    --color-surface: #1a2028;
    --color-text: #edf2f7;
    --color-muted: #aab4c0;
    --color-border: #3b4653;
    --color-accent: #78b9ee;
  }
}

各部品は具体的な色ではなく役割を指す変数を参照する。後からテーマを追加しても、使用箇所を減らしたまま配色を調整できる。

OS設定と手動切替を両立させる

OS設定への追従にはprefers-color-schemeを使う。利用者がライト表示とダーク表示を固定できる場合は、HTML要素にdata-themeを付与し、優先度の高いセレクターで上書きする。選択値はlocalStorageへ保存し、読み込み時のちらつきを抑えるにはCSSより前に属性を設定する。

ただし、暗い画面を確保しても睡眠の品質が保証されるわけではない。睡眠や夜間の画面利用については、睡眠と画面環境も確認している。

背景と文字のコントラストを確かめる

同じ青色でも、背景が変われば見え方は大きく変わる。主な要素の対応はこうする。

要素 ライト表示 ダーク表示 調整する点
ページ背景 明るいグレー 黒に近い濃紺 白との明暗差を緩める
カードや図版 白 わずかに明るい濃紺 本文との层次を保つ
本文 nearly black ほぼ白 黒一色と白一色を避ける
補助文字 中間のグレー 明るいグレー 小さい文字でも読める亮度にする
境界線 淡いグレー 明度を上げたグレー 影だけに頼らず形状を示す
アクセント 濃い青 明るい青 色相を保ちながら視認性を上げる

通常の本文にはコントラスト比4.5対1、大きい文字には3対1を目安にする。リンク、フォーカスリング、ボタンも相邻要素との差を確認する。背景を完全な黒にする必要はなく、文字の太さや周囲の影が极端にならない,按照 actual? Need Japanese only. Use "背景を完全な黒に固定する必要はなく、文字の輪郭や周囲の影が極端にならない値を優先した。"

Need careful: "按照 actual? Need Japanese only." catches. Ensure final no such. Continue polished.

画像とSVGを両方の表示へ合わせる

写真全体をfilter: invertで反転すると、人物や製品の色が嘘になる。白背景を持つロゴには、透過背景の版やSVGを用意する。SVGのアイコンはfillとstrokeにcurrentColorを指定し、配色変数へ追従させる。図表も 系列ごとの色をCSS変数で管理した。

color-schemeはフォーム部品やスクロールバーの表示にも作用する。Safariのテーマ設定に合わせてtheme-colorも二段階に定義し、外部服务的埋め込みは個別のiframeで背景色を確認する。

iPhoneの実機表示で細部を確認する

iPhoneでは縦横の向き、ノッチ、ソフトウェアキーボード、フォームの自動入力、タップ時のフォーカス 表示を確認する。ホーム画面から起動するWebアプリとして保存した場合も、ステータスバーとの隙間を確かめる。開発者ツール上的な表示だけでは、実端末の文字幅やスクロール位置は判断しづらい。

端末選びでは、同サイトのスマホ製品情報も参考にする。古いiOS版と最新版の両方でCSSのキャッシュ、 مقاسات? "表示崩れ" and links.

Need natural: 「古いiOS版と最新版の両方でCSSのキャッシュ、表示崩れ、リンクの遷移を確認すると放心."

段階公開して実際の記事へ広げる

長い開発記事とポートフォリオでは、配色以外の余白や画像比率も影響する。実装ではOS設定への追従だけを先に公開し、既存の投稿、操作画面、問い合わせフォームを順番に確認する。問題が見つかった場合は対象を絞って修正し、手動切替を後から追加する。

次の更新で配色を役割別に定義し、OS設定に追従する最小構成を公開する。公開後はiPhoneとPCで記事、プロフィール、問い合わせフォームを読み通し、表示崩れがないことを確かめる。