vue下less全局变量换肤问题
需求:页面上一个按钮点击后能够切换皮肤;
操作:less定义了全局变量值,引用方式如下:
修改:build - utils.js
less: generateLoaders('less').concat({loader: 'sass-resources-loader',
options: {
resources: path.resolve(__dirname, '../src/assets/css/style/default.less')
}
}),
变量的确是全局的了,但是如何才能切换。
我有两套全局变量,如图:
需要通过按钮切换这两套
default.less:
@primary-color: rgba(255,255,255,0.85); // 全局主色@link-color: #1890ff; // 链接色
@success-color: #52c41a; // 成功色
@warning-color: #faad14; // 警告色
@error-color: #f5222d; // 错误色
@font-size-base: 14px; // 主字号
@heading-color: rgba(0, 0, 0, 0.85); // 标题色
@text-color: rgba(0, 0, 0, 0.65); // 主文本色
@text-color-secondary: rgba(0, 0, 0, 0.45); // 次文本色
@disabled-color: rgba(0, 0, 0, 0.25); // 失效色
@border-radius-base: 4px; // 组件/浮层圆角
@border-color-base: rgba(255,255,255,0.2); // 边框色
@box-shadow-base: 0 2px 8px rgba(0, 0, 0, 0.15); // 浮层阴影
///自主设定
@font_color: rgba(255,255,255,0.85); // 字体颜色
@font_size: 14px; // 字体颜色
@border_radius: 2px;
在线等,提供有效思路或解决办法,跪谢。
回答
在顶级的元素增加指定皮肤样式的 class
譬如<div :class="app ${customColor}
">
然后按钮切换顶级的className
less是precss处理器,它不是运行时的,浏览器不认识,0202年了,换肤用css变量吧
default.less#default {
@primary-color: rgba(255,255,255,0.85);
@font-size: 14px;
.theme(
@primary-color,
@font-size)
}
red.less#red {
@primary-color: rgba(255,255,255,0.85);
@font-size: 16px;
.theme(
@primary-color,
@font-size)
}
theme.lessimport 'default.less';
import 'red.less';
.theme(@primary-color, @font-size) {
.fuzujian-example-class {
color: @primary-color;
font-size: @font-size;
.zizujian-example-class {
color: @primary-color;
font-size: @font-size;
}
}
}
项目中main.js引入theme.less,在app.vue的根位置加一个id,id为default或者red,换肤就是改变id为default或者为red.
以上面例子为例,id为default是字体是14,为red时就是16px
总的来说,你有两套方案可选:
第一套:使用less的node插件编译出多分固定的css文件出来,然后通过动态link标签实现换肤,这个功能适合主题颜色数量固定的需求场景下。
第二套:使用less的浏览器端编译功能,具体可查看这个文档:http://lesscss.cn/#using-less...
以上是 vue下less全局变量换肤问题 的全部内容, 来源链接: utcz.com/a/43809.html