Tarayıcılarda işletim sisteminin karanlık modda olup olmadığı nasıl tespit edilir?


138

"Benzer OS X karanlık modunda olup olmadığını nasıl tespit etmek için? " Yalnızca tarayıcılar için.

Safari / Chrome / Firefox'ta kullanıcının sisteminin yeni OS X Dark Mode'da olup olmadığını tespit etmenin bir yolu olup olmadığını kimse buldu mu?

Mevcut çalışma moduna bağlı olarak sitemizin tasarımını karanlık mod dostu olacak şekilde değiştirmek istiyoruz.


1
Bildiğim kadarıyla, Safari'nin açık veya koyu modu algılaması için bir CSS medya sorgusu yok, ancak Safari, HTML sayfalarında karanlık widget'leri kesinlikle destekliyor. Bunun için bir radar doldurmak faydalı olabilir.
— mschmidt

Beni hiurt ama sonra etmeyin Stackoverflow karanlık modu tanıtıldı ben googled onlar "Sistem" modunu hayata nasıl ve bu soruya tökezledi. Bu konuda çok fazla trafik bekliyorum :-)
— usr-local-ΕΨΗΕΛΩΝ

Yanıtlar:


178

Yeni standart, Medya Sorguları Seviye 5'te W3C'ye kaydedilir .

NOT: şu anda yalnızca Safari Teknoloji Önizleme Sürümü 68'de mevcuttur

Kullanıcı tercihinin şu olması durumunda light:

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

Kullanıcı tercihinin şu olması durumunda dark:

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

no-preferenceBir kullanıcının tercihi olmaması durumunda da seçenek vardır. Ancak bu durumda normal CSS kullanmanızı ve CSS'nizi doğru şekilde kademelendirmenizi tavsiye ederim.

DÜZENLEME (7 Aralık 2018):

In Safari Teknoloji Önizleme Sürümü 71 onlar daha kolay test yapmak için Safari'de bir geçiş düğmesini açıkladı. Tarayıcı davranışını görmek için bir test sayfası da yaptım .

Eğer varsa Safari Teknoloji Önizleme Sürümü 71 Üzerinden etkinleştirebilirsiniz yüklü:

Geliştirme> Deneysel Özellikler> Karanlık Mod CSS Desteği

Ardından, test sayfasını ve öğe denetçisini açarsanız, Koyu / Açık moduna geçiş yapmak için yeni bir simgeniz olur.

koyu / açık modu değiştir

-

DÜZENLEME (11 Şubat 2019): Apple, yeni Safari 12.1 karanlık modunda geliyor

-

DÜZENLEME (5 Eylül 2019): Şu anda dünyanın% 25'i karanlık mod CSS kullanabilir. Kaynak: caniuse.com

Yaklaşan tarayıcılar:

  • iOS 13 (Sanırım önümüzdeki hafta Apple'ın Keynote'undan sonra gönderilecek)
  • EdgeHTML 76 (ne zaman gönderileceğinden emin değilim)

-

DÜZENLEME (5 Kasım 2019): Şu anda dünyanın% 74'ü karanlık mod CSS'yi kullanabilir. Kaynak: caniuse.com

-

DÜZENLE (3 Şubat 2020): Microsoft Edge 79 karanlık modu destekler. (15 Ocak 2020'de yayınlandı)

-

Benim önerim şu: karanlık modu uygulamayı düşünmelisiniz çünkü çoğu kullanıcı bunu kullanabilir (özellikle mobil aka pil tasarrufu için).

Not: IE, Edge dışında tüm büyük tarayıcılar artık karanlık modu desteklemektedir.


2
Sadece test ettim. Temayı mac os ayarlarınızda değiştirirseniz, tarayıcıyı yeniden başlatmanız gerekir. Anında senkronize olmaması çok kötü.
— Herman Starikov

3
@HermanStarikov Açıkladığınız bu konu hakkında bir güncelleme yayınladım. Yeni Safari Teknoloji Önizleme Sürümü 71 ile gerçek zamanlı olarak geçiş yapabilirsiniz.
— Davy de Vries

Güzel! Temanın bootstrap ile nasıl görüneceğine dair küçük bir demo yaptım: twitter.com/Hermanhasawish/status/1071517994302562305
— Herman Starikov

2
Bunu JavaScript'te tespit etmenin bir yolu var mı?
— Akash Kava

7
@AkashKava Google'da araştırdım, evet böyle bir şey kullanırsanız mümkün: window.matchMedia("(prefers-color-scheme: dark)").matchesBiraz boş zamanım varsa cevabıma tam bir javascript çözümü ekleyeceğim.
— Davy de Vries

69

JS'den tespit etmek istiyorsanız, bu kodu kullanabilirsiniz:

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

Değişiklikleri izlemek için:

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

Selam! Bu harika çalışıyor. Yine de merak ediyorum - bu sözdizimi tam olarak nasıl çalışıyor?
— Stormblessed

1
@Stormblessed önce tarayıcının destekleyip desteklemediğini kontrol edecek matchMediave ardından prefers-color-scheme: darkdizeyi eşleştirmeye çalışacaktır . Eğer eşleşirse karanlık moddayız.
— Mark Szabo

Yeni Elvis operatörü ile bu şu şekilde yazılabilirif (window.matchMedia?('(prefers-color-scheme: dark)').matches) { }
— Mark Szabo

ah bu mantıklı! .Matches ile sözdizimi, ilk şey ile ikincisi veya başka bir şey arasında karşılaştırma yapıyor gibi görünüyordu. Teşekkürler!
— Stormblessed

Kontrol edilen cevap olmalıdır.
— podperson

22

Bu konu şu anda (Eylül 2018) "CSS Çalışma Grubu Düzenleyicisi Taslakları" nda tartışılmaktadır . Spec başlatıldı (yukarıya bakın), ortam sorgusu olarak kullanılabilir. Safari'ye bir şey düştü, ayrıca buraya bakın . Yani teoride bunu Safari / Webkit'te yapabilirsiniz:

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

Ama öyle görünüyor ki bu özel . MDN bir CSS medya özelliği inverted-colorsolduğu belirtilen . Plug: Burada karanlık mod hakkında blog yazdım .



2

Mozilla'ya göre, işte Eylül 2019 itibarıyla tercih edilen yöntem

@media (prefers-color-scheme: dark) {
  body {
    background: #000;
  }
}
@media (prefers-color-scheme: light) {
  body {
    background: #fff;
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.