[CSS] ๐ŸŒ“ ๋‹คํฌ๋ชจ๋“œ ๊ตฌํ˜„ ๋ฐฉ์‹ ๋น„๊ต

ttiningยท2025๋…„ 4์›” 13์ผ

prefer-color-scheme ๐Ÿ†š data-theme ๐Ÿ†š class ๋ฐฉ์‹

1๏ธโƒฃ CSS ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ : prefers-color-scheme

prefers-color-scheme์€ CSS ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์ด๋‹ค.
์ด๋Š” ์‚ฌ์šฉ์ž์˜ ์‹œ์Šคํ…œ์ด ๋ผ์ดํŠธ ํ…Œ๋งˆ๋‚˜ ๋‹คํฌ ํ…Œ๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํƒ์ง€ํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉ๋œ๋‹ค.
์‚ฌ์šฉ์ž์˜ ์šด์˜์ฒด์ œ ์„ค์ •(๋ผ์ดํŠธ ๋ชจ๋“œ ๋˜๋Š” ๋‹คํฌ ๋ชจ๋“œ)์ด๋‚˜ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ ์„ค์ •์—์„œ ์„ ํ˜ธํ•˜๋Š” ํ…Œ๋งˆ๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

  • โœ… ์žฅ์ 

    • ๊ตฌํ˜„์ด ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด๋‹ค.
    • ์œ ์ € ์„ค์ • ์—†์ด๋„ ์ž๋™์œผ๋กœ ์‹œ์Šคํ…œ ํ…Œ๋งˆ๋ฅผ ๊ฐ์ง€ํ•ด ๋ฐ˜์‘ํ•œ๋‹ค.
    • CSS๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค. (JS ์—†์ด๋„ ๊ฐ€๋Šฅ)
  • โš ๏ธ ๋‹จ์ 

    • ์‚ฌ์šฉ์ž ์„ ํƒ์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ('์‹œ์Šคํ…œ ์„ค์ •์€ ๋‹คํฌ์ง€๋งŒ, ์›น์‚ฌ์ดํŠธ๋Š” ๋ผ์ดํŠธ๋กœ ๋ณด๊ณ  ์‹ถ์–ด' ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ถˆ๊ฐ€๋Šฅ)
    • ํ…Œ๋งˆ ํ† ๊ธ€ ๊ฐ™์€ ๋™์  ์ œ์–ด์—๋Š” ๋ถ€์ ํ•ฉํ•˜๋‹ค.
    • ํŠน์ • ์‹œ์ ์—๋งŒ ๋ฐ˜์‘ํ•˜๊ณ , JS๋กœ ์ œ์–ดํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.
  • ๐ŸŽฏ ์‚ฌ์šฉ ์˜ˆ์‹œ

    .box {
      background: #eee;
      color: black;
    }
    
    @media (prefers-color-scheme: dark) {
      .box.dark-scheme {
        background: #333;
        color: white;
      }
    }
    
    @media (prefers-color-scheme: light) {
      .box.light-scheme {
        background: white;
        color: #555;
      }
    }
    • ์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ•˜๋ฉด, ์‚ฌ์šฉ์ž ์‹œ์Šคํ…œ์ด ๋‹คํฌ ๋ชจ๋“œ์ผ ๋• ์–ด๋‘์šด ์Šคํƒ€์ผ์„,
      ๋ผ์ดํŠธ ๋ชจ๋“œ์ผ ๋• ๋ฐ์€ ์Šคํƒ€์ผ์„ ์ž๋™์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


2๏ธโƒฃ ์†์„ฑ ๋ฐฉ์‹ : data-theme="light" / data-theme="dark"

