html主題切換小demo

主題切換功能為網頁和應用程序提供了多樣化的視覺風格與使用體驗。實現多主題切換的技術方案豐富多樣,其中 CSS 變量和 JavaScript 樣式控制是較為常見的實現方式。

以下是一個簡潔的多主題切換示例,愿它能為您的編程之旅增添一份趣味。

代碼展示

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>多主題切換 Demo</title><style>:root {--bg-color: #ffffff;--text-color: #000000;}body {background-color: var(--bg-color);color: var(--text-color);font-family: sans-serif; /* 字體 */text-align: center; /* 居中對齊 */transition: background-color 0.3s, color 0.3s; /* 過渡效果 */padding-top: 100px; /* 頂部內邊距 */}.dark-theme { /* 暗黑主題 */--bg-color: #121212;  /* 背景色 */--text-color: #eeeeee; /* 文字色 */}.blue-theme { /* 藍色主題 */--bg-color: #e3f2fd;--text-color: #1565c0;}.green-theme { /* 綠色主題 */--bg-color: #e8f5e9;--text-color: #2e7d32;}.red-theme { --bg-color: #ffebee; --text-color: #c62828; }.purple-theme { --bg-color: #f3e5f5; --text-color: #6a1b9a; }.orange-theme { --bg-color: #fff3e0; --text-color: #ef6c00; }.gray-theme { --bg-color: #f5f5f5; --text-color: #424242; }select, button {padding: 10px 20px;font-size: 16px;margin-top: 20px;cursor: pointer;}</style>
</head>
<body><h1>選擇主題</h1><p>這是個主題是 <span id="currentTheme">默認</span></p><select id="themeSelector" onchange="changeTheme()"><option value="">默認</option><option value="dark-theme">暗黑</option><option value="blue-theme">藍色</option><option value="green-theme">綠色</option><option value="red-theme">紅色</option><option value="purple-theme">紫色</option><option value="orange-theme">橙色</option><option value="gray-theme">灰色</option></select><script>function changeTheme() {const theme = document.getElementById('themeSelector').value;document.body.className = theme;const themeName = theme ? theme.split('-')[0] : '默認';document.getElementById('currentTheme').textContent = themeName;}</script>
</body>
</html>

效果展示

實現原理解析

該 demo 的核心思想是通過 CSS標簽引入不同的樣式,并使用 JavaScript 修改其 href 屬性,從而實現動態更換主題的功能。這種方式簡單直觀,適用于中小型項目或學習用途。

擴展建議

如果你希望進一步優化這個功能,可以考慮以下幾點:

  • 使用 localStorage 記住用戶選擇的主題;

  • 使用 CSS 變量搭配類名控制,減少重復代碼;

  • 使用框架(如 Vue/React)時結合組件化設計進行封裝;

  • 添加動畫過渡效果,提升用戶體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81125.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81125.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81125.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據結構】

一、架構梳理 線性&#xff08;1:1) 線性表 順序存儲 –> arr 鏈式存儲 –> 指針 &#xff08;有頭&#xff0c;無頭&#xff09; 有頭是指有一個不存數據的頭&#xff0c;始終作為這個鏈表的起點。 會更加簡單&#xff0c;無頭的話&#xff0c;更改首部節點會麻煩。 頭…

UML學習指南:從零入門到實戰應用

為零基礎學習者設計的UML技術文檔&#xff0c;旨在通過詳細解釋和實際案例&#xff0c;從零開始掌握UML。 UML學習指南&#xff1a;從零入門到實戰應用 目錄 引言&#xff1a;UML是什么&#xff1f;為什么學習UML&#xff1f; 1.1 什么是UML&#xff1f;1.2 為什么我們需要UM…

Matlab實戰訓練項目推薦

以下是一系列適合不同技能水平的 MATLAB 實戰訓練項目&#xff0c;涵蓋基礎編程、數據分析、信號處理、圖像處理、控制系統、機器學習等領域。這些項目可幫助你鞏固理論知識并提升實際應用能力。 一、基礎項目&#xff08;適合初學者&#xff09; 矩陣運算與可視化 目標&#x…

從零開始:Python語言進階之異常處理

一、認識異常&#xff1a;程序運行中的“意外事件” 在編寫Python程序時&#xff0c;即使代碼語法完全正確&#xff0c;運行過程中也可能遭遇各種意外情況。這些意外被稱為異常&#xff0c;它們會打斷程序的正常執行流程。例如&#xff0c;當我們嘗試打開一個不存在的文件、用0…

Groovy:Java 的簡潔版

Groovy 是一種 動態、面向對象的編程語言&#xff0c;運行在 Java 虛擬機&#xff08;JVM&#xff09;上&#xff0c;并與 Java 高度兼容。你可以把它理解為“Java 的簡潔版 動態特性 腳本語言的靈活性”。 &#x1f9e0; Groovy 的核心特點 特性說明? 與 Java 高度兼容可以…

生成模型——PixelRNN與PixelCNN

一、PixelRNN PixelRNN 是一種基于循環神經網絡&#xff08;RNN&#xff09;的像素級生成模型&#xff0c;通過逐個像素地生成圖像來構建完整的圖像&#xff0c;其核心思想是將圖像中的像素視為序列&#xff0c;并利用 RNN 的能力來捕捉像素之間的依賴關系。 序列生成&#xf…

每日算法刷題Day14 5.24:leetcode不定長滑動窗口求子數組個數越長越合法4道題,用時1h20min

3. 3325.字符至少出現K次的子字符串I(中等&#xff0c;學習優化) 3325. 字符至少出現 K 次的子字符串 I - 力扣&#xff08;LeetCode&#xff09; 思想 1.給你一個字符串 s 和一個整數 k&#xff0c;在 s 的所有子字符串中&#xff0c;請你統計并返回 至少有一個 字符 至少…

怎么判斷一個Android APP使用了Capacitor這個跨端框架

要判斷一個 Android 應用是否使用了 Capacitor 跨端框架&#xff0c;可以通過以下方法逐步驗證&#xff1a; 一、安裝包結構分析 1. 解壓 APK 將 .apk 文件重命名為 .zip 并解壓&#xff0c;檢查以下特征文件&#xff1a; ? assets/public/ 目錄&#xff1a; Capacitor 的核心…

Vue3性能優化: 大規模列表渲染解決方案

# Vue3性能優化: 大規模列表渲染解決方案 一、背景與挑戰 背景 在大規模應用中&#xff0c;Vue3的列表渲染性能一直是開發者關注的焦點。大規模列表渲染往往會導致卡頓、內存占用過高等問題&#xff0c;影響用戶體驗和系統整體性能。 挑戰 渲染大規模列表時&#xff0c;DOM操作…

數據倉庫,掃描量

有五種通用技術用于限制數據的掃描量&#xff0c;正如圖3 - 4所示。第一種技術是掃描那些被打上時戳的數據。當一個應用對記錄的最近一次變化或更改打上時戳時&#xff0c;數據倉庫掃描就能夠很有效地進行&#xff0c;因為日期不相符的數據就接觸不到了。然而&#xff0c;目前的…

反射在spring boot自動配置的應用

目錄 一&#xff0c;背景 二&#xff0c;知識回顧 2.1 理解使用反射技術&#xff0c;讀取配置文件創建目標對象&#xff08;成員變量&#xff0c;方法&#xff0c;構造方法等&#xff09; 三&#xff0c;springboot自動配置 3.1 反射在自動配置中的工作流程 3.2 瀏覽源碼…

機器學習 Day1

機器學習概述 機器學習與人工智能、深度學習關系什么是機器學習數據集算法 機器學習與人工智能、深度學習關系 什么是機器學習 機器學習是從數據中自動分析獲取模型&#xff0c;并利用模型對未知數據進行預測。 直觀理解: 所以是從歷史數據中獲取規律&#xff0c;那么這些歷…

Disruptor—2.并發編程相關簡介

大綱 1.并發類容器 2.volatile關鍵字與內存分析 3.Atomic系列類與UnSafe類 4.JUC常用工具類 5.AQS各種鎖與架構核心 6.線程池的最佳使用指南 1.并發類容器 (1)ConcurrentMap (2)CopyOnWrite容器 (3)ArrayBlockingQueue (4)LinkedBlockingQueue (5)SynchronousQueue …

開盤啦 APP 抓包 逆向分析

聲明: 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 抓包 這是一個記錄貼。 這個APP是數…

YOLOv8損失函數代碼詳解(示例展示數據變換過程)

本文將展示YOLOv8中損失函數計算的完整代碼解析&#xff0c;注釋中提供了詳盡的解釋&#xff0c;并結合示例演示了數據維度的轉換&#xff0c;以幫助更好地理解。 YOLOv8的損失函數計算代碼位于ultralytics/utils/loss.py文件中&#xff08;如下所示&#xff09;&#xff0c;我…

微信小程序調用藍牙API “wx.writeBLECharacteristicValue()“ 報 errCode: 10008 的解決方案

1、問題現象 問題:在開發微信小程序藍牙通信功能時,常常會遇到莫名其妙的錯誤,查閱官方文檔可能也無法找到答案。如在寫入藍牙數據時,報了這樣的錯誤: {errno: 1500104, errCode: 10008, errMsg: "writeBLECharacteristicValue:fail:system error, status: UNKNOW…

軟考 UML中的 用例圖 的泛化 包含 擴展 關系

用例圖的泛化、擴展和包含 - ^_^肥仔John - 博客園

MyBatis-Plus的自帶分頁方法生成的SQL失敗:The error occurred while setting parameters

1、error描述 數據庫是postgres&#xff0c;Java使用mybatis-plus的分頁功能&#xff0c;生成的分頁SQL不能正常運行。 "msg": "nested exception is org.apache.ibatis.exceptions.PersistenceException: Error querying database. Cause: com.baomidou.my…

Redis從入門到實戰 - 原理篇

一、數據結構 1. 動態字符串SDS 我們都知道Redis中保存的key是字符串&#xff0c;value往往是字符串或者字符串的集合。可見字符串是Redis中最常用的一種數據結構。 不過Redis沒有直接使用C語言中的字符串&#xff0c;因為C語言字符串存在很多問題&#xff1a; 獲取字符串長…

人形機器人通過觀看視頻學習人類動作的技術可行性與前景展望

摘要 本文深入探討人形機器人通過觀看視頻學習人類動作這一技術路線的正確性與深遠潛力。首先闡述該技術路線在模仿人類學習過程方面的優勢&#xff0c;包括對人類動作、表情、發音及情感模仿的可行性與實現路徑。接著從技術原理、大數據訓練基礎、與人類學習速度對比等角度論證…