全网最详细的vue2实现暗黑模式(深色主题与浅色主题切换)入门级即可学会@非常简单
2023-12-25 20:48:41
一、文章引导
二、博主简介
🌏博客首页: 水香木鱼
📑文章摘要:暗黑模式
?深色主题与浅色主题
💌春波寄语:故木秀于林,风必摧之;堆出于岸,流必湍之;行高于人,众必非之。
三、文章内容
本教程用于vue脚手架【适用于
scss
或者less
编译】
(1)、创建全局主题样式与Element
组件库自定义样式修改
创建theme.css
文件
html[data-theme='dark'] {
--theme-color: #9999FF;
--background-color: #232323;
--body-color: #2b2b2b;
--text-color: #909399;
--text-color1: #fff;
--text-color2: #c5bdbd;
--border-line: #414243;
--header-back-color: rgb(15, 15, 15);
--article-color: rgb(153, 153, 153);
--box-title_color: #BDBDBD;
--text-color3: #303030;
--comment-box: #303030;
--im-user-box-backgroudColor: #FF80AB;
--im-box-backgroudColor: #9CCC65;
--im-backgroudColor: #323644;
--hover-color: #414349;
--tips-backgroud-color: #414349;
--article-structure-backcolor: #606266;
--friend-tip-color: #606266;
--article-srect-background: repeating-linear-gradient(145deg, #000, #000 15px, #303133 0, #303133 25px);
--say-background: #303133;
--footer-background-color: #232323e0;
--forum-background-color: #303133;
--article-table-back-color: #000;
--article-table-border-color: #303133;
}
:root {
--theme-color: #f56c6c;
--background-color: #fff;
--body-color: linear-gradient(90deg, rgba(247, 149, 51, .1), rgba(243, 112, 85, .1) 15%, rgba(239, 78, 123, .1) 30%, rgba(161, 102, 171, .1) 44%, rgba(80, 115, 184, .1) 58%, rgba(16, 152, 173, .1) 72%, rgba(7, 179, 155, .1) 86%, rgba(109, 186, 130, .1));
--text-color: #000;
--text-color1: #272222;
--text-color2: #c5bdbd;
--border-line: #e4e7ed;
--header-back-color: hsla(0, 0%, 100%, .65);
--article-color: #303133;
--box-title_color: #333333;
--text-color3: #f2f6fc;
--comment-box: #f5f5f5;
--im-user-box-backgroudColor: #1DE9B6;
--im-box-backgroudColor: #a6c6f7;
--im-backgroudColor: #dcdfe6;
--hover-color: #dcdfe6;
--tips-backgroud-color: #ecf8ff;
--article-structure-backcolor: #ecf5ff;
--friend-tip-color: #f5f5f5;
--article-srect-background: repeating-linear-gradient(145deg, #f2f6fc, #f2f6fc 15px, #fff 0, #fff 25px);
--say-background: #f7f7f7;
--footer-background-color: rgba(255, 255, 255, 0.8);
--forum-background-color: #f2f3f5;
--article-table-border-color: #fffdf9;
--article-table-back-color: #fff3e0;
}
创建index.css
文件(组件库自定义样式修改)
* {
padding: 0;
margin: 0;
font-family: "font";
}
.el-tabs__nav-scroll {
overflow-x: scroll !important;
&::-webkit-scrollbar {
display: none !important;
}
}
@font-face {
font-family: 'font';
src: url('./assets/font/2.woff2');
}
.el-upload--picture-card {
background-color: var(--background-color) !important;
}
.el-dropdown-menu {
background-color: var(--background-color) !important;
color: var(--text-color) !important;
border: 0 !important;
.popper__arrow::after {
border-bottom-color: var(--background-color) !important;
}
.el-dropdown-menu__item {
transition: transform .35s !important;
}
.el-dropdown-menu__item:hover {
background-color: rgb(0, 0, 0, 0) !important;
transform: translateX(6px);
}
}
/* 修改滚动条宽度 */
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
/* 修改滚动条颜色 */
::-webkit-scrollbar-thumb {
background-color: #1890ff;
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .4) 100%, transparent 100%, transparent 50%, rgba(255, 255, 255, .4) 50%, rgba(255, 255, 255, .4) 75%, transparent 75%, transparent);
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
border-radius: 2em;
}
/* 修改滚动条轨道颜色 */
::-webkit-scrollbar-track {
background-color: #f5f5f5;
border-radius: 5px;
}
::selection {
color: #fff;
background-color: var(--theme-color);
}
.el-card__body {
padding: 0 !important;
}
.el-card {
border: 0 !important;
border-radius: 5px;
}
.el-dialog {
background-color: var(--background-color) !important;
color: var(--article-color) !important;
border-radius: 10px;
.el-dialog__title {
color: var(--article-color) !important;
}
}
.el-input__inner {
background-color: var(--background-color) !important;
border-color: var(--border-line) !important;
&:focus {
border-color: var(--theme-color) !important;
}
}
.box-shadow-top {
transition: box-shadow .35s, transform .35s !important;
&:hover {
box-shadow: 1px 1px 5px 5px rgba(49, 211, 162, 0.322) !important;
transform: translateY(-2px) !important;
}
}
.box-shadow {
transition: box-shadow .35s;
&:hover {
box-shadow: 1px 1px 5px 5px rgba(49, 211, 162, 0.322) !important;
}
}
.container {
display: flex;
justify-content: center;
}
.xiahuaxian {
background: linear-gradient(to right, #9459c5, #4cbec2) no-repeat right bottom;
background-size: 0px 2px;
transition: background-size .35s;
&:hover {
background-size: 100% 2px;
background-position: left bottom;
}
}
.tag-item {
display: inline-block;
border-radius: 5px;
padding: 5px;
margin-right: 5px;
margin-bottom: 5px;
color: #fff;
transition: all .3s;
&:hover {
border-radius: 0;
background-color: #000 !important;
}
}
@media screen and (max-width: 1118px) {
.el-dialog {
width: 90% !important;
}
}
.point {
cursor: pointer;
}
(2)、安装vuex缓存工具
npm i vuex-persistedstate@4.1.0 --save
(3)、store中定义全局状态
index.js
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
const state = {
skin: "shallow", //shallow浅色模式 //deep深色模式
};
const mutations = {
setSkin(state, newValue) {
state.skin = newValue;
},
};
export default new Vuex.Store({
state,
mutations,
});
(4)、App.vue中设置状态
<script>
mounted() {
/*主题切换*/
let theme = sessionStorage.getItem("theme");
if (theme == null) {
theme = "light";
}
document.documentElement.dataset.theme = theme;
/*END*/
},
</script>
(5)、页面使用
需要注意:此处主题样式为全局样式,可根据自身需求去定义样式
此处:root{}
内所有样式为默认的浅色模式
background-color:var(--text-color2);
四、程序语录
本篇博客文章模板唯一版权归属?春波petal
文章来源:https://blog.csdn.net/weixin_48337566/article/details/135206664
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!