จะตรวจสอบได้อย่างไรว่าระบบปฏิบัติการอยู่ในโหมดมืดในเบราว์เซอร์?


138

คล้ายกับ " จะตรวจสอบได้อย่างไรว่า OS X อยู่ในโหมดมืด " สำหรับเบราว์เซอร์เท่านั้น

มีใครพบว่ามีวิธีตรวจสอบว่าระบบของผู้ใช้อยู่ใน OS X Dark Mode ใหม่ใน Safari / Chrome / Firefox หรือไม่?

เราต้องการเปลี่ยนการออกแบบเว็บไซต์ของเราให้เป็นมิตรกับโหมดมืดตามโหมดการทำงานปัจจุบัน


1
เท่าที่ฉันทราบไม่มีการสืบค้นสื่อ CSS สำหรับ Safari ในการตรวจจับแสงหรือโหมดมืด แต่ Safari รองรับวิดเจ็ตสีเข้มในหน้า HTML อย่างชัดเจน การยื่นเรดาร์ให้มันอาจเป็นประโยชน์
mschmidt

อย่า hiurt ฉัน แต่หลังจากStackoverflow แนะนำโหมดมืดฉันgoogledวิธีที่พวกเขาดำเนินการ "ระบบ" และโหมดสะดุดเข้ากับคำถามนี้ ฉันคาดว่าจะมีการเข้าชมจำนวนมากในสิ่งนี้ :-)
usr-local-ΕΨΗΕΛΩΝ

คำตอบ:


178

มาตรฐานใหม่มีการลงทะเบียนในW3C ในสื่อระดับ 5

หมายเหตุ:ขณะนี้ใช้ได้เฉพาะในSafari Technology Preview Release 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 ของคุณให้ถูกต้อง

แก้ไข (7 ธ.ค. 2561):

ในSafari Technology Preview Release 71พวกเขาได้ประกาศการสลับใน Safari เพื่อให้ทำการทดสอบได้ง่ายขึ้น ฉันยังทำหน้าทดสอบเพื่อดูพฤติกรรมของเบราว์เซอร์

หากคุณติดตั้งSafari Technology Preview Release 71คุณสามารถเปิดใช้งานผ่าน:

พัฒนา> ฟีเจอร์ทดลอง> รองรับ CSS โหมดมืด

จากนั้นหากคุณเปิดหน้าทดสอบและเปิดตัวตรวจสอบองค์ประกอบคุณจะมีไอคอนใหม่เพื่อสลับโหมดมืด / แสง

สลับโหมดมืด / สว่าง

-

แก้ไข (11 ก.พ. 2019): Apple จัดส่งในSafari 12.1 Dark Mode ใหม่

-

แก้ไข (5 ก.ย. 2019): ปัจจุบัน 25% ของโลกใช้ CSS โหมดมืดได้ ที่มา: caniuse.com

เบราว์เซอร์ที่กำลังจะมาถึง:

  • iOS 13 (ฉันเดาว่าจะจัดส่งในสัปดาห์หน้าหลังจาก Keynote ของ Apple)
  • EdgeHTML 76 (ไม่แน่ใจว่าจะจัดส่งเมื่อใด)

-

แก้ไข (5 พ.ย. 2019): ปัจจุบัน 74% ของโลกสามารถใช้ CSS โหมดมืดได้ ที่มา: caniuse.com

-

แก้ไข (3 ก.พ. 2020): Microsoft Edge 79 รองรับโหมดมืด (เผยแพร่เมื่อ 15 ม.ค. 2020)

-

คำแนะนำของฉันคือ: คุณควรพิจารณาใช้โหมดมืดเพราะผู้ใช้ส่วนใหญ่สามารถใช้งานได้แล้ว (โดยเฉพาะอย่างยิ่งสำหรับการประหยัดแบตเตอรี่มือถือ)

