'admin-20.12.22:新增自定义全局主题文档编写'

This commit is contained in:
lyt-Top 2020-12-22 23:18:02 +08:00
parent 98cbce557f
commit 747e92f8e5
4 changed files with 191 additions and 4 deletions

View File

@ -265,4 +265,8 @@ createApp(App).use(ElementPlus).mount('#app')
```
#### 4、动态换肤功能
使用 `ColorPicker 颜色选择器`[https://element-plus.gitee.io/#/zh-CN/component/color-picker](https://element-plus.gitee.io/#/zh-CN/component/color-picker),实现动态换肤功能
使用 `ColorPicker 颜色选择器`[https://element-plus.gitee.io/#/zh-CN/component/color-picker](https://element-plus.gitee.io/#/zh-CN/component/color-picker),实现动态换肤功能
::: tip 提示
请移步顶部导航 `主题` 中查看详细内容
:::

View File

@ -0,0 +1,176 @@
---
sidebar: auto
---
# 主题设置
## 目录结构
#### `src/theme` 下,后期继续补充,样式都会写在这个文件夹下:
```ts
├── theme
├── common
│ ├── transition.scss (页面过渡动画)
│ └── var.scss (全局主题样式,用于全局改变样式)
├── mixins
│ ├── element-mixins.scss (定义重置的element plus混入复用样式)
│ ├── function.scs (全局主题颜色调用混入函数)
│ └── mixins.scss (定义一些常用的全局混入样式)
├── app.scss (页面主样式,用于重置浏览器默认样式)
├── base.scss (基础样式、过渡动画等)
├── element.scss (重置的element plus样式用于改变主题)
├── index.scss (页面样式出口)
└── media.scss (手机适配样式)
```
## scss 部分函数说明
#### 1、scss @mixin
[scss官方中文文档](https://www.sass.hk/docs/),具体请查阅官方文档。使用方法:
- 1.1 定义
```scss
/* Button 按钮
------------------------------- */
@mixin Button($main, $c1, $c2) {
color: set-color($main);
background: set-color($c1);
border-color: set-color($c2);
}
```
- 1.2 页面中使用,先引入,然后在 `css` 类中通过 `@include` 使用
```scss
@import 'mixins/element-mixins.scss';
// default
.el-button--default:hover,
.el-button--default:focus {
@include Button(primary, primary-light-8, primary-light-6);
}
```
#### 2、scss @function
- 2.1 定义函数
```scss
/* 颜色调用函数
------------------------------- */
@function set-color($key) {
@return var(--color-#{$key});
}
```
- 2.2 不理解?请看这个 `css3 :root` [CSS var() 函数](https://www.runoob.com/cssref/func-var.html)
```scss
/* 定义一个名为 "--main-bg-color" 的属性,然后使用 var() 函数调用该属性: */
:root {
--main-bg-color: red;
}
#div1 {
background-color: var(--main-bg-color);
}
#div2 {
background-color: var(--main-bg-color);
}
```
#### 3、为什么不使用这种写法放进 :root 中?
```scss
$colors: (
primary: #409eff,
success: #67c23a,
info: #909399,
warning: #e6a23c,
danger: #f56c6c
)
:root {
@each $key, $value in $colors {
--color-#{$key}: #{$value};
}
}
```
- 因为 scss 不支持这种嵌套 `mix(var(--color-primary), var(--color-success), 10%)`lighten / darken / saturate / desaturate 等,从而无法用
- 从而无法用 `document.documentElement.style.setProperty('--color-primary', 'blue');` 改变样式
## 具体实现自定义全局主题
实现方法,以下方法不晓得会不会影响页面渲染性能:
- 1、定义全局 :root 初始变量,路径:`src/theme/common/var.scss`
- 2、编写覆盖 element plus 的样式:路径:`src/theme/element.scss`
- 3、页面通过 `document.documentElement.style.setProperty` 方法改变 `:root` 中的值
::: tip 提示
第一第二步就不介绍了,直接去路径去看就懂了。接下来我们讲讲第三步:
:::
#### 1、通过 `document.documentElement.style.setProperty` 改变颜色值 [setProperty 文档](https://developer.mozilla.org/zh-CN/docs/Web/API/CSSStyleDeclaration/setProperty)
```ts
// setup 中
import { reactive, toRefs } from "vue"
export defalut {
setup() {
const state = reactive({
color: ''
})
function colorChange() {
// 设置颜色
document.documentElement.style.setProperty(
"--color-primary",
state.color
)
// 设置颜色变浅
document.documentElement.style.setProperty(
"--color-primary-light-1",
getLightColor(state.color1, 0.1)
)
}
return {
colorChange,
...toRefs(state)
}
}
}
```
#### 2、getLightColor 颜色变浅方法
路径在:`src/utils/theme.ts`
```ts
// 变浅颜色值level为加深的程度限0-1之间
export function getLightColor(color: any, level: number) {
let reg = /^\#?[0-9A-F]{6}$/;
if (!reg.test(color)) return ElMessage({type:'warning',message:"输入错误的hex颜色值"});
let rgb = hexToRgb(color);
for (let i = 0; i < 3; i++) rgb[i] = Math.floor((255 - rgb[i]) * level + rgb[i]);
return rgbToHex(rgb[0], rgb[1], rgb[2]);
}
```
#### 3、到此就完成了主题的全局变色了
::: tip 还有疑问?
总的来说,就是通过重新定义 `css` 样式,用来覆盖 [element-plus](https://element-plus.gitee.io/#/zh-CN/component/changelog) 默认的样式,从而实现全局主题变色。
:::
## 其它方法实现全局主题
- 参考 `花裤衩大佬`[手摸手带你用vue撸后台 系列三(实战篇)](https://segmentfault.com/a/1190000009762198#articleHeader2)
- vue-element-admin[https://github.com/PanJiaChen/vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)

View File

@ -2,15 +2,22 @@
sidebar: auto
---
# 更新日志
## 2020-12-22
- 处理 [element-plus](https://element-plus.gitee.io/#/zh-CN/component/icon) 打包后字体图标 404 问题
- 编写 对应 `3.x` 主题文档编写
## 2020-12-17
- 处理打包报错问题,找了好几天,加上白天上班没时间
## 2020-12-13
- 网修好了,电脑也好了,风停了,雨也停了,可以愉快的继续开发了。:smile: :smile: :muscle:
- 新增 安装 element-plus 框架,处理自定义主题问题,由于 vite 目前(2020-12-13)不支持 [element-plus 官方文档自定义主题](https://element-plus.org/#/zh-CN/component/custom-theme) `~` 引入写法,改用 css3 :root 写法。这是一个坑,我蹲了好久 :smile:
- 新增 对应编写相关文档
## 2020-12-09
- 由于晚上下班回到去 :crescent_moon: ,没有网(电信线路坏),暂停开发。顺便把电脑修了 :watermelon: :joy: :joy:
- 因为是晚上下班回去 :crescent_moon: 才开发,所以开发的有点慢
## 2020-12-08
- 创建 vue-admin-wonderful-next目录包含主体项目、文档、图片库
- 说明 该项目基于 [vue3.x](https://github.com/vuejs/vue-next)、[vite](https://github.com/vitejs/vite)、[typescript](https://github.com/microsoft/TypeScript)、[element-plus](https://github.com/element-plus/element-plus)

View File

@ -5,7 +5,7 @@ sidebar: auto
[官网https://code.visualstudio.com/](https://code.visualstudio.com/)
## 一、首选项 - 设置 - settings.json
## 首选项 - 设置 - settings.json
```json
{
@ -44,7 +44,7 @@ sidebar: auto
}
```
## 二、vsCode 插件
## vsCode 插件
1. Auto Close Tag
1. Auto Rename Tag
1. background-cover
@ -70,7 +70,7 @@ sidebar: auto
1. Prettier - Code formatter
1. Vetur
## 三、图文步骤
## 图文步骤
#### 1、打开设置
<p></p><img src="https://gitee.com/lyt-top/vue-admin-wonderful-images/raw/master/doc/vs-code1.png"/>