vue3快速實現(xiàn)主題切換功能的步驟詳解
內容概要
本文介紹一種基于css變量的主題切換實現(xiàn)方式,這種是最簡單,最直接,最容易理解的方式。
實現(xiàn)的原理就是定義不同的HTML根標簽元素的樣式,通過data屬性來區(qū)分不同主題css變量樣式,通過修改根元素的data屬性值來加載不同的css變量,實現(xiàn)主題切換。
實現(xiàn)步驟
1.定義不同主題的css樣式變量
一般把該css文件放在styles目錄下的theme.css里面
代碼如下:
/* 淺色色主題 */ html[data-theme="light"]{ --page-bg: #ecf4fd; --bg1: #ffffff; --bg2: #ffffff; --txt-color: #000000; --prominent-txt-color :#ffffff; --prominent-color :#000000; } /* 暗色主題 */ html[data-theme="dark"]{ --page-bg: #06142a;/*頁面級背景色*/ --bg1: #06142a;/*菜單導航欄級背景色*/ --bg2: #06142a;/*按鈕控件等小組件背景色*/ --txt-color: #ffffff; --prominent-txt-color :#000000; --prominent-color :#ffffff; }
2.入口main.ts中引入這個樣式文件
3.主題樣式css變量引用
在頁面各種根據(jù)主題變化的地方,如頁面背景色,導航欄背景色,文字顏色等引用這些css變量
比如:
通過var()來引用css變量
此時全部的前置工作已經(jīng)完成。
4.設置默認主題樣式
在index.html設置默認樣式。如圖設置的是深色主題
代碼如下:
<!DOCTYPE html> <html lang="en" data-theme="dark"> <head> <meta charset="UTF-8"> <link rel="icon" href="/favicon.ico" rel="external nofollow" > <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>我的工具箱</title> </head> <body> <div id="app"></div> <script type="module" src="/src/main.ts"></script> </body> </html>
此時你的頁面就變成深色主題了。
5.實現(xiàn)點擊按鈕主題切換
準備一個主題切換按鈕
js部分代碼:
//當前主題 const theme=ref('dark') //切換主題 const toggleTheme=()=>{ //獲取根元素并設置屬性 document.documentElement.setAttribute('data-theme',theme.value=='dark'?'light':'dark') theme.value=theme.value=='dark'?'light':'dark' }
html部分:
<div class="theme" @click="toggleTheme()"> <div class="theme-img"> <a href="#" rel="external nofollow" > <div v-if="theme==='light'"> <img src="../../assets/月亮 .png" alt=""> </div> <div v-if="theme==='dark'"> <img src="../../assets/太陽.png" alt=""> </div> </a> </div> </div>
效果:
點擊切換即可。
總結
這種實現(xiàn)主題切換的原理就是通過 HTML 的 data 屬性和 CSS 變量來動態(tài)改變頁面的樣式,從而實現(xiàn)不同主題下的樣式切換。當用戶切換主題時,只需改變 HTML 標簽上的 data 屬性的值,頁面的樣式會自動更新為對應主題下的樣式。
以上就是vue3快速實現(xiàn)主題切換功能的步驟詳解的詳細內容,更多關于vue3主題切換的資料請關注腳本之家其它相關文章!
相關文章
Vue項目如何引入bootstrap、elementUI、echarts
這篇文章主要介紹了Vue項目如何引入bootstrap、elementUI、echarts,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11詳解使用vue-router進行頁面切換時滾動條位置與滾動監(jiān)聽事件
本篇文章主要介紹了詳解使用vue-router進行頁面切換時滾動條位置與滾動監(jiān)聽事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03基于vue-router的matched實現(xiàn)面包屑功能
本文主要介紹了基于vue-router的matched實現(xiàn)面包屑功能,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09Vue + element 實現(xiàn)多選框組并保存已選id集合的示例代碼
這篇文章主要介紹了Vue + element 實現(xiàn)多選框組并保存已選id集合,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06