>웹 프론트엔드 >CSS 튜토리얼 >React/Next.js에 어둡고 밝은 테마 지원 추가

React/Next.js에 어둡고 밝은 테마 지원 추가

王林
王林원래의
2024-09-03 18:31:10574검색

Adding Dark and Light Theme Support in React/Next.js

React/Next.js에 어둡고 밝은 테마 지원 추가

개요

이 가이드에서는 React 또는 Next.js 애플리케이션에 어두운 테마와 밝은 테마 지원을 추가하는 단계를 안내합니다. 이 접근 방식을 사용하면 사용자가 테마 간에 전환할 수 있으며 그에 따라 UI가 업데이트됩니다.

전제 조건

  • React나 Next.js에 대한 기본 지식
  • React 또는 Next.js 프로젝트 설정

어둡고 밝은 테마를 구현하는 단계

1.테마 토글 컴포넌트 생성

다음으로 사용자가 테마 간에 전환할 수 있는 구성요소를 만듭니다. 이 구성 요소에는 테마 상태를 전환하는 버튼과 사용자가 원하는 테마를 선택할 수 있는 메뉴가 포함됩니다.

import React, { useState } from 'react';
import { FaMoon, FaSun } from 'react-icons/fa';

function ThemeToggle({ theme, handleThemeChange }) {
  const [menuOpen, setMenuOpen] = useState(false);

  const toggleMenu = () => {
    setMenuOpen(!menuOpen);
  };

  return (
    <li className="m-auto mx-3" role="button">
      <div className="theme-toggle">
        <button className="theme-toggle-btn" onClick={toggleMenu}>
          {theme === 'dark' ? <FaMoon /> : <FaSun />}
        </button>
        {menuOpen && (
          <div className="theme-menu">
            <p className="theme-title">Toggle Dark Mode</p>
            <ul>
              <li
                onClick={() => handleThemeChange('dark')}
                className={theme === 'dark' ? 'active' : ''}
              >
                <FaMoon /> Dark Mode
              </li>
              <li
                onClick={() => handleThemeChange('light')}
                className={theme === 'light' ? 'active' : ''}
              >
                <FaSun /> Light Mode
              </li>
            </ul>
          </div>
        )}
      </div>
    </li>
  );
}

export default ThemeToggle;

2. 테마별 CSS 변수 정의

index.css 또는 App.css 파일에서 어두운 테마와 밝은 테마 모두에 대한 CSS 변수를 정의하세요. 이러한 변수는 활성 테마를 기반으로 전체 애플리케이션의 스타일을 제어합니다.

/* Default Theme Variables */
:root {
  --white-color: #ffff;
  --background-color: black;
  --text-color: #ffff;
  --games-text: #452c88;
  --games-text-2: #60882c;
  --game-bg-card: #252331;
  --card-wrapper-color: #252331;
  --custom-input-bg: #14131b;
  --siderbar-bg: #1a1923;
  --profile-badge-color: #252364;
  --card-header-bg: #032b53;
  --theme-color: #df1b47;
  --table-row-bg-color: #1e1d29;
  --table-row-header-color: #252364;
  --button-bg-color: #252364;
  --dark-light-bg-color: #353940;
}

/* Dark Theme */
body.dark-mode {
  --white-color: #ffff;
  --background-color: black;
  --text-color: #ffff;
  --game-bg-card: #252331;
  --card-wrapper-color: #252331;
  --custom-input-bg: #14131b;
  --siderbar-bg: #1a1923;
  --profile-badge-color: #252364;
  --card-header-bg: #032b53;
  --table-row-bg-color: #1e1d29;
  --table-row-header-color: #252364;
  --button-bg-color: #252364;
  --dark-light-bg-color: #353940;
}

/* Light Theme */
body.light-mode {
  --white-color: #ffff;
  --background-color: rgb(253, 251, 251);
  --text-color: #0f0e0ecc;
  --game-bg-card: #eae8eb;
  --custom-input-bg: #e0e0e0;
  --card-wrapper-color: #e1e0e6;
  --custom-input-bg: #e6e6e6;
  --siderbar-bg: #e5e5e5;
  --profile-badge-color: #e64b4b;
  --card-header-bg: #a6cbf0;
  --table-row-bg-color: #ffffff;
  --table-row-header-color: #f2f4f6;
  --button-bg-color: #df1b47;
  --dark-light-bg-color: #c5c1c1;
}

위 내용은 React/Next.js에 어둡고 밝은 테마 지원 추가의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.