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.