vue3快速實(shí)現(xiàn)主題切換功能的步驟詳解
內(nèi)容概要
本文介紹一種基于css變量的主題切換實(shí)現(xiàn)方式,這種是最簡(jiǎn)單,最直接,最容易理解的方式。
實(shí)現(xiàn)的原理就是定義不同的HTML根標(biāo)簽元素的樣式,通過data屬性來區(qū)分不同主題css變量樣式,通過修改根元素的data屬性值來加載不同的css變量,實(shí)現(xiàn)主題切換。
實(shí)現(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;/*頁面級(jí)背景色*/ --bg1: #06142a;/*菜單導(dǎo)航欄級(jí)背景色*/ --bg2: #06142a;/*按鈕控件等小組件背景色*/ --txt-color: #ffffff; --prominent-txt-color :#000000; --prominent-color :#ffffff; }
2.入口main.ts中引入這個(gè)樣式文件
3.主題樣式css變量引用
在頁面各種根據(jù)主題變化的地方,如頁面背景色,導(dǎo)航欄背景色,文字顏色等引用這些css變量
比如:
通過var()來引用css變量
此時(shí)全部的前置工作已經(jīng)完成。
4.設(shè)置默認(rèn)主題樣式
在index.html設(shè)置默認(rèn)樣式。如圖設(shè)置的是深色主題
代碼如下:
<!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>
此時(shí)你的頁面就變成深色主題了。
5.實(shí)現(xiàn)點(diǎn)擊按鈕主題切換
準(zhǔn)備一個(gè)主題切換按鈕
js部分代碼:
//當(dāng)前主題 const theme=ref('dark') //切換主題 const toggleTheme=()=>{ //獲取根元素并設(shè)置屬性 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>
效果:
點(diǎn)擊切換即可。
總結(jié)
這種實(shí)現(xiàn)主題切換的原理就是通過 HTML 的 data 屬性和 CSS 變量來動(dòng)態(tài)改變頁面的樣式,從而實(shí)現(xiàn)不同主題下的樣式切換。當(dāng)用戶切換主題時(shí),只需改變 HTML 標(biāo)簽上的 data 屬性的值,頁面的樣式會(huì)自動(dòng)更新為對(duì)應(yīng)主題下的樣式。
以上就是vue3快速實(shí)現(xiàn)主題切換功能的步驟詳解的詳細(xì)內(nèi)容,更多關(guān)于vue3主題切換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue項(xiàng)目如何引入bootstrap、elementUI、echarts
這篇文章主要介紹了Vue項(xiàng)目如何引入bootstrap、elementUI、echarts,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11如何在vite初始化項(xiàng)目中安裝scss以及scss的使用
今天想要給vite項(xiàng)目,添加全局的scss變量文件引用,這樣我們?cè)谑褂胹css變量和函數(shù)的時(shí)候就不需要每個(gè)組件都取引用了,下面這篇文章主要給大家介紹了關(guān)于如何在vite初始化項(xiàng)目中安裝scss以及scss使用的相關(guān)資料,需要的朋友可以參考下2022-10-10詳解使用vue-router進(jìn)行頁面切換時(shí)滾動(dòng)條位置與滾動(dòng)監(jiān)聽事件
本篇文章主要介紹了詳解使用vue-router進(jìn)行頁面切換時(shí)滾動(dòng)條位置與滾動(dòng)監(jiān)聽事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03vue addRoutes路由動(dòng)態(tài)加載操作
這篇文章主要介紹了vue addRoutes路由動(dòng)態(tài)加載操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08基于vue-router的matched實(shí)現(xiàn)面包屑功能
本文主要介紹了基于vue-router的matched實(shí)現(xiàn)面包屑功能,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09VUE引入騰訊地圖并實(shí)現(xiàn)軌跡動(dòng)畫的詳細(xì)步驟
這篇文章主要介紹了VUE引入騰訊地圖并實(shí)現(xiàn)軌跡動(dòng)畫,引入步驟大概是在 html 中通過引入 script 標(biāo)簽加載API服務(wù),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09手把手教你如何創(chuàng)建一個(gè)VUE項(xiàng)目(超簡(jiǎn)單)
這篇文章主要給大家介紹了關(guān)于如何創(chuàng)建一個(gè)VUE項(xiàng)目的相關(guān)資料,創(chuàng)建vue項(xiàng)目有很多種方式,這里給大家介紹一種非常簡(jiǎn)單的方法,需要的朋友可以參考下2023-08-08Vue+webpack實(shí)現(xiàn)懶加載過程解析
這篇文章主要介紹了Vue+webpack實(shí)現(xiàn)懶加載過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Vue + element 實(shí)現(xiàn)多選框組并保存已選id集合的示例代碼
這篇文章主要介紹了Vue + element 實(shí)現(xiàn)多選框組并保存已選id集合,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06