定制主题

antd-mobile 设计规范上支持一定程度的样式定制,以满足业务和品牌上多样化的视觉需求,包括但不限于主色、圆角、边框和部分组件的视觉定制。

定制主题 - 图1

样式变量

antd-mobile 的样式使用了 Less 作为开发语言,并定义了一系列全局/组件的样式变量,你可以根据需求进行相应调整。

定制方式

我们使用 modifyVars 的方式来覆盖变量。

1) theme 属性

  • 首先,你的项目里需要包含如下依赖 babel-plugin-import less less-loader style-loader css-loader
  1. npm install --save-dev babel-plugin-import less less-loader style-loader css-loader
  • 配置 babel-plugin-import 确保加载 antd-mobile less 文件
  1. {
  2. ...
  3. "plugins": [
  4. ["import", {"libraryName": "antd-mobile", "style": true}],
  5. ...
  6. ]
  7. }
  1. {
  2. ...
  3. "theme": {
  4. "brand-primary": "red",
  5. "color-text-base": "#333",
  6. ...
  7. },
  8. ...
  9. }
  • 最后,在你的 webpack (版本3.0+) 配置文件里,添加如下配置,之后运行你的 npm start

不同版本的 webpack loader 配置方法有差异,请查看 webpack 官方文档

  1. const theme = require('./package.json').theme;
  2. module.exports = {
  3. ...
  4. module: {
  5. ...
  6. rules: [
  7. ...
  8. {
  9. test: /\.css$/,
  10. use: [
  11. 'style-loader',
  12. 'css-loader',
  13. ],
  14. },
  15. {
  16. test: /\.less$/,
  17. use: [
  18. 'style-loader',
  19. 'css-loader',
  20. {loader: 'less-loader', options: {modifyVars: theme}},
  21. ],
  22. include: /node_modules/,
  23. },
  24. ...
  25. ],
  26. },
  27. ...
  28. }
另外,antd-mobile@1 高清方案在 antd-mobile2.0 中并不是必须的,如果使用 antd-mobile@1.x 高清方案,则需要做下适配处理,操作很简单,在前面主题配置的第三步中,在 theme 字段中修改hd变量为 2px 即可。
  1. {
  2. ...
  3. "theme": {
  4. "hd": "2px",
  5. "brand-primary": "red",
  6. "color-text-base": "#333",
  7. ...
  8. },
  9. ...
  10. }

2) less

用 less 文件进行变量覆盖。 建立一个单独的 less 文件如下,再引入这个文件。
  1. @import "~antd-mobile/dist/antd-mobile.less"; // 引入官方提供的 less 样式入口文件
  2. @import "your-theme-file.less"; // 用于覆盖上面定义的变量
注意:这种方式已经载入了所有组件的样式,不需要也无法和按需加载插件 babel-plugin-importstyle 属性一起使用。