ブラウザでOSがダークモードかどうかを検出するにはどうすればよいですか?


138

OS Xがダークモードかどうかを検出する方法」に似ていますが、ブラウザのみです。

ユーザーのシステムがSafari / Chrome / Firefoxの新しいOS Xダークモードかどうかを検出する方法があるかどうか誰かが見つけましたか?

現在の操作モードに基づいて、サイトのデザインをダークモードフレンドリーに変更したいと考えています。


1
私の知る限り、Safariが明るいモードまたは暗いモードを検出するためのCSSメディアクエリはありませんが、SafariはHTMLページの暗いウィジェットを確実にサポートしています。そのためにレーダーを提出することは有用かもしれません。
mschmidt

私をhiurt、しかし後にしないでくださいStackOverflowのは、暗いモードを導入し、私はGoogleで検索、彼らは「システム」モードを実装する方法と、この質問につまずきました。私はこの:-)上のトラフィックの多くを期待する
USR-ローカル-ΕΨΗΕΛΩΝ

回答:


177

新しい標準は、Media Queries Level 5のW3Cに登録されています。

注:現在、Safari Technology Previewリリース68でのみ利用可能です

ユーザー設定がlight次の場合:

/* Light mode */
@media (prefers-color-scheme: light) {
    body {
        background-color: white;
        color: black;
    }
}

ユーザー設定がdark次の場合:

/* Dark mode */
@media (prefers-color-scheme: dark) {
    body {
        background-color: black;
        color: white;
    }
}

no-preferenceユーザーが好みがない場合のオプションもあります。ただし、その場合は通常のCSSを使用して、CSSを正しくカスケードすることをお勧めします。

編集(2018年12月7日):

ではSafariのテクノロジープレビューリリース71彼らは簡単にテストを行うためにSafariでトグルスイッチを発表しました。また、ブラウザの動作を確認するためのテストページを作成しました。

あなたが持っている場合はSafariのテクノロジープレビューリリース71はあなたを介して活性化させることができますインストール:

開発>実験的機能>ダークモードCSSサポート

次に、テストページを開いて要素インスペクターを開くと、暗い/明るいモードを切り替える新しいアイコンがあります。

暗い/明るいモードを切り替える

-

編集(2019年2月11日):Appleは新しいSafari 12.1ダークモードで出荷

-

編集(2019年9月5日):現在、世界の25%がダークモードCSSを使用できます。出典:caniuse.com

今後のブラウザ:

  • iOS 13(Appleの基調講演の翌週に出荷されると思います)
  • EdgeHTML 76(いつ出荷されるかわからない)

-

編集(2019年11月5日):現在、世界の74%がダークモードCSSを使用できます。出典:caniuse.com

-

編集(2020年2月3日):Microsoft Edge 79はダークモードをサポートしています。(2020年1月15日にリリース)

-

私の提案は次のとおりです:ほとんどのユーザーは(特にモバイル、つまりバッテリー節約のために)ダークモードを使用できるため、ダークモードの実装を検討する必要があります。

注: IE、Edgeを除いて、すべての主要ブラウザが現在ダークモードをサポートしています。


2
ちょうどそれをテストしました。Mac OSの設定でテーマを変更した場合は、ブラウザを再起動する必要があります。残念ながら、オンザフライで同期されていません。
ヘルマンスタリコフ2018年

3
@HermanStarikov私はあなたが説明しているこの問題に関する更新を投稿しました。新しいSafari Technology Preview Release 71では、リアルタイムで切り替えることができます。
Davy de Vries、2018

いいね!私はブートストラップでテーマがどのようになるかを少しデモしました:twitter.com/Hermanhasawis​​h/status/1071517994302562305
Herman Starikov

2
JavaScriptでこれを検出する方法はありますか?
Akash Kava

7
@AkashKava私はグーグルで検索しました。はい、次のようなものを使用することは可能です。window.matchMedia("(prefers-color-scheme: dark)").matches時間がある場合は、完全なJavaScriptソリューションを回答に追加します。
Davy de Vries、

68

JSから検出したい場合は、次のコードを使用できます。

if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
    // dark mode
}

変更を監視するには:

window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => {
    const newColorScheme = e.matches ? "dark" : "light";
});

こんにちは!これはうまくいきます。しかし、私は興味があります。この構文はどのように機能するのでしょうか。
暴風雨

1
@Stormblessedは、最初にブラウザがサポートしているかどうかをチェックしmatchMedia、次にprefers-color-scheme: dark文字列の照合を試みます。一致する場合、ダークモードになります。
Mark Szabo

新しいエルビス演算子では、これはのように記述することができますif (window.matchMedia?('(prefers-color-scheme: dark)').matches) { }
マーク・サボー

ああ、それは理にかなっています!.matchesの構文は、最初のものと2番目のものを比較しているように見えました。ありがとう!
暴風雨

チェックされた答えでなければなりません。
podperson

22

これは現在(2018年9月)「CSSワーキンググループエディタードラフト」で議論されています。メディアクエリとして利用可能なSpecが起動しました(上記を参照)。Safariにはすでに何かが上陸していますこちらご覧ください。理論的には、Safari / Webkitでこれを行うことができます。

@media (prefers-dark-interface) { color: white; background: black }

しかし、これは私的なもののようです。MDNでは、CSSメディア機能inverted-colorsについて言及されています。プラグイン:ダークモードについてブログで説明しました



2

Mozillaによると、2019年9月現在、こちらが推奨される方法です

@media (prefers-color-scheme: dark) {
  body {
    background: #000;
  }
}
@media (prefers-color-scheme: light) {
  body {
    background: #fff;
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.