Ant Design Pro引入自定义主题及在主题文件中配置背景图片

前言

开发环境:Ant Design Pro: 2.0
官方文档:定制主题


Ant Design Pro官方提供了黑色主题阿里云控制台主题,可以参考文档直接使用。


项目需求:

  • 前端主题根据应用场景灵活匹配,在一个主题文件里能修改所有属性。
  • 背景图片可以在主题文件中定制。

分析

2.0版本的Ant Design Pro默认主题路径是:

@import '~antd/lib/style/themes/default.less';

新增主题文件就需要覆盖掉原始主题文件default.less中同名的变量,默认主题里面部分样式如下:

// Background color for `<body>`
@body-background: #ff6120;
// Base background color for most components
@component-background: #fff;

如上所示,可以在新的主题文件里更改body背景色和component背景色。


修改和引入主题文件

推荐使用Ant Design Pro主题生成网站浏览主题效果,确认后点击保存,生成对应的index.js和index.less文件。

由于采用umi配置主题,所以选择index.js文件,更改文件名为myTheme.js,在src目录下创建theme文件夹并放入,src路径如下:

|-- madrid    // 项目名
    |-- app.js
    |-- appConfig.js
    |-- defaultSettings.js
    |-- global.js
    |-- global.less
    |-- manifest.json
    |-- service-worker.js
    |-- assets
    |   |-- loginBgPng.jpg  // 登录页背景图片
    |   |-- logo.svg
    |   |-- test.png
    |-- components  
    |-- e2e
    |-- layouts
    |-- locales
    |-- models
    |-- pages
    |-- services
    |-- theme   // 主题目录
    |   |-- myTheme.js   // 主题名
    |-- utils

主题文件myTheme.js如下(注意上面网站生成的index.js和项目引入的myTheme.js有少许不同):

/**
 * 自定义主题
 */
Object.defineProperty(exports, '__esModule', { value: true });
// All antd theme variables: https://github.com/ant-design/ant-design/blob/master/components/style/themes/default.less
exports.default = {
  '@light': '#fff',
  '@dark': '#000',
  '@heading-color': 'fade(@light, 85)',
  '@text-color': 'fade(@light, 65)',
  '@text-color-secondary': 'fade(@light, 45)',
  '@disabled-color': 'fade(@light, 25)',
  '@primary-5': '#40a9ff',
  '@primary-color': '#1890ff',
  '@outline-color': '@primary-color',
  '@icon-color': 'fade(@light, 65)',
  '@icon-color-hover': 'fade(@light, 85)',
  '@primary-6': '#096dd9',
  '@border-color-base': '@border-color-split',
  '@btn-default-color': '@heading-color',
  '@btn-default-bg': '#444457',
  '@btn-default-border': '#444457',
  '@btn-ghost-color': 'fade(@light, 45)',
  '@btn-ghost-border': 'fade(@light, 45)',
  '@input-color': '@text-color',
  '@input-bg': '#3b3b4d',
  '@input-disabled-bg': '#4c4c61',
  '@input-placeholder-color': '@text-color-secondary',
  '@input-hover-border-color': 'fade(@light, 10)',
  '@checkbox-check-color': '#3b3b4d',
  '@checkbox-color': '@primary-color',
  '@select-border-color': '#3b3b4d',
  '@item-active-bg': '#272733',
  '@border-color-split': '#17171f',
  '@menu-dark-bg': '#001529',
  '@body-background': '#30303d',
  '@component-background': '#23232e',
  // '@body-background': '#44a4ff',
  // '@component-background': '#a7ff24',
  '@layout-body-background': '@body-background',
  '@tooltip-bg': '#191922',
  '@tooltip-arrow-color': '#191922',
  '@popover-bg': '#2d2d3b',
  '@success-color': '#00a854',
  '@info-color': '@primary-color',
  '@warning-color': '#ffbf00',
  '@error-color': '#f04134',
  '@menu-bg': '#30303d',
  '@menu-item-active-bg': 'fade(@light, 5)',
  '@menu-highlight-color': '@light',
  '@card-background': '@component-background',
  '@card-hover-border': '#383847',
  '@card-actions-background': '#30303d',
  '@tail-color': 'fade(@light, 10)',
  '@radio-button-bg': 'transparent',
  '@radio-button-checked-bg': 'transparent',
  '@radio-dot-color': '@primary-color',
  '@table-row-hover-bg': '#383847',
  '@item-hover-bg': '#383847',
  '@alert-text-color': 'fade(@dark, 65%)',
  '@tabs-horizontal-padding': '12px 0',
  // zIndex': 'notification > popover > tooltip
  '@zindex-notification': '1063',
  '@zindex-popover': '1061',
  '@zindex-tooltip': '1060',
  // width
  '@anchor-border-width': '1px',
  // margin
  '@form-item-margin-bottom': '24px',
  '@menu-item-vertical-margin': '0px',
  '@menu-item-boundary-margin': '0px',
  // size
  '@font-size-base': '14px',
  '@font-size-lg': '16px',
  '@screen-xl': '1208px',
  '@screen-lg': '1024px',
  '@screen-md': '768px',
  // 移动
  '@screen-sm': '767.9px',
  // 超小屏
  '@screen-xs': '375px',
  '@alert-message-color': '@popover-bg',
  '@background-color-light': '@popover-bg',
  '@layout-header-background': '@menu-dark-bg',
  // 官网
  '@site-text-color': '@text-color',
  '@site-border-color-split': 'fade(@light, 5)',
  '@site-heading-color': '@heading-color',
  '@site-header-box-shadow': '0 0.3px 0.9px rgba(0, 0, 0, 0.12), 0 1.6px 3.6px rgba(0, 0, 0, 0.12)',
  '@home-text-color': '@text-color',
  // 自定义需要找设计师
  '@gray-8': '@text-color',
  '@background-color-base': '#555',
  '@skeleton-color': 'rgba(0,0,0,0.8)',
  // pro
  '@pro-header-box-shadow': '@site-header-box-shadow',

  // 背景图片,新增
  '@login-bg': `url('../assets/loginBgPng.jpg')`,
  // '@login-bg': `url('')`,  // 没有必须为空,js文件里引入
};

