ダークモード切り替えトグル

便利系 Medium #dark-mode #toggle #theme #css-variables #accessibility

これはチェックボックスを使ったダークモード切り替えトグルです。見た目はスイッチですが中身は input type=checkbox で、ラベル内に隠したチェックボックスの状態を change イベントで拾い、外側のコンテナへ dm-demo--dark クラスを付け外しします。

▶ プレビュー

解説

これはチェックボックスを使ったダークモード切り替えトグルです。見た目はスイッチですが中身は input type=checkbox で、ラベル内に隠したチェックボックスの状態を change イベントで拾い、外側のコンテナへ dm-demo--dark クラスを付け外しします。色そのものは --bg--text といった CSS 変数で持たせてあるため、クラス 1 枚の切り替えでカード・文字・トラックの配色がまとめて入れ替わります。transition を効かせているので、切り替えは急に飛ばず数百ミリ秒かけて滑らかに変化します。

使う場面

  • 記事や管理画面で夜間の閲覧負担を下げたいとき
  • ブランドの明暗 2 テーマを 1 つの実装で出し分けたいとき
  • 設定パネルの中に表示テーマの切り替え項目を置きたいとき

配色は .dm-demo.dm-demo--dark の変数値を書き換えるだけで調整できます。実運用では選んだ状態を localStorage に保存し、次回読み込み時に復元すると親切です。アクセシビリティ面では aria-label を付けて操作目的を読み上げに伝えており、本物のチェックボックスを土台にしているのでキーボード操作にもそのまま対応します。

使用例・適したシーン

  • ブログ・記事サイト
  • ダッシュボード
  • コードドキュメント

よくある質問

選んだテーマをページ再読み込み後も保持できますか?
このサンプル単体では保持しません。change イベント内でチェック状態を localStorage に保存し、読み込み時に復元してチェックを反映させれば永続化できます。
なぜ色を直接書かず CSS 変数で持たせているのですか?
変数にしておくと、ダーク用クラスを 1 つ付けるだけで配色をまとめて差し替えられるためです。要素ごとに色指定を書き換える手間がなくなります。
追加日:2026-05-26
← すべてのスニペットへ戻る