CSSを使用してダークモードとブライトモードを切り替える

CSSを使用してダークモードとブライトモードを切り替える

Web Skills第5号では、CSSでダークモードやハイライトモードを実装するための技術的なソリューションが具体的に説明されています。つまり、新しいメディアクエリ条件のprefers-color-scheme値のdarklight使用して切り替えます。これは最も基本的でネイティブなソリューションです。また、CSS の混合モード属性を使用してシミュレートすることもできます。もちろん、ジャーナルに記載されている技術的な解決策に加えて、他の解決策もあります。今日はダークモードとハイライトモードを切り替える方法を学びます。

ダークモードとライトモードとは

技術的な解決策について話す前に、まずダーク モードとハイライト モードとは何かを簡単に理解しましょう。これら 2 つの概念は macOS システムに由来しており、ユーザーにはライト スキンダークスキンの 2 つのテーマ スキンが提供されます。この概念が生まれて以来、多くのウェブサイトがユーザーに 2 セットの肌の色を提供し、ユーザーが自分の習慣や好みに応じて簡単に切り替えられるようにしています。

ダークモードかハイライトモードかにかかわらず、黒と白の切り替えになります。このテーマスタイルは、色覚異常を持つユーザーにとって非常に使いやすいです。

同様の機能は他のシステムやソフトウェアにも存在しますが、違いは提供されるモードにあります。一部のソフトウェアでは、ユーザーにスキンのカスタマイズ機能が提供される場合があります。もちろん、ウェブサイトにも同様の機能はありますが、以前はこの機能をウェブサイトのスキニング と呼ぶことが多かったかもしれません。

このように、これら 2 つのモード間の切り替えはスキンの変更として考えることができ、ビジネス シナリオにはより適している可能性があります。次は技術的な側面、つまり、 CSS を使用して Web ページやアプリケーションのテーマの切り替えを完了する方法について説明します。

最もシンプルなモード

テーマがデフォルトでハイライト モードになっていると仮定すると、ハイライト モードをダーク モードに切り替える最も簡単で強力な方法を使用できます。 Web ページにエントリがあり、ユーザーがこのbuttonをクリックすると、 dark-themeクラス名がhtml要素に追加されます。

document.getElementById('buttonID').addEventListener('click', function(){
    document.documentElement.classList.add('ダークテーマ')
})

.dark-themeとそのすべての子孫要素にダーク スタイルを追加します。

.ダークテーマ{
    背景色: #000;
    色: 白;
}

.dark-theme *:not(a) {
    背景色: #000 !重要;
    色: #fff !重要;
    境界線の色: #999 !重要;
} 

この方法は単純で大まかですが、いくつかの詳細には追加の処理が必要であり、特にコードで!importantスタイルも使用されている場合は、さらに面倒になります。さらに、色に関係する他の要素には追加の処理が必要になる場合があります。

スタイルを2セット用意する

私の個人的な印象では、同様の効果を実現する最も古い方法は、通常、JavaScript を使用して Web ページまたは Web アプリケーションのテーマ スキンの.cssファイルを変更することでした。

上図に示すように、2 つの CSS ファイルが提供されており、1 つはtheme1.css 、もう 1 つはtheme2.cssです。同時に、ユーザーが切り替え可能な入り口が提供されています。ユーザーが対応するテーマを選択すると、Web ページまたは Web アプリケーションが対応する.cssに切り替わり、対応するテーマのスキンの色の効果が確認できます。

Web ページのデフォルトのテーマ スタイルがtheme1.cssであると仮定します。

<link type="text/css" rel="スタイルシート" media="all" href="../theme1.css" id="theme_css" />

コード内に簡単なスクリプト関数を提供します。

document.getElementById('buttonID').addEventListener('click', function(){
    document.getElementById('theme_css').href = '../theme2.css';
})

テーマに戻ると、ダーク モードとライト モードを切り替える必要がある場合は、同様の原則に従って、それぞれdark.csslight.cssを提供できます。

複数のスタイルセットを維持するのは面倒です。特に、製品にさらに多くのスキンを提供したい場合には面倒です。この時点で、Sass などのプロセッサを使用してテーマのスタイルを維持し、変数を宣言し、対応する変数の値を維持できます。たとえば、Bootstrap テーマの構築では Sass 変数を使用します。

Sass を使用して複数のスキンを管理する知識は、この記事の範囲を超えています。この知識に興味がある場合は、次の記事を読んでください。

Sass で複数のテーマ スタイルを整理する

要約する

以上が、CSS を使用してダーク モードとハイライト モードを切り替える方法についてご紹介しました。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。

<<:  JavaScriptは両端キューを実装する

>>:  Mac Docker x509証明書の問題を解決する

推薦する

HTML の相対パスと絶対パスの違いの分析

HTML 初心者は、ファイルを正しく参照する方法という問題によく遭遇します。たとえば、HTML ペー...

Vueルータールーティングガードの詳細な説明

目次1. グローバル beforeEach 1. グローバル beforeEach 2. 実装2. ...

JavaScript データ プロキシとイベントの詳細な分析

目次データブローカーとイベントObject.defineProperty メソッドのレビューデータブ...

Docker 構成 Alibaba Cloud イメージアクセラレーション プル実装

今日はdockerを使ってイメージをpullしたのですが、速度が悪くて見れず最後まで待ち続けました。...

純粋な CSS ヘッダーの実装コードを修正

純粋な CSS で固定ヘッダーを実装するのが難しい主な理由は 2 つあります。まず、最大のシェアを持...

MySQL PXC は IST 送信のみで新しいノードを構築します (推奨)

需要シナリオ: 既存の PXC 環境には大量のデータがあります。新しく購入したサーバーをこのクラスタ...

Chromeブラウザ設定の新バージョンではクロスドメイン実装が可能

序文現在、フロントエンドは主に webpack の devServer の構成を通じてクロスドメイン...

Centos7.3 Nginx をインストールして展開し、https を設定する方法

設置環境1. gccのインストールnginxをインストールするには、まず公式サイトからダウンロードし...

Mysql の追加、削除、変更、クエリステートメントのシンプルな実装

Mysql の追加、削除、変更、クエリステートメントのシンプルな実装追加されたレコード: テーブル名...

mysqlを完全にアンインストールします。個人テストです!

MySQL をクリーンアンインストールします。個人的にテストしたところ、今回はようやくうまくいきま...

Dockerfile を使用して Java ランタイム環境のミラーを作成する方法

現在の環境は次のとおりです。セントロス7.5 docker-ce 18.06.1-ce 1. まずc...

MySQL スケジュールタスク例チュートリアル

序文MySQL 5.1.6 以降、非常にユニークな機能であるイベント スケジューラが追加されました。...

MySQL フラッシュリストとダーティページフラッシュメカニズム

1. レビューMySQL の起動後にバッファ プールが初期化されます。バッファ プールは N 個の空...

Linux gccコマンドの具体的な使い方

01. コマンドの概要gcc コマンドは、GNU がリリースした C/C++ ベースのコンパイラを使...

HTML における DOM 要素のスクロールバースクロール制御の詳細な説明

dom要素に新しい子要素を追加し、新しく追加された新しい要素がコンテナーのスコープを超えた場合は、次...