在src/config/config.js中引入新主题

import myTheme from '../src/theme/myTheme';

……

export default {
……
  theme: myTheme,
}

至此新主题增加完成,在myTheme.js中更改@body-background为橘色,启动后效果如下:
在这里插入图片描述

其它相应的变量在新的主题文件myTheme.js中修改覆盖掉原始主题文件default.less中同名变量即可。


在主题文件中配置背景图片

有时候需要在前端项目中匹配不同的背景图片,比如给医药公司开发的项目配置医院的背景图片,给厂矿企业开发的项目配置工业图片,既然已经实现了自定义主题,那么在主题文件中配置更加方便。

首先在src/assets中存放背景图片,格式可以为png或者jpg,图片分辨率根据项目要求自行定义。

    |-- assets
    |   |-- loginBgPng.jpg  // 登录页背景图片
    |   |-- logo.svg
    |   |-- test.png

在myTheme.js中引入背景图片,采用ES6语法,如下新增了@login-bg变量

  // 背景图片,新增
  '@login-bg': `url('../assets/loginBgPng.jpg')`,

在登录页面UserLayout.less中使用这个新增变量

@media (min-width: @screen-md-min) {
  .container {
    background-image: @login-bg;  // 新增背景图片
    background-repeat: no-repeat;
    background-position: center 110px;
    background-size: 100%;
  }

  .content {
    padding: 32px 0 24px 0;
  }
}

最后需要特别注意,在原来的default.less中增加@login-bg变量,否则报错,可以设置为空,所有在新主题文件中增加的变量都必须在原始主题文件中定义

// 背景图片
@login-bg: url('');  // 在自定义主题文件里新增项必须在default.less中定义默认值

至此主题文件中添加背景图片功能完成,效果如下:
在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ant Design Pro 是一个非常流行的企业级 UI 设计语言和 React 组件库,它提供了丰富的组件和模板,可以帮助开发者快速搭建高质量的企业级应用。 在 Ant Design Pro ,菜单是非常重要的一部分,它可以帮助用户快速浏览和访问系统的各个功能模块。Ant Design Pro 的菜单支持多级嵌套,可以根据需要进行自定义。 如果想给 Ant Design Pro 菜单的二级菜单添加自定义的 icon,可以按照以下步骤进行操作: 1. 在项目引入需要使用的 icon。 在 Ant Design Pro ,可以使用 Ant Design 自带的 icon,也可以使用自定义的 icon。如果要使用自定义的 icon,需要在项目引入需要使用的 icon。 2. 在菜单配置指定 icon。 在菜单配置,可以指定菜单的 icon。对于二级菜单,需要在菜单配置的 children 属性指定 icon。例如: ```javascript { path: '/dashboard/analysis', name: '分析页', icon: 'dashboard', component: './Dashboard/Analysis', children: [ { path: '/dashboard/analysis/realtime', name: '实时数据', icon: 'line-chart', component: './Dashboard/Analysis/Realtime', }, { path: '/dashboard/analysis/offline', name: '离线数据', icon: 'bar-chart', component: './Dashboard/Analysis/Offline', }, ], }, ``` 在上述代码,分析页的二级菜单实时数据和离线数据分别指定了 line-chart 和 bar-chart 作为 icon。 3. 在菜单组件使用 icon。 在 Ant Design Pro ,菜单组件使用的是 antd 的 Menu 组件。如果要在菜单显示 icon,需要在 Menu.Item 组件使用 icon 属性。例如: ```javascript <Menu.Item key={menuItem.path}> <Link to={menuItem.path}> {menuItem.icon && <Icon type={menuItem.icon} />} <span>{menuItem.name}</span> </Link> </Menu.Item> ``` 在上述代码,如果 menuItem 包含 icon 属性,就会在菜单项的左侧显示对应的 icon。 通过以上步骤,就可以在 Ant Design Pro 的菜单为二级菜单添加自定义的 icon。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值