หมายเหตุ:ตอนนี้เบราว์เซอร์หลักทั้งหมดรองรับโหมดมืดยกเว้น IE, Edge


2
เพิ่งทดสอบ. หากคุณเปลี่ยนธีมในการตั้งค่า mac os คุณต้องรีสตาร์ทเบราว์เซอร์ เสียดายที่มันไม่ได้ซิงค์ได้ทันที
Herman Starikov

3
@HermanStarikov ฉันโพสต์การอัปเดตเกี่ยวกับปัญหานี้ที่คุณกำลังอธิบาย ด้วย Safari Technology Preview Release 71 ใหม่คุณสามารถสลับได้แบบเรียลไทม์
Davy de Vries

ดี! ฉันได้ทำการสาธิตเล็กน้อยว่าธีมจะเป็นอย่างไรกับ bootstrap: twitter.com/Hermanhasawish/status/1071517994302562305
Herman Starikov

2
มีวิธีตรวจจับสิ่งนี้ใน JavaScript หรือไม่?
Akash Kava

7
@AkashKava ฉัน Googled ไปรอบ ๆ ใช่เป็นไปได้ถ้าคุณใช้สิ่งนี้: window.matchMedia("(prefers-color-scheme: dark)").matchesถ้าฉันมีเวลาว่างฉันจะเพิ่มโซลูชันจาวาสคริปต์แบบเต็มให้กับคำตอบของฉัน
Davy de Vries

69

หากคุณต้องการตรวจจับจาก 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";
});

Hi! ใช้งานได้ดี ฉันสงสัยว่า - ไวยากรณ์นี้ทำงานอย่างไร?
Stormblessed

1
@Stormblessed ก่อนอื่นมันจะตรวจสอบว่าเบราว์เซอร์รองรับmatchMediaหรือไม่จากนั้นมันจะพยายามจับคู่prefers-color-scheme: darkสตริง ถ้าตรงกับเราอยู่ในโหมดมืด
Mark Szabo

ด้วยตัวดำเนินการ Elvis ใหม่สามารถเขียนได้ว่าif (window.matchMedia?('(prefers-color-scheme: dark)').matches) { }
Mark Szabo

โอ้นั่นเข้าท่า! ไวยากรณ์ที่มี. ตรงกันดูเหมือนว่ากำลังทำการเปรียบเทียบระหว่างสิ่งแรกกับสิ่งที่สองหรือบางสิ่ง ขอบคุณ!
Stormblessed

ควรเป็นคำตอบที่ตรวจสอบแล้ว
podperson

22

ขณะนี้เป็น (กันยายน 2018) ที่ถูกกล่าวถึงใน "CSS คณะทำงานแก้ไขร่าง" Spec ได้เปิดตัวแล้ว (ดูด้านบน) พร้อมใช้งานเป็นแบบสอบถามสื่อ สิ่งที่มีที่ดินอยู่แล้วใน Safari เห็นที่นี่ ในทางทฤษฎีคุณสามารถทำได้ใน Safari / Webkit:

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

แต่ดูเหมือนว่านี่เป็นส่วนตัว เมื่อวันที่ MDN คุณลักษณะ CSS สื่อinverted-colorsมีการกล่าวถึง เสียบ: ฉัน blogged เกี่ยวกับโหมดมืดที่นี่


5

ฉันค้นหาด้วย Mozilla API ดูเหมือนว่าจะไม่มีตัวแปรใด ๆ ที่ตรงกับสีของเบราว์เซอร์ - หน้าต่าง แม้ว่าฉันพบหน้าเว็บที่อาจช่วยให้คุณ: วิธีการรูปแบบการใช้งานระบบปฏิบัติการใน CSS แม้จะมีส่วนหัวของบทความ แต่สีจะแตกต่างกันสำหรับ Chrome และ Firefox



2

ตาม Mozilla นี่คือวิธีที่ต้องการในเดือนกันยายน 2019

@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.