描述
最近在完成一个简易后台管理系统的搭建,因为功能模块比较少,于是写了一个设置页面,想给整个web添加一个改变颜色的功能(只是切换一种或几种颜色,自定义改变颜色的话难度会麻烦一些,可以参考下最下方的链接),于是了解了一下css变量和less变量,打算从这俩方面入手(预编译用的less)
//Css设置变量
:root{--global-color:blue;}
//调用变量
#box1{color:var(--global-color);}
//Less设置变量
@link-color: #428bca;
//调用变量
#box1{color:@link-color}
}
因为css中有十几行设置背景颜色的代码,每一行都要写var(- -xxx ),(为了省下一些字)于是选中了使用less变量。
解决方法
首先创建一个index.css
(需要在main.js中声明import './styles/index.css'
,我的样式文件都存在styles中),然后写好两个不同的类,存放要原先颜色和改变之后的颜色。
//这里是css变量设置
.theme001 {
--originColor: #FFCCCC;
--darkColor: #ff6767a5;
}
.theme002 {
--originColor: #83eeffd0;
--darkColor: #42929f;
}
然后创建一个index.less
(使用less需要先安装几个包和一些声明,在文章末尾)
//导入index.css文件
@import "index.css";
//调用刚刚写好的css变量
@origin-Color:var(--originColor);
@dark-Color: var(--darkColor);
@light-Color: var(--lightColor);
最后切换的代码
//*****blackmode是用于判断的布尔值*****
modechaneg() {
if (this.blackmode) {
document.body.className = "theme001";
}
else {
document.body.className = "theme002"
}
参考文章写的是
document.getElementById('app').className = "theme001"
//或者 document.getElementById('app').className = "theme001"
原因是这样的,我使用了vue+elementUI,vue框架运行的时候都是基于<div id="app"> </div>
,但是elementUI框架的一些弹出框是不在这个div内的,所以改变整个网页颜色的时候需要选中整个<body>
(改elementUI的样式简直不要太折磨,后续再补充记录下)
,具体代码如下图
less安装和使用
首先是安装依赖/包
npm install less less-loader --save-dev
安装完成在package.json中查看
然后在根目录下创建vue.config.js配置文件重新运行就可以使用less了,
这样就不需要在每个.vue中单独引入@import "../styles/index.less";
module.exports = {
css: {
loaderOptions: {
less: {
globalVars: {
hack: `true; @import '~@/styles/index.less';`
}
}
}
}
};
版权声明:本文为weixin_46835329原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。