브라우저에서 OS가 어두운 모드인지 감지하는 방법은 무엇입니까?


138

브라우저에서만 " OS X가 어두운 모드인지 감지하는 방법? "과 유사 합니다.

사용자의 시스템이 Safari / Chrome / Firefox의 새로운 OS X 다크 모드인지 감지하는 방법이 있는지 아는 사람이 있습니까?

현재 운영 모드에 따라 사이트 디자인을 어두운 모드로 변경하고 싶습니다.


1
내가 아는 한 Safari에서 밝거나 어두운 모드를 감지하는 CSS 미디어 쿼리는 없지만 Safari는 HTML 페이지에서 어두운 위젯을 확실히 지원합니다. 레이더를 제출하는 것이 도움이 될 수 있습니다.
mschmidt 2016 년

나를 hiurt하지만 후에하지 마십시오 유래는 어두운 모드를 도입 내가 그들은 "시스템"모드를 구현하는 방법과이 질문에 비틀 거렸다. 나는 이것에 많은 트래픽을 기대한다 :-)
usr-local-ΕΨΗΕΛΩΝ

답변:


177

새로운 표준은 미디어 쿼리 레벨 5의 W3C에 등록되어 있습니다.

참고 : 현재 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를 올바르게 계단식으로 묶는 것이 좋습니다.

편집 (2018 년 12 월 7 일) :

Safari Technology Preview Release 71 에서는 사파리 에서 테스트를 쉽게하기 위해 토글 스위치를 발표했습니다. 또한 브라우저 동작을 확인하기 위해 테스트 페이지 를 만들었습니다 .

당신이있는 경우 사파리 기술 미리보기 릴리스 (71)는 당신이를 통해 활성화 할 수 있습니다 설치 :

개발> 실험 기능> 다크 모드 CSS 지원

그런 다음 테스트 페이지 를 열고 요소 관리자를 열면 새 아이콘이있어 어둡게 / 밝게 모드를 전환합니다.

다크 / 라이트 모드 토글

-

편집 (2019 년 2 월 11 일) : Apple, 새로운 Safari 12.1 다크 모드로 출시

-

편집 (2019 년 9 월 5 일) : 현재 세계의 25 %가 어두운 모드 CSS를 사용할 수 있습니다. 출처 : caniuse.com

다가오는 브라우저 :

  • iOS 13 (애플 기조 연설 다음 주에 출시 될 예정)
  • EdgeHTML 76 (배송시기는 확실하지 않음)

-

편집 (2019 년 11 월 5 일) : 현재 세계의 74 %가 다크 모드 CSS를 사용할 수 있습니다. 출처 : caniuse.com

-

편집 (2020 년 2 월 3 일) : Microsoft Edge 79는 어두운 모드를 지원합니다. (2020 년 1 월 15 일 출시)

-

내 제안은 : 대부분의 사용자가 지금 (특히 모바일 일명 배터리 절약을 위해) 사용할 수 있기 때문에 다크 모드 구현을 고려해야합니다.

참고 : IE, Edge를 제외한 모든 주요 브라우저는 현재 어두운 모드를 지원합니다.


2
방금 테스트했습니다. mac OS 설정에서 테마를 변경 한 경우 브라우저를 다시 시작해야합니다. 너무 빨리 동기화되지 않습니다.
허먼 스타리 코프

3
@HermanStarikov 설명하신 문제에 대한 업데이트를 게시했습니다. 새로운 Safari Technology Preview Release 71을 사용하면 실시간으로 전환 할 수 있습니다.
Davy de Vries가

좋은! : 나는 테마가 부트 스트랩과 같을 것이다 무엇의 작은 데모를했다 twitter.com/Hermanhasawish/status/1071517994302562305
허먼 Starikov

2
JavaScript에서 이것을 감지하는 방법이 있습니까?
Akash Kava

7
@ AkashKava 나는 구글을 둘러 보았습니다. 그렇습니다. 예를 들어 다음과 같이 사용하면 가능합니다 : window.matchMedia("(prefers-color-scheme: dark)").matches여가 시간 이 있으면 전체 자바 스크립트 솔루션을 답변에 추가 할 것입니다.
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";
});

안녕하세요! 이것은 잘 작동합니다. 그래도 궁금합니다.이 구문은 정확히 어떻게 작동합니까?
Stormblessed

1
@Stormblessed는 먼저 브라우저가 지원하는지 확인한 matchMedia다음 prefers-color-scheme: dark문자열 일치를 시도 합니다. 일치하면 우리는 어두운 모드에 있습니다.
마크 Szabo

새로운 Elvis 연산자를 사용하면 다음과 같이 작성할 수 있습니다.if (window.matchMedia?('(prefers-color-scheme: dark)').matches) { }
Mark Szabo

오 이해가 되네요! .matches 구문은 첫 번째와 두 번째 또는 다른 것을 비교하는 것처럼 보입니다. 감사!
Stormblessed

확인 된 답변이어야합니다.
포드 맨

22

이것은 현재 "CSS 실무 그룹 편집자 초안"에서 논의되고 있습니다 (2018 년 9 월) . 미디어 쿼리로 사용 가능한 사양이 시작되었습니다 (위 참조). 뭔가가 이미 사파리에 도착했다, 또한 참조 여기에 . 이론적으로는 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.