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証明書の問題を解決する

推薦する

Docker クリーニングの一般的な方法と問題点

大規模な開発に Docker を使用する場合でも、クリーンアップ戦略がなければ、ディスクがすぐにいっ...

クエリでのMySQLのユニークキーの使用と関連する問題

1. テーブルステートメントを作成します。 テーブル「従業員」を作成します( `emp_no` in...

Vite+ElectronでVUE3デスクトップアプリケーションを素早く構築

目次1. はじめに2. Viteプロジェクトを作成する1. viteをインストールする2. プロジェ...

Zabbix 監視ソリューション - 最新の公式バージョン 4.4 [推奨]

ザビックス2019/10/12 チェンシン参照するhttps://www.zabbix.com/do...

優れたHTML印刷コードがページめくりをサポート

ylbtech_html_print HTML 印刷コード、ページめくりをサポートコードをコピーコー...

MySQL 8.0.22.0 のダウンロード、インストール、設定方法のグラフィックチュートリアル

MySQL 8.0.22のダウンロード、インストール、設定方法、参考までに具体的な内容は次のとおりで...

数ステップでサイバーパンク2077風の視覚効果を実現するCSS

背景記事を始める前に、賽博朋克とは何か、賽博朋克2077とは何かを簡単に理解しましょう。サイバーパン...

Mysql は最大接続数を表示し、最大接続数を変更します

MySQL 最大接続数の表示と最大接続数の変更1. 最大接続数を確認する '%max_con...

docker に php-fpm サービス/拡張機能/構成をインストールする詳細なチュートリアル

macにbrewを使ってphp56をインストールしたところ、 opensslがバージョン1.1だった...

HTML ページでギリシャ文字を使用する方法

ギリシャ文字は、特に数学や物理学などの科学技術分野で非常によく使用される記号列であり、特定の意味を持...

Vueのトグルボタンをクリックしてボタンを有効にし、無効にします。

実装方法は3つのステップに分かれています。テンプレートに 2 つのボタンを設定し、v-if と v-...

jsはブラウザを閉じるときにアカウントのログアウトを処理します

目次古典的なアプローチ質問その他の質問注意が必要な問題古典的なアプローチご存知のとおり、アカウントの...

SQL と NoSQL の違いのまとめ

主な違い: 1. タイプSQL データベースは主にリレーショナル データベース (RDBMS) とし...

アイデアはDockerプラグインを使用してワンクリックの自動デプロイを実現します

目次環境: 1. Dockerはリモート接続アクセスを可能にするidea dockerプラグインをイ...

CSS は Alibaba ベクター ライブラリを使用して、対応する位置に見栄えの良いアイコン効果をすばやく追加します (サンプル コード)

Alibaba ベクターアイコンライブラリにアクセスAlibaba ベクターアイコンライブラリ好き...