Maison > interface Web > tutoriel CSS > Ajout de la prise en charge des thèmes sombres et clairs dans React/Next.js

Ajout de la prise en charge des thèmes sombres et clairs dans React/Next.js

王林
Libérer: 2024-09-03 18:31:10
original
576 Les gens l'ont consulté

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

Ajout de la prise en charge des thèmes sombres et clairs dans React/Next.js

Aperçu

Dans ce guide, nous vous guiderons à travers les étapes pour ajouter la prise en charge des thèmes sombres et clairs à une application React ou Next.js. Cette approche permettra aux utilisateurs de basculer entre les thèmes et l'interface utilisateur sera mise à jour en conséquence.

Conditions préalables

  • Connaissance de base de React ou Next.js.
  • Un projet React ou Next.js mis en place.

Étapes pour implémenter les thèmes sombres et clairs

1.Création d'un composant de bascule de thème

Ensuite, créez un composant qui permet aux utilisateurs de basculer entre les thèmes. Ce composant comprendra un bouton qui bascule l'état du thème et un menu qui permet aux utilisateurs de sélectionner leur thème préféré.

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;
Copier après la connexion

2. Définition de variables CSS spécifiques à un thème

Définissez des variables CSS pour les thèmes sombres et clairs dans votre fichier index.css ou App.css. Ces variables contrôleront le style de l'ensemble de l'application en fonction du thème actif.

/* 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;
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal