๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[๊ฐœ๋ฐœ] Practice/JavaScript jQuery

[JavaScript / jQuery] Dark Mode ์™€ Light Mode ์ „ํ™˜ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Mode ์ „ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ

by Connecting-the-dots 2022. 3. 4.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ก ์‹ค์Šต ํฌ์ธํŠธ!

  • Light Mode ์™€ Dark Mode ๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๋ฒ„ํŠผ์„ ๋งŒ๋“œ๋Š” ์ˆ˜์—…์„ ๋“ค์œผ๋ฉด์„œ, ๋ฒ„ํŠผ ์•ˆ์˜ ๋ฌธ๊ตฌ๋งŒ ๋ฐ”๋€Œ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ ํ™ˆํŽ˜์ด์ง€์—์„œ ๋ฐฐ๊ฒฝ๊ณผ ๊ธ€์”จ์ƒ‰์ด ๋ฐ”๋€Œ๊ฒŒ๋” ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ์–ด์กŒ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ Dark Mode ๋Š” ํฐ์ƒ‰ ๊ธ€์”จ์™€ ๊ฒ€์€ ๋ฐฐ๊ฒฝ์ด ์ฃผ๋ฅผ ์ด๋ฃจ๋Š”๋ฐ ์™„์ „ ๊ฒ€์€ ๋ฐฐ๊ฒฝ์€ ๋ญ”๊ฐ€ ์ด์งˆ๊ฐ์ด ๋Š๊ปด์ ธ์„œ ๋ฐฐ๊ฒฝ์ƒ‰์€ ๊ฒ€์ •๋ณด๋‹ค๋Š” ์‚ด์ง ๋ฐ์€ ์ƒ‰์„, ๊ธ€์”จ๋Š” ๊ณจ๋“œ์ƒ‰์ƒ์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.

๐Ÿ’œ HTML

<span class="badge bg-dark" id="badge">๐ŸŒ Dark Mode ๐Ÿ”„</span>
  • ์ผ๋‹จ Bootstrap ์„ ์ด์šฉํ•ด์„œ ๊ธฐ๋ณธ ๋ ˆ์ด์•„์›ƒ์„ ์žก์•„์ฃผ๊ณ  ๋กœ๊ณ  ์•„๋ž˜์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  Dark Mode ๋ฌธ๊ตฌ์™€ ํ•จ๊ป˜ ๋‹ฌ ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค. Light Mode ์—์„œ๋Š” ํ•ด ์ด๋ชจํ‹ฐ์ฝ˜์ด ๋‚˜์˜ฌ ์˜ˆ์ •!

๐Ÿ’œ CSS

.dark {
  background: rgb(33, 37, 41) !important;
  color: gold !important;
}

#badge {
  font-size: 12px;
  cursor: pointer;
  width: 130px;
  text-align: center;
  padding: 6px;
  border: solid 1px gold;
}
  • ๋ชจ๋“œ ์ „ํ™˜ ๋ฒ„ํŠผ์ด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์œ„์น˜์— ๋ฐฐ์น˜๋˜์ง€ ์•Š๊ธฐ์— ์„ธ๋ถ€ ์กฐ์ •์„ ์ข€ ํ•ด์ฃผ์—ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ   Dark Mode ์ผ ๋•Œ ๋ถ™์ผ dark class ์— background ์ƒ‰์ƒ๊ณผ ๊ธ€์ž ์ƒ‰์ƒ์„ ์ง€์ •ํ•˜์—ฌ ์ž‘์„ฑํ•ด์ฃผ์—ˆ๋‹ค. 
  • Bootstrap ๋ ˆ์ด์•„์›ƒ์„ ๊ฐ€์ ธ์˜ค๋‹ค๋ณด๋‹ˆ class ๊ฐ€ ์ œ๋Œ€๋กœ ์ ์šฉ๋˜์ง€ ์•Š์•„์„œ ๋ถ€๋“์ดํ•˜๊ฒŒ !important ์†์„ฑ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด ์†์„ฑ์€ ๋‚จ๋ฐœํ•˜๋ฉด ์•ˆ ๋˜๋Š”.. ์›ฌ๋งŒํ•ด์„œ๋Š” ์“ฐ์ง€๋ง๋ผ๊ณ  ํ•œ ์†์„ฑ์ด์ง€๋งŒ... ๋‚˜์—๊ฒŒ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์—†์—ˆ๋‹ค... ๐Ÿ˜‚

๐Ÿ’œ JavaScript

var cnt = 0;
$('#badge').on('click', function(){
    cnt++;
    if(cnt % 2){
        $('#badge').html('๐ŸŒž Light Mode ๐Ÿ”„');
        $('body').addClass('dark');
        $('.navbar').addClass('navbar-dark');
        $('.navbar').removeClass('navbar-light');
        $('.navbar').addClass('bg-dark');
        $('.navbar').removeClass('bg-light');
        $('#logo').addClass('dark');
        $('.btn-login').addClass('dark');
        $('.list-group-item').addClass('dark');
        $('.white-bg').addClass('dark');
        $('.btn').addClass('dark');
    } else {
        $('#badge').html('๐ŸŒ Dark Mode ๐Ÿ”„');
        $('body').removeClass('dark');
        $('.navbar').addClass('navbar-light');
        $('.navbar').removeClass('navbar-dark');
        $('.navbar').addClass('bg-light');
        $('.navbar').removeClass('bg-dark');
        $('#logo').removeClass('dark');
        $('.btn-login').removeClass('dark');
        $('.list-group-item').removeClass('dark');
        $('.white-bg').removeClass('dark');
        $('.btn').removeClass('dark');
    }
})
  • ๋ฒ„ํŠผ์„ ํ™€์ˆ˜๋ฒˆ ํด๋ฆญํ•˜๋ฉด Dark Mode ๊ฐ€ ์ ์šฉ๋˜๋ฉด์„œ ๋ฒ„ํŠผ ๋ฌธ๊ตฌ๋Š” Light Mode ๋กœ ๋ฐ”๋€Œ์–ด์•ผ ํ•˜๊ณ , ์ง์ˆ˜๋ฒˆ ํด๋ฆญํ•˜๋ฉด Light Mode ๊ฐ€ ์ ์šฉ๋˜๋ฉด์„œ ๋ฒ„ํŠผ ๋ฌธ๊ตฌ๋Š” Dark Mode ๋กœ ๋ฐ”๋€Œ์–ด์•ผ ํ–ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ํ—ท๊ฐˆ๋ฆฌ๋ฉด ์ง์ ‘ console.log() ์ฐ์–ด๋ณด์ž!
  • ๊ทธ ๋‹ค์Œ์—๋Š” ๊ฐ Mode ์— ๋งž๊ฒŒ ์ ์šฉ๋˜์–ด์•ผ ํ•˜๋Š” class ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•ด์ฃผ์—ˆ๋‹ค.
  • Bootstrap ์—์„œ ๊ฐ€์ ธ์˜จ ๋ ˆ์ด์•„์›ƒ์—๋Š” ์ด๋ฏธ Dark Mode ์™€ Light Mode ์— ๋งž๋Š” ๋””์ž์ธ์ด class ๋กœ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์ ์šฉ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋ˆˆ์น˜๊ป.. ์กฐ์ •ํ•ด๋ณด๋ฉด ๋œ๋‹ค! 
728x90
๋ฐ˜์‘ํ˜•