Ant design vue动态主题切换的坑与一般性方法

本文原创,并且以吐槽为主,下面开始:

Ant design vue是很优秀的框架,不过对于一般小白用户(比如我),文档方面不够友好。官方给出了主题自定义色彩的方案,但是太过于简陋,网上很多技术解决方案也点到即止,我在这方面足足浪费了两天时间,下面说一下技术重点,每个点都是自己踩出来的坑,都是泪:

先说下需要的各个模块以及版本号,这个很重要,版本号不对,就会有各种你搜都搜不出解决方案的报错

【以下内容均针对vue cli3/4初始化的项目环境,其他方案请自行解决】

Vue@2.6.11
Ant-design-vue@1.7.4
less@2.7.3
less-loader@4.1.0 //这个应该在7.x及以下版本都可以,不要再高了

antd-theme-generator@1.2.8 //这个是主题切换的主要module

上面的module,特别需要注意的是antd-theme-generator如果是用1.2.8版本,则需要在【node-modules/ant-design-vue/lib/style/themes/default.less】文件中添加下面内容,否则会报LessError: error evaluating function darken: color.toHSL is not a function错误,less无法生成,我在这里卡了很久……

@table-header-sort-active-bg: darken(@table-header-bg, 3%);
@table-header-filter-active-bg: darken(@table-header-sort-active-bg, 5%);
@table-selection-column-width: 60px;

如果不想改module文件,可以把antd-theme-generator降级到1.2.5版本。

截至2021年3月,个人不推荐上vue3和ant design vue2.x版本,主要原因是因为如果你在项目中要应用其他modules的时候,很多支持不够好,可能会跑不起来

下面进入具体步骤,个别地方与网上一大抄的文章不太一样:

1、新建themer.js在【项目根目录】,内容如下:

const path = require("path");
const { generateTheme, getLessVars } = require("antd-theme-generator");
// ant-design-vue/dist/antd.less
const options = {
  antDir: path.join(__dirname, "./node_modules/ant-design-vue"), //对应具体位置
  stylesDir: path.join(__dirname, "./src/assets/theme"), //对应具体位置
  varFile: path.join(__dirname, "./src/assets/theme/var.less"), //对应具体位置
  mainLessFile: path.join(__dirname, "./src/assets/theme/index.less"), //对应具体位置
  themeVariables: [
    "@primary-color",
    "@secondary-color",
    "@text-color",
    "@text-color-secondary",
    "@heading-color",
    "@layout-body-background",
    "@btn-primary-bg",
    "@layout-header-background",
    "@body-background",
  ],
  indexFileName: "index.html",
  outputFilePath: path.join(__dirname, "./public/color.less"),
};
generateTheme(options)
  .then((less) => {
    console.log("Theme generated successfully");
  })
  .catch((error) => {
    console.log("Error", error);
  });

2、在项目目录【src/assets】下新建theme目录以及index.less和var.less两个文件用来生成需要的css,其中index.less为空即可,当然也可以直接把一些less变量写死在里面,然后var.less里放置你想要动态修改的变量,比如:

@import "~ant-design-vue/lib/style/themes/default.less";
@link-color: #00375b;
@primary-color: rgb(138, 164, 182);
@body-background: #222;

3、修改package.json中的生成语句中,添加【node themer】命令,比如我的是:

"scripts": {
    "dev": "node themer & vue-cli-service electron:serve"
},

意思就是在编译的时候,生成color.less到public文件夹内供调用

4、修改你的vue.config.js

module.exports = {
  css: {
    loaderOptions: {
      less: {
        lessOptions: {
          modifyVars: {},
          javascriptEnabled: true,
        },
      },
    },
  },
};

5、在你的Vue文件中,添加以下方法:

btnclick(color) {
    this.color = color;
    this.changeTheme();
},
changeTheme() {
  window.less
    .modifyVars({
      "@primary-color": this.color,
      "@link-color": this.color,
      "@btn-primary-bg": this.color,
      "@body-background": this.color,
    })
    .then(() => {
      console.log("成功");
    })
    .catch((error) => {
      alert("失败");
      console.log(error);
    });
}

