@admin-core/design 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.en.md +698 -0
  2. package/README.md +574 -181
  3. package/dist/index.cjs +4 -4
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.js +1142 -877
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.umd.js +4 -4
  8. package/dist/index.umd.js.map +1 -1
  9. package/dist/theme/constants.d.ts +5 -0
  10. package/dist/theme/constants.d.ts.map +1 -1
  11. package/dist/theme/i18n/en-US.d.ts +3 -0
  12. package/dist/theme/i18n/en-US.d.ts.map +1 -0
  13. package/dist/theme/i18n/index.d.ts +34 -0
  14. package/dist/theme/i18n/index.d.ts.map +1 -0
  15. package/dist/theme/i18n/zh-CN.d.ts +69 -0
  16. package/dist/theme/i18n/zh-CN.d.ts.map +1 -0
  17. package/dist/theme/index.d.ts +4 -2
  18. package/dist/theme/index.d.ts.map +1 -1
  19. package/dist/theme/integration.d.ts +124 -0
  20. package/dist/theme/integration.d.ts.map +1 -0
  21. package/dist/theme/utils.d.ts +1 -1
  22. package/dist/theme/utils.d.ts.map +1 -1
  23. package/package.json +18 -11
  24. package/src/css/base.css +145 -0
  25. package/src/css/components.css +96 -0
  26. package/src/css/index.css +21 -0
  27. package/src/css/integrations/ant-design-vue.css +64 -0
  28. package/src/css/integrations/arco-design.css +62 -0
  29. package/src/css/integrations/element-plus.css +157 -0
  30. package/src/css/integrations/index.css +17 -0
  31. package/src/css/integrations/naive-ui.css +60 -0
  32. package/src/css/nprogress.css +74 -0
  33. package/src/css/transition.css +256 -0
  34. package/src/css/ui.css +117 -0
  35. package/src/css/utilities.css +138 -0
  36. package/src/tokens/dark.css +406 -0
  37. package/src/tokens/index.ts +6 -0
  38. package/src/tokens/light.css +297 -0
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Ant Design Vue 主题集成
3
+ * 将 Admin Core 主题颜色映射到 Ant Design Vue
4
+ *
5
+ * 使用方法:
6
+ * import '@admin-core/design/css/integrations/ant-design-vue.css'
7
+ */
8
+
9
+ :root {
10
+ /* 主色 */
11
+ --ant-primary-color: hsl(var(--primary));
12
+ --ant-primary-color-hover: hsl(var(--primary) / 0.8);
13
+ --ant-primary-color-active: hsl(var(--primary) / 0.9);
14
+ --ant-primary-color-outline: hsl(var(--primary) / 0.2);
15
+
16
+ /* 成功色 */
17
+ --ant-success-color: hsl(var(--success));
18
+ --ant-success-color-hover: hsl(var(--success) / 0.8);
19
+ --ant-success-color-active: hsl(var(--success) / 0.9);
20
+ --ant-success-color-outline: hsl(var(--success) / 0.2);
21
+
22
+ /* 警告色 */
23
+ --ant-warning-color: hsl(var(--warning));
24
+ --ant-warning-color-hover: hsl(var(--warning) / 0.8);
25
+ --ant-warning-color-active: hsl(var(--warning) / 0.9);
26
+ --ant-warning-color-outline: hsl(var(--warning) / 0.2);
27
+
28
+ /* 错误色 */
29
+ --ant-error-color: hsl(var(--destructive));
30
+ --ant-error-color-hover: hsl(var(--destructive) / 0.8);
31
+ --ant-error-color-active: hsl(var(--destructive) / 0.9);
32
+ --ant-error-color-outline: hsl(var(--destructive) / 0.2);
33
+
34
+ /* 信息色 */
35
+ --ant-info-color: hsl(var(--info));
36
+ --ant-info-color-hover: hsl(var(--info) / 0.8);
37
+ --ant-info-color-active: hsl(var(--info) / 0.9);
38
+
39
+ /* 文本颜色 */
40
+ --ant-text-color: hsl(var(--foreground));
41
+ --ant-text-color-secondary: hsl(var(--muted-foreground));
42
+ --ant-text-color-disabled: hsl(var(--muted-foreground) / 0.4);
43
+
44
+ /* 边框颜色 */
45
+ --ant-border-color-base: hsl(var(--border));
46
+ --ant-border-color-split: hsl(var(--border) / 0.5);
47
+
48
+ /* 背景颜色 */
49
+ --ant-background-color-base: hsl(var(--background));
50
+ --ant-background-color-light: hsl(var(--background-deep));
51
+ --ant-component-background: hsl(var(--card));
52
+
53
+ /* 阴影 */
54
+ --ant-box-shadow-base: 0 2px 8px hsl(var(--foreground) / 0.1);
55
+ }
56
+
57
+ /* 暗色模式 */
58
+ .dark {
59
+ --ant-background-color-base: hsl(var(--background));
60
+ --ant-background-color-light: hsl(var(--background-deep));
61
+ --ant-component-background: hsl(var(--card));
62
+ --ant-text-color: hsl(var(--foreground));
63
+ --ant-border-color-base: hsl(var(--border));
64
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Arco Design 主题集成
3
+ * 将 Admin Core 主题颜色映射到 Arco Design
4
+ *
5
+ * 使用方法:
6
+ * import '@admin-core/design/css/integrations/arco-design.css'
7
+ */
8
+
9
+ :root {
10
+ /* 主色 */
11
+ --color-primary-light-1: hsl(var(--primary) / 0.1);
12
+ --color-primary-light-2: hsl(var(--primary) / 0.2);
13
+ --color-primary-light-3: hsl(var(--primary) / 0.3);
14
+ --color-primary-light-4: hsl(var(--primary) / 0.5);
15
+ --color-primary: hsl(var(--primary));
16
+ --color-primary-6: hsl(var(--primary));
17
+ --color-primary-7: hsl(var(--primary) / 0.9);
18
+
19
+ /* 成功色 */
20
+ --color-success-light-1: hsl(var(--success) / 0.1);
21
+ --color-success-light-2: hsl(var(--success) / 0.2);
22
+ --color-success: hsl(var(--success));
23
+
24
+ /* 警告色 */
25
+ --color-warning-light-1: hsl(var(--warning) / 0.1);
26
+ --color-warning-light-2: hsl(var(--warning) / 0.2);
27
+ --color-warning: hsl(var(--warning));
28
+
29
+ /* 危险色 */
30
+ --color-danger-light-1: hsl(var(--destructive) / 0.1);
31
+ --color-danger-light-2: hsl(var(--destructive) / 0.2);
32
+ --color-danger: hsl(var(--destructive));
33
+
34
+ /* 文本颜色 */
35
+ --color-text-1: hsl(var(--foreground));
36
+ --color-text-2: hsl(var(--foreground) / 0.9);
37
+ --color-text-3: hsl(var(--muted-foreground));
38
+ --color-text-4: hsl(var(--muted-foreground) / 0.6);
39
+
40
+ /* 边框颜色 */
41
+ --color-border: hsl(var(--border));
42
+ --color-border-1: hsl(var(--border) / 0.3);
43
+ --color-border-2: hsl(var(--border) / 0.5);
44
+ --color-border-3: hsl(var(--border) / 0.7);
45
+ --color-border-4: hsl(var(--border));
46
+
47
+ /* 背景颜色 */
48
+ --color-bg-1: hsl(var(--background));
49
+ --color-bg-2: hsl(var(--background-deep));
50
+ --color-bg-3: hsl(var(--card));
51
+ --color-bg-4: hsl(var(--muted));
52
+ --color-bg-5: hsl(var(--muted) / 0.5);
53
+ }
54
+
55
+ /* 暗色模式 */
56
+ .dark {
57
+ --color-bg-1: hsl(var(--background));
58
+ --color-bg-2: hsl(var(--background-deep));
59
+ --color-bg-3: hsl(var(--card));
60
+ --color-text-1: hsl(var(--foreground));
61
+ --color-border: hsl(var(--border));
62
+ }
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Element Plus 主题集成
3
+ * 将 Admin Core 主题颜色映射到 Element Plus
4
+ *
5
+ * 使用方法:
6
+ * import '@admin-core/design/css/integrations/element-plus.css'
7
+ */
8
+
9
+ /* 主色 */
10
+ :root {
11
+ --el-color-primary: hsl(var(--primary));
12
+ --el-color-primary-light-3: hsl(var(--primary) / 0.7);
13
+ --el-color-primary-light-5: hsl(var(--primary) / 0.5);
14
+ --el-color-primary-light-7: hsl(var(--primary) / 0.3);
15
+ --el-color-primary-light-8: hsl(var(--primary) / 0.2);
16
+ --el-color-primary-light-9: hsl(var(--primary) / 0.1);
17
+ --el-color-primary-dark-2: hsl(var(--primary));
18
+
19
+ /* 成功色 */
20
+ --el-color-success: hsl(var(--success));
21
+ --el-color-success-light-3: hsl(var(--success) / 0.7);
22
+ --el-color-success-light-5: hsl(var(--success) / 0.5);
23
+ --el-color-success-light-7: hsl(var(--success) / 0.3);
24
+ --el-color-success-light-8: hsl(var(--success) / 0.2);
25
+ --el-color-success-light-9: hsl(var(--success) / 0.1);
26
+ --el-color-success-dark-2: hsl(var(--success));
27
+
28
+ /* 警告色 */
29
+ --el-color-warning: hsl(var(--warning));
30
+ --el-color-warning-light-3: hsl(var(--warning) / 0.7);
31
+ --el-color-warning-light-5: hsl(var(--warning) / 0.5);
32
+ --el-color-warning-light-7: hsl(var(--warning) / 0.3);
33
+ --el-color-warning-light-8: hsl(var(--warning) / 0.2);
34
+ --el-color-warning-light-9: hsl(var(--warning) / 0.1);
35
+ --el-color-warning-dark-2: hsl(var(--warning));
36
+
37
+ /* 危险色 */
38
+ --el-color-danger: hsl(var(--destructive));
39
+ --el-color-danger-light-3: hsl(var(--destructive) / 0.7);
40
+ --el-color-danger-light-5: hsl(var(--destructive) / 0.5);
41
+ --el-color-danger-light-7: hsl(var(--destructive) / 0.3);
42
+ --el-color-danger-light-8: hsl(var(--destructive) / 0.2);
43
+ --el-color-danger-light-9: hsl(var(--destructive) / 0.1);
44
+ --el-color-danger-dark-2: hsl(var(--destructive));
45
+
46
+ /* 信息色 */
47
+ --el-color-info: hsl(var(--muted-foreground));
48
+ --el-color-info-light-3: hsl(var(--muted-foreground) / 0.7);
49
+ --el-color-info-light-5: hsl(var(--muted-foreground) / 0.5);
50
+ --el-color-info-light-7: hsl(var(--muted-foreground) / 0.3);
51
+ --el-color-info-light-8: hsl(var(--muted-foreground) / 0.2);
52
+ --el-color-info-light-9: hsl(var(--muted-foreground) / 0.1);
53
+
54
+ /* 文本颜色 */
55
+ --el-text-color-primary: hsl(var(--foreground));
56
+ --el-text-color-regular: hsl(var(--foreground) / 0.9);
57
+ --el-text-color-secondary: hsl(var(--muted-foreground));
58
+ --el-text-color-placeholder: hsl(var(--muted-foreground) / 0.6);
59
+ --el-text-color-disabled: hsl(var(--muted-foreground) / 0.4);
60
+
61
+ /* 边框颜色 */
62
+ --el-border-color: hsl(var(--border));
63
+ --el-border-color-light: hsl(var(--border) / 0.7);
64
+ --el-border-color-lighter: hsl(var(--border) / 0.5);
65
+ --el-border-color-extra-light: hsl(var(--border) / 0.3);
66
+ --el-border-color-dark: hsl(var(--border));
67
+ --el-border-color-darker: hsl(var(--border));
68
+
69
+ /* 背景颜色 */
70
+ --el-bg-color: hsl(var(--background));
71
+ --el-bg-color-page: hsl(var(--background-deep));
72
+ --el-bg-color-overlay: hsl(var(--card));
73
+
74
+ /* 填充颜色 */
75
+ --el-fill-color: hsl(var(--muted));
76
+ --el-fill-color-light: hsl(var(--muted) / 0.7);
77
+ --el-fill-color-lighter: hsl(var(--muted) / 0.5);
78
+ --el-fill-color-extra-light: hsl(var(--muted) / 0.3);
79
+ --el-fill-color-dark: hsl(var(--muted));
80
+ --el-fill-color-darker: hsl(var(--muted));
81
+ --el-fill-color-blank: hsl(var(--background));
82
+
83
+ /* 遮罩颜色 */
84
+ --el-overlay-color: hsl(var(--foreground) / 0.5);
85
+ --el-overlay-color-light: hsl(var(--foreground) / 0.3);
86
+ --el-overlay-color-lighter: hsl(var(--foreground) / 0.2);
87
+
88
+ /* 阴影 */
89
+ --el-box-shadow: 0 2px 8px hsl(var(--foreground) / 0.1);
90
+ --el-box-shadow-light: 0 1px 4px hsl(var(--foreground) / 0.08);
91
+ --el-box-shadow-lighter: 0 1px 2px hsl(var(--foreground) / 0.05);
92
+ --el-box-shadow-dark: 0 4px 16px hsl(var(--foreground) / 0.15);
93
+ }
94
+
95
+ /* 暗色模式 */
96
+ .dark {
97
+ --el-bg-color: hsl(var(--background));
98
+ --el-bg-color-page: hsl(var(--background-deep));
99
+ --el-bg-color-overlay: hsl(var(--card));
100
+ --el-text-color-primary: hsl(var(--foreground));
101
+ --el-text-color-regular: hsl(var(--foreground) / 0.9);
102
+ --el-border-color: hsl(var(--border));
103
+ --el-fill-color: hsl(var(--muted));
104
+ --el-fill-color-blank: hsl(var(--background));
105
+ }
106
+
107
+ /* Element Plus 组件微调 */
108
+ .el-button {
109
+ transition: all 0.3s ease;
110
+ }
111
+
112
+ .el-input__wrapper {
113
+ background-color: hsl(var(--background));
114
+ box-shadow: 0 0 0 1px hsl(var(--border)) inset;
115
+ transition: all 0.3s ease;
116
+ }
117
+
118
+ .el-input__wrapper:hover {
119
+ box-shadow: 0 0 0 1px hsl(var(--ring)) inset;
120
+ }
121
+
122
+ .el-input__wrapper.is-focus {
123
+ box-shadow: 0 0 0 2px hsl(var(--ring)) inset;
124
+ }
125
+
126
+ .el-select__wrapper {
127
+ background-color: hsl(var(--background));
128
+ box-shadow: 0 0 0 1px hsl(var(--border)) inset;
129
+ transition: all 0.3s ease;
130
+ }
131
+
132
+ .el-select__wrapper:hover {
133
+ box-shadow: 0 0 0 1px hsl(var(--ring)) inset;
134
+ }
135
+
136
+ .el-select__wrapper.is-focused {
137
+ box-shadow: 0 0 0 2px hsl(var(--ring)) inset;
138
+ }
139
+
140
+ .el-card {
141
+ background-color: hsl(var(--card));
142
+ border-color: hsl(var(--border));
143
+ color: hsl(var(--card-foreground));
144
+ transition: all 0.3s ease;
145
+ }
146
+
147
+ .el-alert {
148
+ transition: all 0.3s ease;
149
+ }
150
+
151
+ .el-tag {
152
+ transition: all 0.3s ease;
153
+ }
154
+
155
+ .el-progress__text {
156
+ color: hsl(var(--foreground));
157
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 第三方组件库集成
3
+ *
4
+ * 根据你使用的组件库,选择对应的集成文件:
5
+ *
6
+ * Element Plus:
7
+ * @import '@admin-core/design/css/integrations/element-plus.css';
8
+ *
9
+ * Ant Design Vue:
10
+ * @import '@admin-core/design/css/integrations/ant-design-vue.css';
11
+ *
12
+ * Naive UI:
13
+ * @import '@admin-core/design/css/integrations/naive-ui.css';
14
+ *
15
+ * Arco Design:
16
+ * @import '@admin-core/design/css/integrations/arco-design.css';
17
+ */
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Naive UI 主题集成
3
+ * 将 Admin Core 主题颜色映射到 Naive UI
4
+ *
5
+ * 使用方法:
6
+ * import '@admin-core/design/css/integrations/naive-ui.css'
7
+ *
8
+ * 注意:Naive UI 原生支持 CSS 变量,这个文件提供额外的样式优化
9
+ */
10
+
11
+ :root {
12
+ /* 主色 */
13
+ --n-color-primary: hsl(var(--primary));
14
+ --n-color-primary-hover: hsl(var(--primary) / 0.8);
15
+ --n-color-primary-pressed: hsl(var(--primary) / 0.9);
16
+ --n-color-primary-suppl: hsl(var(--primary));
17
+
18
+ /* 成功色 */
19
+ --n-color-success: hsl(var(--success));
20
+ --n-color-success-hover: hsl(var(--success) / 0.8);
21
+ --n-color-success-pressed: hsl(var(--success) / 0.9);
22
+
23
+ /* 警告色 */
24
+ --n-color-warning: hsl(var(--warning));
25
+ --n-color-warning-hover: hsl(var(--warning) / 0.8);
26
+ --n-color-warning-pressed: hsl(var(--warning) / 0.9);
27
+
28
+ /* 错误色 */
29
+ --n-color-error: hsl(var(--destructive));
30
+ --n-color-error-hover: hsl(var(--destructive) / 0.8);
31
+ --n-color-error-pressed: hsl(var(--destructive) / 0.9);
32
+
33
+ /* 信息色 */
34
+ --n-color-info: hsl(var(--info));
35
+ --n-color-info-hover: hsl(var(--info) / 0.8);
36
+ --n-color-info-pressed: hsl(var(--info) / 0.9);
37
+
38
+ /* 文本颜色 */
39
+ --n-text-color-base: hsl(var(--foreground));
40
+ --n-text-color-1: hsl(var(--foreground));
41
+ --n-text-color-2: hsl(var(--foreground) / 0.9);
42
+ --n-text-color-3: hsl(var(--muted-foreground));
43
+
44
+ /* 边框颜色 */
45
+ --n-border-color: hsl(var(--border));
46
+
47
+ /* 背景颜色 */
48
+ --n-body-color: hsl(var(--background));
49
+ --n-card-color: hsl(var(--card));
50
+ --n-modal-color: hsl(var(--card));
51
+ --n-popover-color: hsl(var(--card));
52
+ }
53
+
54
+ /* 暗色模式 */
55
+ .dark {
56
+ --n-body-color: hsl(var(--background));
57
+ --n-card-color: hsl(var(--card));
58
+ --n-text-color-base: hsl(var(--foreground));
59
+ --n-border-color: hsl(var(--border));
60
+ }
@@ -0,0 +1,74 @@
1
+ /* NProgress 进度条样式 */
2
+
3
+ /* 使点击事件穿透 */
4
+ #nprogress {
5
+ pointer-events: none;
6
+ }
7
+
8
+ /* 进度条主体 */
9
+ #nprogress .bar {
10
+ background-color: var(--color-primary);
11
+ position: fixed;
12
+ left: 0;
13
+ top: 0;
14
+ z-index: 1031;
15
+ height: 2px;
16
+ width: 100%;
17
+ }
18
+
19
+ /* 进度条尾部光晕效果 */
20
+ #nprogress .peg {
21
+ position: absolute;
22
+ right: 0;
23
+ display: block;
24
+ height: 100%;
25
+ width: 100px;
26
+ box-shadow:
27
+ 0 0 10px var(--color-primary),
28
+ 0 0 5px var(--color-primary);
29
+ opacity: 1;
30
+ transform: rotate(3deg) translate(0, -4px);
31
+ }
32
+
33
+ /* 加载旋转图标容器 */
34
+ #nprogress .spinner {
35
+ position: fixed;
36
+ right: 1rem;
37
+ top: 1rem;
38
+ z-index: 1031;
39
+ display: block;
40
+ }
41
+
42
+ /* 旋转图标样式 */
43
+ #nprogress .spinner-icon {
44
+ width: 1rem;
45
+ height: 1rem;
46
+ border-radius: 9999px;
47
+ border: 2px solid transparent;
48
+ border-top-color: var(--color-primary);
49
+ border-left-color: var(--color-primary);
50
+ animation: nprogress-spinner 400ms linear infinite;
51
+ }
52
+
53
+ /* 自定义父容器 */
54
+ .nprogress-custom-parent {
55
+ position: relative;
56
+ overflow: hidden;
57
+ }
58
+
59
+ /* 自定义父容器内的进度条和旋转图标定位 */
60
+ .nprogress-custom-parent #nprogress .spinner,
61
+ .nprogress-custom-parent #nprogress .bar {
62
+ position: absolute;
63
+ }
64
+
65
+ /* 旋转动画关键帧 */
66
+ @keyframes nprogress-spinner {
67
+ 0% {
68
+ transform: rotate(0deg);
69
+ }
70
+
71
+ 100% {
72
+ transform: rotate(360deg);
73
+ }
74
+ }
@@ -0,0 +1,256 @@
1
+ /* Vue 过渡动画样式 */
2
+
3
+ /* ========== 向上滑动过渡 ========== */
4
+ .slide-up-enter-active,
5
+ .slide-up-leave-active {
6
+ transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1);
7
+ }
8
+
9
+ .slide-up-move {
10
+ transition: transform 0.3s;
11
+ }
12
+
13
+ .slide-up-enter-from,
14
+ .slide-up-leave-to {
15
+ opacity: 0;
16
+ transform: translateY(-15px);
17
+ }
18
+
19
+ /* ========== 向下滑动过渡 ========== */
20
+ .slide-down-enter-active,
21
+ .slide-down-leave-active {
22
+ transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1);
23
+ }
24
+
25
+ .slide-down-move {
26
+ transition: transform 0.3s;
27
+ }
28
+
29
+ .slide-down-enter-from,
30
+ .slide-down-leave-to {
31
+ opacity: 0;
32
+ transform: translateY(15px);
33
+ }
34
+
35
+ /* ========== 向左滑动过渡 ========== */
36
+ .slide-left-enter-active,
37
+ .slide-left-leave-active {
38
+ transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1);
39
+ }
40
+
41
+ .slide-left-move {
42
+ transition: transform 0.3s;
43
+ }
44
+
45
+ .slide-left-enter-from,
46
+ .slide-left-leave-to {
47
+ opacity: 0;
48
+ transform: translate(-15px);
49
+ }
50
+
51
+ /* ========== 向右滑动过渡 ========== */
52
+ .slide-right-enter-active,
53
+ .slide-right-leave-active {
54
+ transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1);
55
+ }
56
+
57
+ .slide-right-move {
58
+ transition: transform 0.3s;
59
+ }
60
+
61
+ .slide-right-enter-from,
62
+ .slide-right-leave-to {
63
+ opacity: 0;
64
+ transform: translate(15px);
65
+ }
66
+
67
+ /* ========== 淡入淡出过渡 ========== */
68
+ .fade-transition-enter-active,
69
+ .fade-transition-leave-active {
70
+ transition: opacity 0.2s ease-in-out;
71
+ }
72
+
73
+ .fade-transition-enter-from,
74
+ .fade-transition-leave-to {
75
+ opacity: 0;
76
+ }
77
+
78
+ /* 简化版淡入淡出 */
79
+ .fade-enter-active,
80
+ .fade-leave-active {
81
+ transition: opacity 0.2s ease-in-out;
82
+ }
83
+
84
+ .fade-enter-from,
85
+ .fade-leave-to {
86
+ opacity: 0;
87
+ }
88
+
89
+ /* ========== 淡入淡出 + 滑动过渡 ========== */
90
+ .fade-slide-leave-active,
91
+ .fade-slide-enter-active {
92
+ transition: all 0.3s;
93
+ }
94
+
95
+ .fade-slide-enter-from {
96
+ opacity: 0;
97
+ transform: translate(-30px);
98
+ }
99
+
100
+ .fade-slide-leave-to {
101
+ opacity: 0;
102
+ transform: translate(30px);
103
+ }
104
+
105
+ /* ========== 淡入淡出 + 向下滑动 ========== */
106
+ .fade-down-enter-active,
107
+ .fade-down-leave-active {
108
+ transition:
109
+ opacity 0.25s,
110
+ transform 0.3s;
111
+ }
112
+
113
+ .fade-down-enter-from {
114
+ opacity: 0;
115
+ transform: translateY(-10%);
116
+ }
117
+
118
+ .fade-down-leave-to {
119
+ opacity: 0;
120
+ transform: translateY(10%);
121
+ }
122
+
123
+ /* ========== 淡入淡出 + 缩放过渡 ========== */
124
+ .fade-scale-leave-active,
125
+ .fade-scale-enter-active {
126
+ transition: all 0.28s;
127
+ }
128
+
129
+ .fade-scale-enter-from {
130
+ opacity: 0;
131
+ transform: scale(1.2);
132
+ }
133
+
134
+ .fade-scale-leave-to {
135
+ opacity: 0;
136
+ transform: scale(0.8);
137
+ }
138
+
139
+ /* ========== 淡入淡出 + 向上滑动 ========== */
140
+ .fade-up-enter-active,
141
+ .fade-up-leave-active {
142
+ transition:
143
+ opacity 0.2s,
144
+ transform 0.25s;
145
+ }
146
+
147
+ .fade-up-enter-from {
148
+ opacity: 0;
149
+ transform: translateY(10%);
150
+ }
151
+
152
+ .fade-up-leave-to {
153
+ opacity: 0;
154
+ transform: translateY(-10%);
155
+ }
156
+
157
+ /* ========== 动画关键帧 ========== */
158
+
159
+ /* 淡入淡出 + 滑动动画 */
160
+ @keyframes fade-slide {
161
+ 0% {
162
+ opacity: 0;
163
+ transform: translate(-30px);
164
+ }
165
+
166
+ 50% {
167
+ opacity: 1;
168
+ }
169
+
170
+ 100% {
171
+ opacity: 0;
172
+ transform: translate(30px);
173
+ }
174
+ }
175
+
176
+ /* 淡入淡出动画 */
177
+ @keyframes fade {
178
+ 0% {
179
+ opacity: 0;
180
+ }
181
+
182
+ 50% {
183
+ opacity: 1;
184
+ }
185
+
186
+ 100% {
187
+ opacity: 0;
188
+ }
189
+ }
190
+
191
+ /* 淡入淡出 + 向上动画 */
192
+ @keyframes fade-up {
193
+ 0% {
194
+ opacity: 0;
195
+ transform: translateY(10%);
196
+ }
197
+
198
+ 50% {
199
+ opacity: 1;
200
+ }
201
+
202
+ 100% {
203
+ opacity: 0;
204
+ transform: translateY(-10%);
205
+ }
206
+ }
207
+
208
+ /* 淡入淡出 + 向下动画 */
209
+ @keyframes fade-down {
210
+ 0% {
211
+ opacity: 0;
212
+ transform: translateY(-10%);
213
+ }
214
+
215
+ 50% {
216
+ opacity: 1;
217
+ }
218
+
219
+ 100% {
220
+ opacity: 0;
221
+ transform: translateY(10%);
222
+ }
223
+ }
224
+
225
+ /* ========== 慢速动画类 ========== */
226
+ .fade-slow {
227
+ animation: fade 3s infinite;
228
+ }
229
+
230
+ .fade-slide-slow {
231
+ animation: fade-slide 3s infinite;
232
+ }
233
+
234
+ .fade-up-slow {
235
+ animation: fade-up 3s infinite;
236
+ }
237
+
238
+ .fade-down-slow {
239
+ animation: fade-down 3s infinite;
240
+ }
241
+
242
+ /* ========== 折叠过渡 ========== */
243
+ .collapse-transition {
244
+ transition:
245
+ 0.2s height ease-in-out,
246
+ 0.2s padding-top ease-in-out,
247
+ 0.2s padding-bottom ease-in-out;
248
+ }
249
+
250
+ .collapse-transition-leave-active,
251
+ .collapse-transition-enter-active {
252
+ transition:
253
+ 0.2s max-height ease-in-out,
254
+ 0.2s padding-top ease-in-out,
255
+ 0.2s margin-top ease-in-out;
256
+ }