html使用JavaScript + CSS實(shí)現(xiàn)亮色和暗色切換功能
實(shí)現(xiàn)一個(gè)黑暗模式切換功能是現(xiàn)代網(wǎng)頁(yè)設(shè)計(jì)中常見的需求。下面是一個(gè)完整的示例,展示如何使用 JavaScript + CSS 來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的“黑暗模式”切換按鈕。
? 實(shí)現(xiàn)思路
- 使用
CSS
定義兩種主題樣式(亮色和暗色)。 - 通過 JavaScript 動(dòng)態(tài)切換 HTML 元素的
class
或data-theme
屬性。 - 使用
localStorage
保存用戶選擇的主題偏好。
?? 示例代碼
?? HTML 部分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>黑暗模式切換</title> <link rel="stylesheet" href="styles.css" rel="external nofollow" /> </head> <body> 歡迎來(lái)到我的網(wǎng)站 <p>這是一個(gè)可以切換黑暗模式的頁(yè)面。</p> <button id="toggleThemeBtn">切換到暗色模式</button> <script src="script.js"></script> </body> </html>
?? CSS 部分 (styles.css)
/* 默認(rèn)亮色主題 */ body { background-color: #ffffff; color: #000000; transition: background-color 0.3s, color 0.3s; } /* 暗色主題樣式 */ .dark-mode { background-color: #121212; color: #ffffff; }
?? JavaScript 部分 (script.js)
const toggleButton = document.getElementById("toggleThemeBtn"); // 頁(yè)面加載時(shí)檢查 localStorage 中是否有之前保存的主題 if (localStorage.getItem("theme") === "dark") { document.body.classList.add("dark-mode"); toggleButton.textContent = "切換到亮色模式"; } // 切換主題函數(shù) toggleButton.addEventListener("click", () => { document.body.classList.toggle("dark-mode"); // 修改按鈕文字 if (document.body.classList.contains("dark-mode")) { toggleButton.textContent = "切換到亮色模式"; localStorage.setItem("theme", "dark"); } else { toggleButton.textContent = "切換到暗色模式"; localStorage.setItem("theme", "light"); } });
?? 進(jìn)階優(yōu)化建議
使用
prefers-color-scheme: dark
媒體查詢來(lái)自動(dòng)匹配系統(tǒng)設(shè)置:@media (prefers-color-scheme: dark) { body:not(.dark-mode) { background-color: #121212; color: #ffffff; } }
使用
data-theme="dark"
而不是class
,更語(yǔ)義化地控制主題。可以封裝為可復(fù)用組件或 React/Vue 插件。
添加動(dòng)畫過渡效果提升用戶體驗(yàn)。
完整示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>黑暗模式切換</title> <style> /* 默認(rèn)亮色主題 */ body { background-color: #ffffff; color: #000000; transition: background-color 0.3s, color 0.3s; } /* 暗色主題樣式 */ .dark-mode { background-color: #121212; color: #ffffff; } @media (prefers-color-scheme: dark) { body:not(.dark-mode) { background-color: #121212; color: #ffffff; } } </style> </head> <body> 歡迎來(lái)到我的網(wǎng)站 <p>這是一個(gè)可以切換黑暗模式的頁(yè)面。</p> <button id="toggleThemeBtn">切換到暗色模式</button> <script> const toggleButton = document.getElementById("toggleThemeBtn"); // 頁(yè)面加載時(shí)檢查 localStorage 中是否有之前保存的主題 if (localStorage.getItem("theme") === "dark") { document.body.classList.add("dark-mode"); toggleButton.textContent = "切換到亮色模式"; } // 切換主題函數(shù) toggleButton.addEventListener("click", () => { document.body.classList.toggle("dark-mode"); // 修改按鈕文字 if (document.body.classList.contains("dark-mode")) { toggleButton.textContent = "切換到亮色模式"; localStorage.setItem("theme", "dark"); } else { toggleButton.textContent = "切換到暗色模式"; localStorage.setItem("theme", "light"); } }); </script> </body> </html>
? 總結(jié)
你現(xiàn)在已經(jīng)掌握了一個(gè)基礎(chǔ)但實(shí)用的黑暗模式切換功能實(shí)現(xiàn)方式:
- 用 CSS 定義樣式;
- 用 JS 控制類名切換;
- 用 localStorage 保存用戶偏好;
- 用戶體驗(yàn)友好,兼容性好。
到此這篇關(guān)于html使用JavaScript + CSS實(shí)現(xiàn)亮色和暗色切換功能的文章就介紹到這了,更多相關(guān)JavaScript和CSS實(shí)現(xiàn)html明暗切換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序開發(fā)經(jīng)驗(yàn)總結(jié)(推薦)
本篇文章主要介紹了微信小程序開發(fā)經(jīng)驗(yàn)總結(jié)(推薦),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-01-01JS實(shí)現(xiàn)動(dòng)態(tài)倒計(jì)時(shí)功能(天數(shù)、時(shí)、分、秒)
這篇文章主要介紹了JS實(shí)現(xiàn)動(dòng)態(tài)倒計(jì)時(shí)功能詳解(天數(shù)、時(shí)、分、秒),需要的朋友可以參考下2019-12-12基于javascript實(shí)現(xiàn)圖片左右切換效果
這篇文章主要為大家介紹了基于javascript實(shí)現(xiàn)圖片左右切換效果,感興趣的小伙伴們可以參考一下2016-01-01怎樣用Javascript實(shí)現(xiàn)策略模式
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之策略模式,想學(xué)習(xí)設(shè)計(jì)模式的同學(xué),一定要看一下2021-04-04javascript中定義私有方法說明(private method)
本篇文章主要是對(duì)javascript中定義私有方法(private method)進(jìn)行了介紹,需要的朋友可以過來(lái)參考下,希望對(duì)大家有所幫助2014-01-01微信小程序多表聯(lián)合查詢的實(shí)現(xiàn)詳解
小程序設(shè)計(jì)中,通常會(huì)根據(jù)業(yè)務(wù)來(lái)做多表的拆分,多表拆分一般是根據(jù)業(yè)務(wù)的特點(diǎn)進(jìn)行拆分。比如我們?cè)谖恼玛P(guān)注的業(yè)務(wù)中,會(huì)將文章和關(guān)注信息拆分成一對(duì)多的表關(guān)系。初學(xué)者可能對(duì)一對(duì)一、一對(duì)多、多對(duì)多的設(shè)計(jì)概念不是特別清楚2022-08-08js/jQuery對(duì)象互轉(zhuǎn)(快速操作dom元素)
在操作js或者jquery方面相關(guān)的元素時(shí),可能會(huì)力不從心,因?yàn)樵谑褂梅椒〞r(shí)可能js的會(huì)更好一點(diǎn)又或者jquery的會(huì)更好一點(diǎn),真是無(wú)從選擇啊,接下來(lái)將介紹JS/jQuery對(duì)象互轉(zhuǎn)實(shí)現(xiàn),方便你快速操作dom元素,感興趣的朋友可以了解下啊2013-02-02