嘿!因此,如果您像我一樣並且喜歡整個黑暗模式氛圍,您可能會考慮將其添加到您的網站中。只需一點 CSS 和 JavaScript 即可輕鬆設定。我是這樣做的。
首先,您需要一個按鈕或開關,使用者可以單擊該按鈕或開關在淺色和深色模式之間切換。我在這個例子中使用了一個簡單的按鈕(如果需要,您可以使用圖示):
此按鈕將觸發切換模式。
接下來,您需要定義淺色模式和深色模式的外觀。在 CSS 中,您將設定預設樣式(這將是您的淺色模式),然後新增一個覆蓋這些樣式的深色模式類別。
body { background-color: white; color: black; transition: background-color 0.3s, color 0.3s; } .dark-mode { background-color: #121212; color: #ffffff; }
這是發生的事情:
現在是我們讓按鈕實際執行某些操作的部分。每當點擊按鈕時,這段 JavaScript 就會切換主體上的 .dark-mode 類別。
const toggleButton = document.getElementById('dark-mode-toggle'); const body = document.body; toggleButton.addEventListener('click', () => { body.classList.toggle('dark-mode'); // Save the user's preference in local storage if (body.classList.contains('dark-mode')) { localStorage.setItem('theme', 'dark'); } else { localStorage.setItem('theme', 'light'); } });
這是一個細分:
為了確保網站以使用者喜歡的模式加載,您需要在頁面加載時檢查 localStorage 並相應地設定模式。
window.addEventListener('load', () => { const savedTheme = localStorage.getItem('theme'); if (savedTheme === 'dark') { body.classList.add('dark-mode'); } });
如果您使用 React,該過程非常相似,但您將在元件內處理事情。操作方法如下:
使用 React 的 useState 來管理暗模式狀態,並將適當的類別應用到您的根元素:
import React, { useState } from 'react'; function App() { const [darkMode, setDarkMode] = useState(false); const toggleDarkMode = () => { setDarkMode(!darkMode); }; return (); } export default App;
在此範例中:
將 .dark-mode 類別加入您的 CSS 中,就像以前一樣:
body { background-color: white; color: black; transition: background-color 0.3s, color 0.3s; } .dark-mode { background-color: #121212; color: #ffffff; }
如果您希望主題偏好持續存在,您可以添加這個小調整:
import React, { useState, useEffect } from 'react'; function App() { const [darkMode, setDarkMode] = useState(() => { const savedTheme = localStorage.getItem('theme'); return savedTheme === 'dark'; }); useEffect(() => { localStorage.setItem('theme', darkMode ? 'dark' : 'light'); }, [darkMode]); return (); } export default App;
這是發生的事情:
就是這樣!這是一種向 React 應用程式添加暗模式的更簡單方法,不會讓事情變得過於複雜。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3