data-* ์†์„ฑ์€ ํ‘œ์ค€์ด ์•„๋‹Œ ์†์„ฑ์ด๋‚˜ ์ถ”๊ฐ€์ ์ธ DOM ์†์„ฑ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์กฐ์ž‘์„ ํ•˜์ง€ ์•Š๊ณ ๋„, ์˜๋ฏธ๋ก ์  ํ‘œ์ค€ HTML ์š”์†Œ์— ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.
์†์„ฑ์˜ ์ด๋ฆ„์ด data-๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ์†์„ฑ์€ ๋ฐ์ดํ„ฐ ์†์„ฑ์ด๋‹ค. ํ™”๋ฉด์— ์•ˆ ๋ณด์ด๊ฒŒ ๊ธ€์ด๋‚˜ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์—˜๋ฆฌ๋ฉ˜ํŠธ์— ๋‹ด์•„ ๋†“์„ ์ˆ˜ ์žˆ๋‹ค.

  • โœ… ์žฅ์ 

    • ํ™•์žฅ์„ฑ์ด ์ข‹๋‹ค. data-theme="sepia"์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ ํ…Œ๋งˆ๋„ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์„ ํƒ์ž ํŠน์ด์„ฑ์ด ๋‚ฎ์•„์„œ ์Šคํƒ€์ผ์„ ๋ฎ์–ด์“ฐ๊ธฐ ์‰ฝ๊ณ  ๊น”๋”ํ•˜๋‹ค.
    • ์ฝ”๋“œ์—์„œ data- ์†์„ฑ์€ ์šฉ๋„๊ฐ€ ๋ช…ํ™•ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋…์„ฑ์ด๋‚˜ ์œ ์ง€๋ณด์ˆ˜์— ์ข‹๋‹ค.
  • โš ๏ธ ๋‹จ์ 

    • ์„ ํƒ์ž๊ฐ€ ๊ธธ์–ด์ ธ์„œ ์‚ด์ง ๊ท€์ฐฎ์•„์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ค๋ž˜๋œ ๋ธŒ๋ผ์šฐ์ €(์˜ˆ: IE8 ์ดํ•˜)์—์„œ ๋ฐ์ดํ„ฐ ์†์„ฑ ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. (์š”์ฆ˜์—” ๋ณ„๋กœ ์•ˆ ์”€ ๐Ÿ˜)
  • ๐ŸŽฏ ์‚ฌ์šฉ ์˜ˆ์‹œ

    <body data-theme="dark">
    [data-theme="dark"] .box {
      background: #333;
      color: white;
    }


3๏ธโƒฃ ํด๋ž˜์Šค ๋ฐฉ์‹ : .light-mode, .dark-mode

๋‹คํฌ ๋ชจ๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ† ๊ธ€ํ•˜๊ฑฐ๋‚˜, ์‹œ์Šคํ…œ ์„ค์ •๊ณผ ๋ณ„๊ฐœ๋กœ ์‚ฌ์šฉ์ž ์„ค์ •์„ ์ €์žฅํ•ด์„œ ์ ์šฉํ•˜๋ ค๋ฉด
<body> ํƒœ๊ทธ์— ํ…Œ๋งˆ ์ •๋ณด๋ฅผ ์ง์ ‘ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • โœ… ์žฅ์ 

    • ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ด๋‹ค. ์กฐ๊ฑด์— ๋”ฐ๋ผ ํด๋ž˜์Šค๋งŒ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
    • CSS ์šฐ์„ ์ˆœ์œ„ ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค. BEM ์Šคํƒ€์ผ ๊ฐ™์€ ๊ตฌ์กฐ์™€๋„ ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค.
    • ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฌธ์ œ์—†์ด ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธํ™˜์„ฑ ๊ฑฑ์ •์ด ์—†๋‹ค.
  • โš ๏ธ ๋‹จ์ 

    • ํด๋ž˜์Šค๋ช…์ด ๊ณ ์ •์ ์ด๋ผ ํ…Œ๋งˆ ํ™•์žฅ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.
    • ํด๋ž˜์Šค ๋„ค์ด๋ฐ์ด ๋งŽ์•„์ง€๋ฉด ๋‹ค๋ฅธ ์Šคํƒ€์ผ ์ฒด๊ณ„์™€ ์„ž์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ ์˜ˆ์‹œ

    <body class="dark">
    .dark .box {
      background: #333;
      color: white;
    }


๐ŸŒŸ ๊ฒฐ๋ก  : ์–ด๋–ค ๋ฐฉ๋ฒ•์ด ๋” ์ข‹์€๊ฐ€?

  • ํด๋ž˜์Šค ๋ฐฉ์‹๋„ ์ข‹์ง€๋งŒ, ํ™•์žฅ์„ฑ๊ณผ ์ฝ”๋“œ์˜ ๋ช…ํ™•์„ฑ์„ ์ƒ๊ฐํ•˜๋ฉด data-theme ๋ฐฉ์‹์ด ์ข€ ๋” ์œ ๋ฆฌํ•˜๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ € ์ง€์›๋„ ์ด์ œ ๋Œ€๋ถ€๋ถ„ ๊ดœ์ฐฎ๊ณ , ํ–ฅํ›„ ๋” ๋‹ค์–‘ํ•œ ํ…Œ๋งˆ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ์ด์ชฝ์ด ํ›จ์”ฌ ์œ ์—ฐํ•˜๋‹ค.


๐Ÿ“œ ์ฐธ๊ณ 

profile
๋‚ด๊ฐ€ ๋ณด๋ ค๊ณ  ๋งŒ๋“  ๋ฒจ๋กœ๊ทธ *'-'*

0๊ฐœ์˜ ๋Œ“๊ธ€