• 样式变量
  • 变量覆盖

    主题定制

    Mand Mobile默认提供了一套基于滴滴的金融业务设计规范的UI主题,同时还支持主题定制。用户可以对颜色、字体、元素尺寸等样式进行自由调整,从而满足在不同业务场景下的视觉需求。

    注意:新项目可通过mand-mobile-template初始化,问题Need customize theme?回复Y,即可集成主题定制的相关配置。现有项目集成请参考以下教程。

    主题定制 - 图1

    样式变量

    Mand Mobile样式基于Stylus开发,可通过全局和组件的样式变量对主题样式进行调整

    完整的变量列表可以查看内置样式变量全局样式变量、组件样式变量

    变量覆盖

    可以通过引入组件源码(components目录下),并覆盖样式变量的方式来实现主题定制

    • 首先,项目需要安装依赖,babel-plugin-import stylus stylus-loader css-loader,完整rules可参考配置
    1. npm install --save-dev babel-plugin-import stylus stylus-loader css-loader
    • 配置babel-plugin-import, 确保引入组件源码
    1. // .babelrc or babel-loader/ts-loader option
    2. {
    3. "plugins": [
    4. ["import", {"libraryName": "mand-mobile", "libraryDirectory": "components"}],
    5. ]
    6. }
    • 创建自定义主题文件,如theme.custom.styl
    1. @import '~mand-mobile/components/_style/global'
    2. @import '~mand-mobile/components/_style/mixin/util'
    3. @import '~mand-mobile/components/_style/mixin/theme.components'
    4. @import '~mand-mobile/components/_style/mixin/theme.basic'
    5. // 安装并引入css拓展nib(可选)
    6. @import '~nib/lib/nib/vendor'
    7. @import '~nib/lib/nib/gradients'
    8. // 覆盖样式变量
    9. color-primary = #1AAD19
    • 配置webpack,引入主题文件
    1. const poststylus = require('poststylus')
    2. const pxtorem = require('postcss-pxtorem')
    3. module.exports = {
    4. // ...
    5. module: {
    6. rules: [
    7. // ...
    8. {
    9. test: /\.js$/,
    10. loader: 'babel-loader',
    11. include: /node_modules\/mand-mobile/
    12. },
    13. {
    14. test: /\.styl$/,
    15. use: [
    16. 'css-loader',
    17. {
    18. loader: 'stylus-loader',
    19. options: {
    20. import:['theme.custom.styl']
    21. }
    22. }
    23. ]
    24. },
    25. {
    26. test: /\.(png|jpe?g|gif)(\?.*)?$/,
    27. loader: 'url-loader',
    28. include: /node_modules\/mand-mobile/
    29. },
    30. // ...
    31. ]
    32. },
    33. plugins: [
    34. // ...
    35. new webpack.LoaderOptionsPlugin({
    36. options: {
    37. stylus: {
    38. // pxtorem (配置可根据项目需要而定)
    39. use: [poststylus(pxtorem({ rootValue: 100, minPixelValue: 2, propWhiteList: [] }))]
    40. }
    41. }
    42. }),
    43. // ...
    44. ]
    45. }