成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue3項目中實現主題切換真的很簡單!!!

開發 前端
換膚能夠實現的終極密碼是——CSS變量,可以為每個主題設定一組CSS變量,包含這個主題的所有顏色、字體等信息,當需要切換主題時,只需要更改使用的CSS變量組即可。

一、原理

換膚能夠實現的終極密碼是——CSS變量,可以為每個主題設定一組CSS變量,包含這個主題的所有顏色、字體等信息,當需要切換主題時,只需要更改使用的CSS變量組即可。

  1. 聲明變量。在 :root 偽類中聲明 CSS 變量,這樣就能在全局范圍內使用變量:
:root {
  --main-color: #06c;
}
  1. 使用變量。在你的 CSS 中,使用 var() 函數來使用 CSS 變量:
.header {
  background-color: var(--main-color);
}

二、demo實現

下面我們用Vue3+Element-plus為例,來實現一波高亮模式+暗黑模式兩個主題色,可參考element-plus暗黑模式介紹。

2.1 引入主題色樣式

在src/styles下面新建theme.scss,把默認暗黑主題色引入進來,并可以在其里面覆蓋原有變量或新增一些變量

// theme.scss
/** element內置暗黑主題 */
@use 'element-plus/theme-chalk/src/dark/css-vars.scss' as *;

// 可以進行一些樣式的覆蓋
html {
    --v-bg-color: #cfcccc; // 新增
}

html.dark {
    --v-bg-color: #141414; // 新增
  	--el-color-primary: #409eff; // 覆蓋
}

在main.ts中引入默認主題色和暗黑模式主題色

// main.ts 文件
import { createApp } from 'vue';
import ElementPlus from 'element-plus';
// element默認主題
import 'element-plus/dist/index.css'
import './style.css';
// 公共樣式,包含自定義暗黑模式,element重置樣式
import './styles/index.scss';
import App from './App.vue';

const app = createApp(App);
app.use(ElementPlus);
app.mount('#app')

此時在瀏覽器控制臺就可以看到很多變量

圖片

2.2 主題色切換能力

主題切換能力其核心關注點為:

  1. 利用provide注入當前主題及修改主題的方法,然后在組件中通過inject獲取主題及主題修改方法;
  2. 利用localStorage持久化存儲主題;
  3. 改變html的class屬性,進而決定使用哪一套主題;
<script setup lang="ts">
import {provide, ref, onMounted} from 'vue';
import SwitchDark from './components/SwitchDark.vue';

// 改變屬性,確定使用哪一套樣式
const addThemeAttribute = (theme: string) => {
  const html = document.documentElement;
  html.setAttribute('class', theme);
}

const theme = ref(localStorage.getItem('myTheme') || 'light');

onMounted(() => {
  addThemeAttribute(theme.value);
});

const setTheme = (newTheme: string) => {
  // 改變主題
  theme.value = newTheme;

  addThemeAttribute(newTheme);

  localStorage.setItem('myTheme', newTheme);
};

provide('theme', {
  theme,
  setTheme
});

</script>

<template>
  <SwitchDark />
  <div class="bg">
    我是內容
  </div>
</template>

<style scoped>
.bg {
  background-color: var(--v-bg-color);
  width: 200px;
  height: 200px;
}
</style>

2.3 切換按鈕

切換主題色肯定需要一個按鈕,下面利用el-switch實現了一個簡單的切換按鈕,并利用setTheme來切換對應的主題。

圖片

<template>
    <el-switch
        v-model="isDark"
        inline-prompt	
        @change="changeTheme"
        :active-icnotallow="Sunny"
        :inactive-icnotallow="Moon"
        size="large"
    />
</template>

<script setup lang="ts">
import {inject, Ref, computed} from 'vue';
import {Sunny, Moon} from '@element-plus/icons-vue';

const {theme, setTheme} = inject<{theme: Ref<string>, setTheme: (newTheme: string) => void}>('theme') || {};
const isDark = computed(() => theme?.value === 'dark');

const changeTheme = () => {
    console.log(theme?.value)
    if (theme?.value === 'light') {
        setTheme?.('dark');
    } else {
        setTheme?.('light');
    }
};
</script>

<style scoped>
</style>


責任編輯:武曉燕 來源: 前端點線面
相關推薦

2021-08-31 10:52:30

容量背包物品

2022-02-14 21:31:00

用戶身份驗證

2022-03-04 17:21:29

Redux項目前端

2017-03-16 16:57:56

2025-05-06 09:35:00

2022-03-07 11:15:25

Pinia狀態庫vue3

2009-07-27 13:46:27

網絡參數切換

2025-03-10 08:48:14

Vue生態編程

2021-12-02 05:50:35

Vue3 插件Vue應用

2021-03-31 08:01:50

Vue3 Vue2 Vue3 Telepo

2022-03-10 11:04:04

Vue3Canvas前端

2024-12-09 00:00:03

Vue3項目表單

2022-08-15 07:34:36

vite項目Vue3

2021-05-12 08:57:56

項目搭建工具

2021-12-01 08:11:44

Vue3 插件Vue應用

2024-01-22 13:15:00

2021-11-30 08:19:43

Vue3 插件Vue應用

2023-11-28 09:03:59

Vue.jsJavaScript

2010-05-19 16:45:26

MySQL自動啟動

2021-02-11 13:56:21

JSweb插件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久九九九女人毛片 | 亚洲一区二区电影在线观看 | 粉嫩粉嫩芽的虎白女18在线视频 | 久草网站 | 成人在线中文字幕 | 蜜桃综合在线 | 免费国产成人av | 午夜在线视频一区二区三区 | 色爱综合网 | 久草网址| 九九热精品视频 | 亚洲激精日韩激精欧美精品 | 国产精品不卡 | 日韩国产在线 | 成人高清在线视频 | 久久国产欧美一区二区三区精品 | 久久久免费 | 精品一区二区三区入口 | www亚洲精品| av片在线免费看 | 欧美综合一区二区三区 | 天天综合网7799精品 | 亚洲人成一区二区三区性色 | 麻豆国产精品777777在线 | 亚洲欧美视频 | 中文字幕三区 | www.国产一区| 国产成人精品综合 | 一级片免费视频 | 九九热在线免费视频 | 日韩精品中文字幕一区二区三区 | 国产精品地址 | 精区3d动漫一品二品精区 | 日韩中文在线 | 韩日在线视频 | 欧美精品一区二区免费视频 | 午夜免费福利片 | 中文字幕亚洲精品在线观看 | 男女网站在线观看 | 大香在线伊779 | 国产精品久久久久久久久久久久 |