암흑 모드는 네트워크에서 쉽게 실현된다
21563 단어 cssjavascript
This post has been originally published on my blog
암흑 모드🌒 지난 몇 년 동안 이것은 하나의 추세가 되었다. 거의 모든 사이트가 이 점을 지지한다는 것을 알 수 있다. 유명한 트위터를 포함하여 어두운 패턴이 유명해진 주요 원인은 빛이 어두운 곳에서 사람의 눈이 어두운 배경에서 옅은 색 텍스트를 보는 것이 어두운 배경에서 옅은 색 텍스트를 보는 것보다 훨씬 낫다는 것이다.
이 빠른 글에서 CSS와 JavaScript를 사용하여 이 점을 쉽게 실현할 수 있는 방법을 보여 드리려고 합니다.
가설
우리는 작은 HTML 페이지가 있는데 기본적으로 얕은 테마가 있습니다. 방문자들에게 어두운 테마와 옵션을 제공해야 하기 때문에 기본적으로 CSS의 변수를 변경함으로써 이 점을 쉽게 실현할 것입니다. CSS
--primary-color
의 사용자 정의 속성이든 Sass$primary-color
나 그 어떠한 방식도 사용할 수 있습니다.다음은 얘가 가벼운 주제처럼 보여요.
해석하다
우리가 가지고 있는 CSS 변수를 먼저 봅시다. (전체 코드가 본문 말미에 언급된GitHub repo에 있는 것을 걱정하지 마십시오.)
:root {
--primary-bg: #eee;
--primary-fg: #000;
--secondary-bg: #ddd;
--secondary-fg: #555;
--primary-btn-bg: #000;
--primary-btn-fg: #fff;
--secondary-btn-bg: #ff0000;
--secondary-btn-fg: #ffff00;
--image-opacity: 1;
}
// here is the rest of the CSS styles
주요 목표는 이러한 변수 값을 다음 값으로 변경하는 것입니다.:root {
--primary-bg: #282c35;
--primary-fg: #fff;
--secondary-bg: #1e2129;
--secondary-fg: #aaa;
--primary-btn-bg: #ddd;
--primary-btn-fg: #222;
--secondary-btn-bg: #780404;
--secondary-btn-fg: #baba6a;
--image-opacity: 0.85;
}
사용자가 선호하는 경우dark mode
만 상술한 변수가 같은 변수 이름이고 다른 값만 테마를 어둡게 할 수 있다. 같은 변수를 두 번 정의하면 뒤의 변수가 첫 번째 변수를 덮어쓰기 때문이다.CSS만 사용
CSS에서
prefers-color-scheme
미디어 쿼리를 사용하는 등 몇 가지 방법으로 이 문제를 해결할 수 있습니다. 미디어 쿼리가 다음과 같으면 색상 변수 목록을 활성화합니다.@media (prefers-color-scheme: dark) {
:root {
--primary-bg: #282c35;
--primary-fg: #fff;
--secondary-bg: #1e2129;
--secondary-fg: #aaa;
--primary-btn-bg: #ddd;
--primary-btn-fg: #222;
--secondary-btn-bg: #780404;
--secondary-btn-fg: #baba6a;
--image-opacity: 0.85;
}
}
그것은 대부분의 현대 브라우저에서 좋은 응용 프로그램 support 을 가지고 있는데, 물론 IE11은 아니다.이러한 상황에서 귀하는 사용자를 위해 전환 단추를 실현할 필요가 없습니다. 왜냐하면 귀하의 사이트는 어쨌든 사용자의 선호를 따르기 때문입니다.
User preference
: 현대 운영체제에서 당신은 설정에서 운영체제의 일반 테마를 변경하여 어둡거나 밝게 할 수 있습니다. CSS에 상기 코드를 추가하면 운영체제에서 사용자의 선호를 얻고 사용자의 선호에 따라 사이트를 표시할 수 있습니다. 이것은 좋은 힌트입니다.💫다음은 어둠 모드에서의 모양새입니다.
그러나 사용자가 운영체제의 첫 번째 옵션을 고려하지 않고 조명 모드에서 사이트를 미리 보는 것을 좋아한다면 문제가 발생할 수 있습니다. 이 경우, 사용자의 첫 번째 설정으로 전환하기 위한 단추를 실행해야 합니다.
전환 버튼 구현(JavaScript)
우선, 주체를 닫기 전에 HTML 파일의 끝에 간단한 스크립트 태그를 추가하고, 그 중에서 우리가 어두운 모드로 전환할 단추를 선택하십시오.
// here is the button
<div id="dark-mode-toggle" title="Dark mode toggle">🌒</div>
... // here is the script tag
<script>
const toggleButton = document.querySelector("#dark-mode-toggle")
</script>
현재 우리는 사용자의 선호도를 보존하고 유지하는 방법을 고려해야 한다. 가장 좋은 해결 방안은 localStorage
이다.이 단추를 누르고localStorage
theme
키의 값이 dark
인지 확인하고 light
로 전환한 다음 아이콘을 변경합니다. 그렇지 않으면 상반된 동작을 수행합니다.다음은 스크립트입니다.
<script>
const toggleButton = document.querySelector('#dark-mode-toggle');
toggleButton.addEventListener('click', (e) => {
darkMode = localStorage.getItem('theme');
if (darkMode === 'dark') {
disableDarkMode();
} else {
enableDarkMode();
}
});
function enableDarkMode() {
localStorage.setItem('theme', 'dark');
toggleButton.innerHTML = '☀️';
}
function disableDarkMode() {
localStorage.setItem('theme', 'light');
toggleButton.innerHTML = '🌒';
}
</script>
현재, 우리는localStorage의 theme
키를 light
에서 dark
로 변경할 수 있는 단추 기능이 있는데, 반대로 아이콘을 바꾸어 일부 내용을 표시할 수도 있지만, 우리는 여전히 목표에 도달하지 못했다.이 아이디어는 암흑 모드 CSS 변수를 저장하고 조건에 따라 클래스를 추가/삭제하며 주체에 사용할 가장 좋은 요소를 추가하는 패키지 클래스를 만드는 것입니다.
먼저 CSS를 수정하고 다음과 같이 클래스를 만듭니다.
.dark-mode {
--primary-bg: #282c35;
--primary-fg: #fff;
--secondary-bg: #1e2129;
--secondary-fg: #aaa;
--primary-btn-bg: #ddd;
--primary-btn-fg: #222;
--secondary-btn-bg: #780404;
--secondary-btn-fg: #baba6a;
--image-opacity: 0.85;
}
그런 다음 스크립트로 이동하여 함수를 약간 변경합니다.function enableDarkMode() {
document.body.classList.add("dark-mode")
localStorage.setItem("theme", "dark")
toggleButton.innerHTML = "☀️"
}
function disableDarkMode() {
document.body.classList.remove("dark-mode")
localStorage.setItem("theme", "light")
toggleButton.innerHTML = "🌒"
}
이제 전환 버튼을 클릭하면 다음과 같이 기능이 정상적으로 작동합니다.또 하나 주의해야 할 것은 다시 불러올 때localStorage의 설정이라면 어두운 모드를 받지 않을 뿐만 아니라 해결 방안도 매우 간단하다. 스크립트의 시작에 이 옵션을 추가하면 된다.
let darkMode = localStorage.getItem("theme")
if (darkMode === "dark") enableDarkMode()
이렇게 하면 당신은 지금 시작할 수 있지만 이 예에서 우리는 미디어 조회를 사용하기 전에 실현된 사용자 선호도를 잃었다. 좋은 소식은 우리가 자바스크립트에서 이 점을 들을 수 있고 다음과 같다.window
.matchMedia("(prefers-color-scheme: dark)")
.addListener(e => (e.matches ? enableDarkMode() : disableDarkMode()))
위의 코드를 사용하면 사용자가 원하는 내용을 변경할 때마다 웹 사이트에서 이를 따르게 되므로 완벽한 스크립트 탭이 제공됩니다.<script>
const toggleButton = document.querySelector("#dark-mode-toggle")
let darkMode = localStorage.getItem("theme")
if (darkMode === "dark") enableDarkMode()
toggleButton.addEventListener("click", e => {
darkMode = localStorage.getItem("theme")
if (darkMode === "dark") {
disableDarkMode()
} else {
enableDarkMode()
}
})
function enableDarkMode() {
document.body.classList.add("dark-mode")
localStorage.setItem("theme", "dark")
toggleButton.innerHTML = "☀️"
}
function disableDarkMode() {
document.body.classList.remove("dark-mode")
localStorage.setItem("theme", "light")
toggleButton.innerHTML = "🌒"
}
window
.matchMedia("(prefers-color-scheme: dark)")
.addListener(e => (e.matches ? enableDarkMode() : disableDarkMode()))
</script>
결론
😅 Phew, 그렇습니다. 이것은 간단하지만 중요한 해결 방안입니다. 현재 매우 유행하고 있습니다. 당신은 Github repo에서 완전한 코드 예시를 찾을 수 있습니다. 저는 당신이 이 빠른 강좌에서 새로운 것을 배울 수 있기를 바랍니다.
도움이 필요하시면 언제든지 트위터에서 저와 공유하거나 토론하거나 저를 따라다니며 친구가 되세요.
만약 당신이 아랍어를 이해한다면 다음은 아랍어 강좌에서 한 걸음 한 걸음 설명하는 것이다.
https://youtu.be/QC0PMPhq6CM
토트 제인스👋
Reference
이 문제에 관하여(암흑 모드는 네트워크에서 쉽게 실현된다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/medhatdawoud/dark-mode-easily-on-the-web-5h6a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)