๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปWEB FrontEnd

๋‹คํฌ ๋ชจ๋“œ, ๋ผ์ดํŠธ ๋ชจ๋“œ toggle

 

๋‹คํฌ๋ชจ๋“œ, ๋ผ์ดํŠธ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ํ† ๊ธ€ ๋ฒ„ํŠผ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ, ํ…Œ๋งˆ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์•„๋ž˜ 3๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

1) ์‚ฌ์šฉ์ž์˜ ํ…Œ๋งˆ ์„ค์ • ์ €์žฅ
2) ์šด์˜์ฒด์ œ ์ˆ˜์ค€์˜ ๋‹คํฌ ๋ชจ๋“œ
3) ์œ„ ๋‘๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ผ์ดํŠธ ๋ชจ๋“œ 

์ฐธ๊ณ  ์‚ฌ์ดํŠธ > A Complete Guide to Dark Mode on the Web

 


"ํ† ๊ธ€ ํ…Œ๋งˆ"

  • ํด๋ž˜์Šค๋ฅผ ํ† ๊ธ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

 

  • ์Šคํƒ€์ผ ์‹œํŠธ๋ฅผ ํ† ๊ธ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

light-theme.css์™€ dark-theme.css ์Šคํƒ€์ผ ์‹œํŠธ๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜์—ฌ ์ด ํŒŒ์ผ์„ ํ† ๊ธ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

const btn = document.querySelector(".btn-toggle");
const theme = document.querySelector("#theme-link");

btn.addEventListener("click", function() {
  if (theme.getAttribute("href") == "light-theme.css") {
    theme.href = "dark-theme.css";
  } else {
    theme.href = "light-theme.css";
  }
});

 

 

 

"ํ…Œ๋งˆ ๊ฒฐ์ •"

 

1) ์‚ฌ์šฉ์ž์˜ ํ…Œ๋งˆ ์„ค์ • ์ €์žฅ

  • ์‚ฌ์šฉ์ž์˜ ํ…Œ๋งˆ ์„ ํƒ์„ localStorage์— ์ €์žฅํ•˜์—ฌ ์‚ฌ์ดํŠธ ์ „์ฒด์™€ ํ›„์† ๋ฐฉ๋ฌธ์‹œ ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉ
  • โ€ป JavaScript๋Š” ์ข…์ข… CSS ์ดํ›„์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ "์ž˜๋ชป๋œ ํ…Œ๋งˆ ํ”Œ๋ž˜์‹œ"(FOIT) ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์›€.

 

 

2) ์šด์˜์ฒด์ œ ์ˆ˜์ค€์˜ ๋‹คํฌ ๋ชจ๋“œ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ ์„ค์ •์—์„œ ์ง์ ‘ ๋ฐ์€ ํ…Œ๋งˆ์™€ ์–ด๋‘์šด ํ…Œ๋งˆ ์ค‘์—์„œ ์„ ํƒํ•œ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ(prefers-color-scheme)๋กœ ์›น ์‚ฌ์ดํŠธ์˜ ํ…Œ๋งˆ๋ฅผ ๊ฒฐ์ •
  • @media (prefers-color-scheme: dark) ์— ๋‹คํฌ๋ชจ๋“œ์—์„œ ๋ณด์—ฌ์งˆ ํ™”๋ฉด์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ

 

 

 

"๋ชจ๋“  ๊ฒƒ์„ ๊ฒฐํ•ฉ"

  1. ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ์„ค์ •์— ๋”ฐ๋ผ ์–ด๋‘ก๊ฑฐ๋‚˜ ๋ฐ์€ ํ…Œ๋งˆ๋ฅผ ์ž๋™์œผ๋กœ ๋กœ๋“œ
  2. ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ์„ค์ •์„ ์ˆ˜๋™์œผ๋กœ ์žฌ์ •์˜ ๊ฐ€๋Šฅ
  3. ํŽ˜์ด์ง€ ์ƒˆ๋กœ ๊ณ ์นจ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ํ…Œ๋งˆ๋ฅผ ์œ ์ง€

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'๐Ÿ’ปWEB FrontEnd' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

webpack  (0) 2021.02.08