6、在【public/index.html】的</body>之前,添加以下代码:

<link rel="stylesheet/less" type="text/css" href="/color.less" />
    <script>
        window.less = {
          async: false,
          env: 'production'
        };
   </script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/less.js/2.7.2/less.min.js"></script>

这样,就把页面的css内容直接动态替换掉了。我的项目中会使用到dark主题,其实就是替换掉其中的核心less变量即可,等做好了单独写文章记录具体的色值和变量。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
### 回答1: Ant Design 是一个优秀的 React 组件库,它提供了丰富的组件和专业的设计规范,可以帮助开发者快速构建优美的用户界面。 Ant Design 的兼容性一般较好,支持最新版本的 Chrome、Firefox、Safari、Edge 和 Internet Explorer 11 等浏览器。 如果你在使用 Ant Design 遇到兼容性问题,可以尝试使用 polyfill 库来解决。polyfill 库可以帮助你在低版本浏览器中模拟新的 JavaScript 功能,从而让你的应用能够在更多浏览器中正常运行。 此外,Ant Design 还提供了一个专门用于解决兼容性问题的组件:`<BackwardCompatible />`。使用这个组件,你可以在旧版浏览器中渲染不同的内容,从而避免出现问题。 总的来说,Ant Design 的兼容性较好,但是如果遇到问题,可以尝试使用 polyfill 库或 `<BackwardCompatible />` 组件来解决。 ### 回答2: Ant Design是一个基于React的UI库,它的目标是提供一套美观、易用且高质量的UI组件,以帮助开发者快速构建现代化的Web应用程序。在兼容性方面,Ant Design具有良好的兼容性,支持多种主流的浏览器和设备。 首先,Ant Design兼容大部分现代浏览器,包括但不限于Chrome、Firefox、Safari和Edge。它遵循Web标准,利用CSS3和HTML5等最新的前端技术来构建组件,因此可以在这些浏览器上正常运行和展示,确保用户在任何环境下都能良好地使用Ant Design提供的功能。 其次,Ant Design还提供了响应式布局的支持,可以适应不同尺寸的屏幕和设备。无论是在桌面、平板还是移动设备上,Ant Design的组件都能自动适配并呈现出最佳的布局效果。这样,开发者可以根据自己的需要选择合适的设备,而不用担心Ant Design会出现兼容性问题。 此外,Ant Design还提供了针对不同平台和设备的主题定制功能。开发者可以根据自己的需求,选择合适的主题和组件风格,以适应不同的用户群体和品牌形象。这种灵活性使得Ant Design可以应用于各种不同类型的项目,而不受兼容性的限制。 总的来说,Ant Design具有很好的兼容性,可以在各种主流浏览器和设备上正常运行。它的响应式布局和主题定制功能进一步增强了其适用性,使得开发者可以自由地选择和定制组件,以满足项目的特定需求。 ### 回答3: Ant Design 是一款由阿里巴巴前端团队推出的开源组件库,被广泛应用于各种前端项目中。它的兼容性问题可以从两个方面来讨论。 首先,Ant Design 在不同浏览器和操作系统上的兼容性表现良好。它经过了严格的测试,确保在主流浏览器如 Chrome、Firefox、Safari 和 Edge 上都能正常运行。无论是在 Windows 还是 macOS、Linux 等操作系统上,Ant Design 的组件都可以正常展示和交互,从而保证了用户在不同环境下的良好体验。 其次,Ant Design 的兼容性还包括对不同前端框架的支持。它可以与 React、Vue、Angular 等主流框架无缝集成,提供了相应的使用指南和示例代码,使得开发人员可以方便地在自己的项目中引入和使用 Ant Design 的组件。而且,Ant Design 还提供了自定义主题的功能,允许开发人员根据自己项目的需求来调整组件的颜色、样式等,从而更好地适配不同的应用场景。 总之,Ant Design 兼容性良好,既能够在不同浏览器和操作系统上正常运行,又能够与主流前端框架进行无缝集成。这使得开发人员可以放心地使用 Ant Design 来构建现代化的前端界面,提高开发效率,同时也提升了用户的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值