darkmode ๋งŒ๋“ค์–ด๋ณด๊ธฐ

2021. 8. 18. 16:05ยท๐ŸฃcodeLab
const theme = localStorage.getItem('theme');
// console.log(theme); // ํ˜„์žฌ theme๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ. // dark || light
if(theme) {
    document.documentElement.SetAttribute('data-theme', theme);
}

localStorage ::

Storage ๊ฐ์ฒด๋Š” ๋‹จ์ˆœํ•œ key-value ์ €์žฅ์†Œ์ด๋ฉฐ, ์ด๋Š” ๊ฐ์ฒด์™€ ๋น„์Šทํ•˜๋‹ค.

์ด ๋ฐ์ดํ„ฐ๋“ค์€ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์—๋„ ์˜จ์ „ํ•˜๊ฒŒ ์œ ์ง€๋œ๋‹ค. (๋‹ค์‹œ ์›นํŽ˜์ด์ง€์— ์ ‘์† ํ•  ๋•Œ ๋งˆ์ง€๋ง‰ ์„ค์ •์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.)

localStorage

getItem(key) :: ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ›์•„์˜จ๋‹ค.

setItem(key, value) :: ํ‚ค, ๊ฐ’์„ ๋ณด๊ด€ํ•œ๋‹ค.

getItem, setItem

document.documentElement === <HTML>

setAttribute(์†์„ฑ์ด๋ฆ„, ์†์„ฑ๊ฐ’) :: ์„ ํƒํ•œ ์š”์†Œ(element)์˜ ์†์„ฑ(attribute)๊ฐ’์„ ์ •ํ•œ๋‹ค.

document.documentElement

setAttribute

 

// ์‹œ์Šคํ…œ์„ค์ •ํ™•์ธ window.matchMedia() :: CSS์˜ ๋ฏธ๋””์–ด์ฟผ๋ฆฌ๊ฐ€ ํ˜„์žฌ ํŽ˜์ด์ง€์— ํ•ด๋‹นํ•˜๋Š”์ง€ ํ™•์ธ.
const currentTheme = localStorage.getItem('theme') || 
(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');

currentTheme ์ƒ์ˆ˜์—์„œ localStorage๊ฐ€ 'theme'๋ž€ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ฑฐ๋‚˜ window.matchMedia(...)๊ฐ€ 'dark' ์ผ ๋•Œ, ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ true์ด๋ฉด 'dark' , false์ด๋ฉด 'light'์ด๋‹ค.

 

window.matchMedia(medaiQueryString) :: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์ ‘์†ํ•˜๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ํฌ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • ์†์„ฑ

    • media :: mediaQueryString์„ ๋ฐ˜ํ™˜.
    • matches :: ๋ฒ”์œ„์— ๋งž๋Š”์ง€ ๊ฒ€์‚ฌ. true false ๋ฐ˜ํ™˜.

 

// ์•ž์— ์ด์–ด์„œ..
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
console.log(currentTheme); // (1)
document.documentElement.setAttribute('data-theme', newTheme);
locaStorage.setItem('theme', newTheme);
console.log(newTheme, currentTheme); // (2)

(1) dark ์ผ ๋•Œ, (2) light dark

currentTheme๋Š” ํ˜„์žฌ ์ƒˆ๋กœ๊ณ ์นจํ•œ ํ›„ ํ…Œ๋งˆ์ด๋ฉฐ, ๊ณผ๊ฑฐ์˜ ํ…Œ๋งˆ์ด๋‹ค.

newTheme๋Š” ์ง€๊ธˆ ๋‹น์žฅ์˜ ํ…Œ๋งˆ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐ŸฃcodeLab' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • SVG ์ฐธ๊ณ 
  • ์Šคํฌ๋กค ์‹œ ์œˆ๋„์šฐ ํ•˜๋‹จ์— ๊ณ ์ •ํ•˜๊ธฐ
  • ๊ฐ€์ƒ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•ด backgroud ๋„“์ด์™€ ๋†’์ด ์ ์šฉ
  • ํด๋ฆญ ๋˜๋Š” ์ˆซ์ž ์ž…๋ ฅ ์‹œ ๋ง์…ˆ ๊ตฌํ•˜๊ธฐ
jmjm
jmjm
  • jmjm
    /* jmjmjm */
    jmjm
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (140)
      • ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ปSTUDY (101)
        • HTML (9)
        • CSS (25)
        • SASS (4)
        • JavaScript (19)
        • jQuery (9)
        • Publishing (8)
        • Git (11)
        • React (14)
        • Vue (0)
        • ์›น์ ‘๊ทผ์„ฑ (1)
        • Gulp (1)
      • ๐ŸฃcodeLab (28)
      • ๐ŸŒˆetc (8)
      • ๐Ÿฅฐ ์ผ์ƒ (2)
      • ๐ŸŒŸ์ฝ์–ด๋ณด๊ธฐ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    javascript htmlcollection
    sass compiler
    ๋ง์ค„์ž„ tooltip
    javascript htmlcollection nodelist
    ๋ง์ค„์ž„ ํ˜ธ๋ฒ„
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น
    sass
    ์›น์ ‘๊ทผ์„ฑ
    ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น ์ข…๋ฅ˜
    css ํ˜•์ œ์ธ์ ‘์ž ์•ˆ๋ผ์š”
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹๋ฌธ
    javascript ์ปฌ๋ ‰์…˜
    vscode ๋‹จ์ถ•ํ‚ค
    react import export
    css flex
    ์•„์ฝ”๋””์–ธ๋ฉ”๋‰ด
    javascript ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น
    ๋ง์ค„์ž„ ํˆดํŒ
    html collection
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปฌ๋ ‰์…˜
    sticky jsfiddle
    ํ˜•์ œ์ธ์ ‘์ž ์•ˆ๋˜๋Š” ์ด์œ 
    ํ˜•์ œ์ธ์ ‘์ž display none
    CSS ์„ ํƒ์ž
    ํ˜•์ œ์ธ์ ‘์ž
    javascript nodelist
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹ ๋ฌธ
    css ๊ฐ€์ƒ์„ ํƒ์ž
    ๋ง์ค„์ž„ hover
    HTML Form
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
jmjm
darkmode ๋งŒ๋“ค์–ด๋ณด๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”