html使用JavaScript + CSS實(shí)現(xiàn)亮色和暗色切換功能
實(shí)現(xiàn)一個(gè)黑暗模式切換功能是現(xiàn)代網(wǎng)頁(yè)設(shè)計(jì)中常見的需求。下面是一個(gè)完整的示例,展示如何使用 JavaScript + CSS 來實(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> 歡迎來到我的網(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媒體查詢來自動(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>
歡迎來到我的網(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)文章
javascript 實(shí)現(xiàn)動(dòng)態(tài)側(cè)邊欄實(shí)例詳解
這篇文章主要介紹了javascript 實(shí)現(xiàn)動(dòng)態(tài)側(cè)邊欄實(shí)例詳解的相關(guān)資料,并附實(shí)例代碼,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下2016-11-11
基于uni-app開發(fā)刻度尺組件的實(shí)現(xiàn)示例
本文主要介紹了基于uni-app開發(fā)刻度尺組件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
window.event.keyCode兼容IE和Firefox實(shí)現(xiàn)js代碼
window.event.keyCode兼容IE和Firefox具體實(shí)現(xiàn)代碼如下,感興趣的朋友可以參考下哈2013-05-05
ie8下修改input的type屬性報(bào)錯(cuò)的解決方法
當(dāng)用戶勾選顯示明文復(fù)選框時(shí),要以明文顯示用戶輸入的密碼,去掉勾選時(shí)要變回密文,問題是ie8中是不允許修改input的type屬性2014-09-09
JavaScript數(shù)據(jù)結(jié)構(gòu)與算法
這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)與算法,文章圍繞主題展開數(shù)據(jù)結(jié)構(gòu)與算法的概念,以及幾種常見的數(shù)據(jù)結(jié)構(gòu)是什么,有什么優(yōu)點(diǎn)和缺,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07
微信小程序調(diào)用wx.getImageInfo遇到的坑解決
這篇文章主要介紹了微信小程序調(diào)用wx.getImageInfo遇到的坑解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05

