[개발] 웹페이지 다크모드 개발

안녕하세요 @realmankwon입니다.

웹페이지를 개발하면서 생각해보니 제가 사용하는 프로그램은 모두 다크모드로 사용하고 있는데 정작 제가 만들고 있는 것들은 다크모드를 반영하지 않았더군요.
크롬에서 다크 리더라는 확장앱을 사용하고 있어서 다크모드를 적용을 안 했던 것 같기는 한데 문제는 제가 만든 웹페이지에 다크 리더를 적용하면 이상하게 속도가 급격하게 느려졌습니다.

그래서 잘 사용하지 않게 되더군요.
이번에도 시간을 내어 해결을 해 보았습니다.
일단 언제나처럼 구글링을.... ㅎㅎ

바로 나오는군요 ^^

https://herculino.com/en/blog/semantic_ui_darkmode_part1.html

일단 css 를 작성해 줍니다.

<style>
  :root {
    --darkBG: #232b32;
  }

  body.inverted {
    background-color: var(--darkBG);
  }
</style>

다음으로 html 에 button 을 추가 시켜줍니다.
아래의 javascript 소스를 보면 아시겠지만 해당 버튼은 토글이 되면서 다크모드와 라이트모드를 왔다리 갔다리 하게 됩니다.

  <button class="ui button icon basic" id="darkmode">
    <i class="moon icon"></i>
  </button>

위의 버튼 클릭에 따라 toggle 함수들이 실행이 되면서 모든 class 에 inverted 가 추가되면서 다크모드로 변경이 됩니다.
이때 원문에서는 darkmodeEnabled라는 변수가 선언이 되어 있지 않아서 에러가 났습니다.
생각해 보면 현재 상태가 어떤지를 판단하는 변수이기 때문에 button 의 class 에 sun 이 있으면 true, moon 이 있으면 false 를 지정해주면 되었습니다.

<script>
  function toggleDarkMode() {
    // add fomantic's inverted class to all ui elements
    $("body").find(".ui").addClass("inverted");
    // add custom inverted class to body
    $("body").addClass("inverted");

    // simple toggle icon change
    $("#darkmode > i").removeClass("moon");
    $("#darkmode > i").addClass("sun");

    return;
  }

  function toggleLightMode() {
    // remove fomantic's inverted from all ui elements
    $("body").find(".ui").removeClass("inverted");
    // remove custom inverted class to body
    $("body").removeClass("inverted");

    // change button icon
    $("#darkmode > i").removeClass("sun");
    $("#darkmode > i").addClass("moon");

    return;
  }

  $("#darkmode").click(function () {
    const darkmodeEnabled = $("#darkmode > i").hasClass("sun");
    if (darkmodeEnabled) {
      toggleLightMode();
    } else {
      toggleDarkMode();
    }
  });
</script>

그렇게 하고 실행을 하니 아주 잘 되는군요 ㅎㅎ
필요하신 분들은 참고하시기 바랍니다!ㅎ

Sort:  

Upvoted! Thank you for supporting witness @jswit.
default.jpg

@realmankwon transfered 20.000 KRWP to @krwp.burn. voting percent : 100.00%, voting power : 23.34%, steem power : 2001367.55, STU KRW : 1200.
@realmankwon staking status : 16124.391 KRWP
@realmankwon limit for KRWP voting service : 16.124 KRWP (rate : 0.001)
What you sent : 20.000 KRWP (Voting Percent over 100 %)
Refund balance : 16.719 KRWP [65863598 - 57674aca9c826cec517a2512dbb6d8530af7eeae]

예제 감사합니다.

Coin Marketplace

STEEM 0.28
TRX 0.13
JST 0.032
BTC 66256.11
ETH 3036.39
USDT 1.00
SBD 3.73