iT邦幫忙

2025 iThome 鐵人賽

DAY 26
0
佛心分享-IT 人自學之術

30 天體驗:從程式菜鳥到前端新手工程師系列 第 26

打造亮 / 暗色主題切換!讓網站更有設計感 (Day 26)

  • 分享至 

  • xImage
  •  

我們已經成功讓待辦清單可以「新增、刪除、標記完成」任務,甚至能記住資料。
今天,我們要幫它換上漂亮的外衣——
學會做出 亮色 / 暗色主題切換(Light / Dark Mode)
讓網頁從練習作品 → 變成真的能上線使用的「小工具網站」!

什麼是主題切換(Theme Toggle)?

簡單來說,就是讓使用者可以自由選擇:

☀️ 亮色模式(Light Mode) → 清爽乾淨
🌙 暗色模式(Dark Mode) → 柔和護眼

這種功能不只好看,也非常實用。
像是 YouTube、Instagram、GitHub 都有這種模式切換設計!

我們要做什麼?

1️⃣ 建立亮色 & 暗色主題樣式
2️⃣ 用 JavaScript 控制切換效果
3️⃣ 用 LocalStorage 記住使用者選擇

第一步:設計基本主題樣式

我們會用 CSS 的變數(Variable)來設定顏色,
之後只要切換 class,就能一次改整個主題。

:root {
  --bg-color: #ffffff;
  --text-color: #222222;
  --card-color: #f2f2f2;
}

body.dark {
  --bg-color: #1e1e1e;
  --text-color: #000000;
  --card-color: #2a2a2a;
}

body {
  background-color: var(--bg-color);
  color: var(--text-color);
  font-family: "Poppins", sans-serif;
  transition: all 0.3s ease;
}

li {
  background-color: var(--card-color);
  padding: 8px 12px;
  margin: 6px 0;
  border-radius: 8px;
}

💡 小提醒:
body.dark 的意思是——當 body 有 .dark 這個 class 時,
會套用暗色主題的顏色設定。

第二步:加一個「主題切換」按鈕

在 HTML 加上按鈕(放在清單上方或下方都可以):

<button id="themeToggle">切換主題</button>

https://ithelp.ithome.com.tw/upload/images/20251011/20178705DK7QHaGZWT.png

第三步:用 JavaScript 控制切換效果

打開 script.js,加上以下程式碼:

const toggleBtn = document.getElementById('themeToggle')

// 讀取之前儲存的主題
if (localStorage.getItem('theme') === 'dark') {
  document.body.classList.add('dark')
}

// 點擊按鈕切換主題
toggleBtn.addEventListener('click', () => {
  document.body.classList.toggle('dark')
  const theme = document.body.classList.contains('dark') ? 'dark' : 'light'
  localStorage.setItem('theme', theme)
})

這段程式做了三件事:
1.檢查之前使用者是否設定暗色模式
2.如果有,就自動加上 .dark class
3.點擊按鈕時切換主題,並把結果記錄在 LocalStorage 裡

https://ithelp.ithome.com.tw/upload/images/20251011/20178705WMX9HH1YvD.png

最終效果

現在,你的待辦清單可以:

✅ 切換亮 / 暗色主題
✅ 記住上次使用的模式
✅ 畫面過渡滑順又有質感

💡 進階挑戰(選修任務)

想讓作品更酷嗎?可以試試

自動偵測系統主題

const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
if (prefersDark) document.body.classList.add('dark')

• 把按鈕換成太陽 / 月亮圖示(可用 emoji 或 icon)
• 加上 CSS 動畫:切換時顏色漸變或按鈕旋轉

🧭 今日小結

今天你學會了:
• 使用 CSS 變數做出兩種主題樣式
• 用 JS 切換主題與儲存設定
• 美化網站的整體風格

我們加了很多新功能,也做了很多視覺上的美化
恭喜你!你的「待辦清單」網站已經不只是練習作品
而是一個能真正拿來用的小型工具網站了!
謝謝你今天的觀看,我是Ting
讓我們明天也一起繼續學習打造酷酷網站吧!


上一篇
清單再進化 — 加入分類切換 + 一鍵清空功能 (Day25)
下一篇
前端超好用工具! - 用 Tailwind CSS 打造飛速開發的前端風格 (Day27)
系列文
30 天體驗:從程式菜鳥到前端新手工程師30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言