First Commit
This commit is contained in:
333
有维项目/.qoder/repowiki/zh/content/用户界面设计/仪表盘布局/Tab导航系统.md
Normal file
333
有维项目/.qoder/repowiki/zh/content/用户界面设计/仪表盘布局/Tab导航系统.md
Normal file
@@ -0,0 +1,333 @@
|
||||
# Tab导航系统
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [index.html](file://index.html)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构总览](#架构总览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考量](#性能考量)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本文件针对有维项目的Tab导航系统进行全面技术文档梳理,涵盖实现原理、样式设计、激活状态管理、JavaScript切换逻辑、CSS动画效果与用户体验优化、内容区域显示隐藏机制与过渡动画、响应式适配与移动端交互、样式自定义与主题配置、可访问性设计以及扩展指南。文档面向不同技术背景的读者,既提供高层架构视图,也包含代码级细节与可视化图表。
|
||||
|
||||
## 项目结构
|
||||
该系统位于单一HTML文件中,采用内联CSS与内联JavaScript的方式实现,Tab导航位于仪表盘页面的导航栏下方,由一组按钮构成导航条,并对应多个内容区域。页面整体采用类名驱动的DOM结构,通过JavaScript控制激活状态与内容显示。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A["index.html"] --> B["全局样式与变量"]
|
||||
A --> C["仪表盘页面"]
|
||||
C --> D["Tab导航容器(.tab-nav)"]
|
||||
D --> E["Tab按钮(.tab-btn)"]
|
||||
C --> F["Tab内容区(.tab-content)"]
|
||||
F --> G["平台概览(#overview)"]
|
||||
F --> H["有维教育(#education)"]
|
||||
F --> I["AI工具(#ai-tools)"]
|
||||
F --> J["有维校友(#alumni)"]
|
||||
F --> K["会员体系(#membership)"]
|
||||
A --> L["JavaScript逻辑"]
|
||||
L --> M["showTab(tabId)"]
|
||||
L --> N["激活状态管理"]
|
||||
L --> O["内容显示隐藏"]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.html:1667-1674](file://index.html#L1667-L1674)
|
||||
- [index.html:1676-2228](file://index.html#L1676-L2228)
|
||||
- [index.html:2533-2562](file://index.html#L2533-L2562)
|
||||
|
||||
**章节来源**
|
||||
- [index.html:1667-1674](file://index.html#L1667-L1674)
|
||||
- [index.html:1676-2228](file://index.html#L1676-L2228)
|
||||
|
||||
## 核心组件
|
||||
- Tab导航容器:用于承载所有Tab按钮,提供统一的布局与阴影效果。
|
||||
- Tab按钮:每个按钮代表一个Tab页签,包含悬停与激活状态样式。
|
||||
- Tab内容区:与按钮一一对应的内容块,初始仅显示激活项,其余隐藏。
|
||||
- JavaScript控制器:负责按钮激活状态切换、内容显示隐藏、Tab名称映射。
|
||||
|
||||
关键样式与行为:
|
||||
- 激活状态:按钮与内容区同时应用“active”类名,实现视觉同步。
|
||||
- 动画过渡:内容区切换时应用淡入动画,提升用户体验。
|
||||
- 响应式适配:在小屏设备上允许横向滚动,避免按钮溢出。
|
||||
|
||||
**章节来源**
|
||||
- [index.html:544-584](file://index.html#L544-L584)
|
||||
- [index.html:2533-2562](file://index.html#L2533-L2562)
|
||||
|
||||
## 架构总览
|
||||
Tab导航系统采用“按钮-内容区”双层结构,通过JavaScript集中控制激活状态与显示隐藏。整体架构简洁清晰,便于扩展与维护。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "UI层"
|
||||
TNav[".tab-nav 容器"]
|
||||
Btns[".tab-btn 按钮集合"]
|
||||
Content[".tab-content 内容集合"]
|
||||
end
|
||||
subgraph "控制层"
|
||||
JS["JavaScript 控制器"]
|
||||
end
|
||||
subgraph "样式层"
|
||||
CSS["CSS 样式与动画"]
|
||||
end
|
||||
TNav --> Btns
|
||||
TNav --> Content
|
||||
Btns --> JS
|
||||
Content --> JS
|
||||
JS --> CSS
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.html:544-584](file://index.html#L544-L584)
|
||||
- [index.html:2533-2562](file://index.html#L2533-L2562)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### Tab导航容器与按钮
|
||||
- 容器样式:提供圆角背景、阴影、按钮间距与整体布局。
|
||||
- 按钮样式:默认浅色文字,悬停变深色与浅背景;激活时变为强调色背景与白色文字。
|
||||
- 激活状态:通过“active”类名控制,确保按钮与内容区一致。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class TabNav {
|
||||
+容器样式
|
||||
+圆角背景
|
||||
+阴影
|
||||
+按钮间距
|
||||
}
|
||||
class TabButton {
|
||||
+默认样式
|
||||
+悬停效果
|
||||
+激活样式
|
||||
+点击事件
|
||||
}
|
||||
TabNav --> TabButton : "包含"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.html:544-575](file://index.html#L544-L575)
|
||||
|
||||
**章节来源**
|
||||
- [index.html:544-575](file://index.html#L544-L575)
|
||||
|
||||
### Tab内容区与动画
|
||||
- 内容区默认隐藏,仅激活项显示。
|
||||
- 切换时应用淡入动画,提升视觉连贯性。
|
||||
- 在小屏设备上,Tab导航容器启用横向滚动,避免按钮溢出。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start(["点击Tab按钮"]) --> RemoveActive["移除所有按钮的active类"]
|
||||
RemoveActive --> HideAll["隐藏所有内容区"]
|
||||
HideAll --> ActivateBtn["为对应按钮添加active类"]
|
||||
ActivateBtn --> ShowContent["显示对应内容区"]
|
||||
ShowContent --> Animate["应用淡入动画"]
|
||||
Animate --> End(["完成"])
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.html:2533-2562](file://index.html#L2533-L2562)
|
||||
- [index.html:577-584](file://index.html#L577-L584)
|
||||
- [index.html:1537-1544](file://index.html#L1537-L1544)
|
||||
|
||||
**章节来源**
|
||||
- [index.html:577-584](file://index.html#L577-L584)
|
||||
- [index.html:1537-1544](file://index.html#L1537-L1544)
|
||||
|
||||
### JavaScript切换逻辑
|
||||
- showTab(tabId):统一入口,负责移除旧状态、添加新状态、显示对应内容。
|
||||
- getTabName(tabId):将内部ID映射为显示文本,辅助按钮激活判断。
|
||||
- 事件绑定:按钮直接调用onclick,传入对应内容区ID。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as "用户"
|
||||
participant BTN as "Tab按钮(.tab-btn)"
|
||||
participant JS as "showTab()"
|
||||
participant DOM as "DOM元素"
|
||||
participant ANI as "动画"
|
||||
U->>BTN : 点击
|
||||
BTN->>JS : 传入tabId
|
||||
JS->>DOM : 移除所有按钮active
|
||||
JS->>DOM : 隐藏所有内容区
|
||||
JS->>DOM : 为对应按钮添加active
|
||||
JS->>DOM : 显示对应内容区
|
||||
DOM->>ANI : 应用淡入动画
|
||||
ANI-->>U : 视觉反馈
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.html:1669-1674](file://index.html#L1669-L1674)
|
||||
- [index.html:2533-2562](file://index.html#L2533-L2562)
|
||||
|
||||
**章节来源**
|
||||
- [index.html:2533-2562](file://index.html#L2533-L2562)
|
||||
|
||||
### 激活状态管理
|
||||
- 双向同步:按钮与内容区同时应用“active”,保证视觉一致性。
|
||||
- 名称映射:通过getTabName(tabId)将内部ID转换为按钮文本,用于精确匹配并激活对应按钮。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["传入tabId"] --> B["getTabName(tabId)"]
|
||||
B --> C{"按钮文本是否包含名称?"}
|
||||
C --> |是| D["为该按钮添加active"]
|
||||
C --> |否| E["继续遍历下一个按钮"]
|
||||
D --> F["显示对应内容区"]
|
||||
E --> C
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.html:2552-2562](file://index.html#L2552-L2562)
|
||||
- [index.html:2533-2550](file://index.html#L2533-L2550)
|
||||
|
||||
**章节来源**
|
||||
- [index.html:2552-2562](file://index.html#L2552-L2562)
|
||||
- [index.html:2533-2550](file://index.html#L2533-L2550)
|
||||
|
||||
### 内容区域显示隐藏机制
|
||||
- 默认隐藏:未激活的内容区display为none。
|
||||
- 激活显示:对应内容区添加active类,display变为block。
|
||||
- 动画过渡:配合CSS动画实现平滑切换。
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> 隐藏
|
||||
隐藏 --> 显示 : "添加active类"
|
||||
显示 --> 隐藏 : "移除active类"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.html:577-584](file://index.html#L577-L584)
|
||||
|
||||
**章节来源**
|
||||
- [index.html:577-584](file://index.html#L577-L584)
|
||||
|
||||
### 响应式适配与移动端交互
|
||||
- 横向滚动:小屏设备下,Tab导航容器启用overflow-x: auto,避免按钮溢出。
|
||||
- 触摸交互:容器具备滚动能力,满足移动端滑动切换需求。
|
||||
- 其他组件:页面整体在768px以下进行网格布局与间距调整,确保在小屏下的可用性。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Small["屏幕宽度 ≤ 768px"] --> Scroll["Tab容器启用横向滚动"]
|
||||
Small --> Grid["网格布局调整"]
|
||||
Scroll --> UX["更好的移动端体验"]
|
||||
Grid --> UX
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.html:1537-1544](file://index.html#L1537-L1544)
|
||||
- [index.html:1492-1545](file://index.html#L1492-L1545)
|
||||
|
||||
**章节来源**
|
||||
- [index.html:1537-1544](file://index.html#L1537-L1544)
|
||||
- [index.html:1492-1545](file://index.html#L1492-L1545)
|
||||
|
||||
### 样式自定义与主题配置
|
||||
- CSS变量:通过:root定义主题色值,便于统一替换主色调与辅助色。
|
||||
- 按钮状态:默认、悬停、激活三态样式分离,易于按需修改。
|
||||
- 动画参数:淡入动画时长与缓动曲线可按需调整。
|
||||
|
||||
建议的自定义点:
|
||||
- 主题色:修改:root中的颜色变量,影响按钮激活色、渐变背景等。
|
||||
- 字体与字号:调整按钮字体大小与字重,适配不同品牌风格。
|
||||
- 圆角与阴影:根据品牌规范调整圆角半径与阴影强度。
|
||||
|
||||
**章节来源**
|
||||
- [index.html:14-31](file://index.html#L14-L31)
|
||||
- [index.html:544-575](file://index.html#L544-L575)
|
||||
|
||||
### 可访问性设计与键盘操作
|
||||
- 现状:Tab按钮使用button元素,具备基本可聚焦性;但未显式设置aria标签或键盘事件绑定。
|
||||
- 建议增强:
|
||||
- 为按钮添加role="tab"、aria-selected、aria-controls等ARIA属性。
|
||||
- 支持键盘方向键切换与Enter/Space激活。
|
||||
- 为内容区添加role="tabpanel"与aria-labelledby关联。
|
||||
- 提供焦点可见性与键盘导航提示。
|
||||
|
||||
[本节为通用可访问性建议,不直接分析具体文件,故无章节来源]
|
||||
|
||||
### 扩展指南与二次开发参考
|
||||
- 新增Tab页:在HTML中添加新的按钮与内容区,确保ID与按钮文本一致。
|
||||
- 自定义动画:修改CSS动画时长与缓动函数,或引入更复杂的过渡效果。
|
||||
- 交互增强:在JavaScript中扩展showTab,增加回调钩子或状态持久化。
|
||||
- 多语言支持:将按钮文本从HTML抽离至数据源,结合getTabName实现动态文案。
|
||||
|
||||
**章节来源**
|
||||
- [index.html:1669-1674](file://index.html#L1669-L1674)
|
||||
- [index.html:2552-2562](file://index.html#L2552-L2562)
|
||||
|
||||
## 依赖关系分析
|
||||
- HTML结构依赖:按钮与内容区通过ID与文本进行逻辑关联。
|
||||
- 样式依赖:按钮与内容区的激活状态依赖于CSS类名与动画。
|
||||
- JavaScript依赖:showTab依赖DOM查询与类名操作,依赖getTabName进行名称映射。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
HTML["HTML结构"] --> JS["JavaScript"]
|
||||
CSS["CSS样式"] --> JS
|
||||
JS --> DOM["DOM操作"]
|
||||
DOM --> HTML
|
||||
DOM --> CSS
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [index.html:1669-1674](file://index.html#L1669-L1674)
|
||||
- [index.html:2533-2562](file://index.html#L2533-L2562)
|
||||
- [index.html:544-584](file://index.html#L544-L584)
|
||||
|
||||
**章节来源**
|
||||
- [index.html:1669-1674](file://index.html#L1669-L1674)
|
||||
- [index.html:2533-2562](file://index.html#L2533-L2562)
|
||||
- [index.html:544-584](file://index.html#L544-L584)
|
||||
|
||||
## 性能考量
|
||||
- DOM查询:每次切换都会对所有按钮与内容区进行查询,建议在初始化时缓存节点集合。
|
||||
- 动画:淡入动画开销较小,但在大量内容区时仍需注意渲染性能。
|
||||
- 响应式:小屏滚动不会造成额外负担,但需避免在滚动过程中频繁重排。
|
||||
|
||||
优化建议:
|
||||
- 缓存querySelectorAll结果,减少重复查询。
|
||||
- 使用requestAnimationFrame控制动画帧,避免阻塞主线程。
|
||||
- 将动画时长与缓动参数统一管理,便于性能调优。
|
||||
|
||||
[本节提供通用性能建议,不直接分析具体文件,故无章节来源]
|
||||
|
||||
## 故障排除指南
|
||||
- 按钮无法激活:检查按钮文本是否与getTabName返回值一致,确认ID与按钮文本匹配。
|
||||
- 内容区不显示:确认对应内容区存在且ID正确,检查active类是否正确添加。
|
||||
- 动画无效:检查CSS动画定义是否存在,确认内容区初始display为none。
|
||||
- 小屏溢出:确认Tab容器是否启用了overflow-x: auto。
|
||||
|
||||
排查步骤:
|
||||
- 打开浏览器开发者工具,检查元素类名与样式。
|
||||
- 在控制台调用showTab(tabId),观察DOM变化。
|
||||
- 查看控制台是否有JavaScript错误。
|
||||
|
||||
**章节来源**
|
||||
- [index.html:2533-2562](file://index.html#L2533-L2562)
|
||||
- [index.html:577-584](file://index.html#L577-L584)
|
||||
- [index.html:1537-1544](file://index.html#L1537-L1544)
|
||||
|
||||
## 结论
|
||||
有维项目的Tab导航系统以简洁的HTML结构与内联JavaScript实现,具备良好的可读性与可扩展性。通过CSS类名与动画实现状态同步与平滑过渡,配合响应式设计在移动端提供良好体验。建议在未来版本中增强可访问性与键盘支持,并对JavaScript进行性能优化与可测试性改进。
|
||||
|
||||
## 附录
|
||||
- 快速定位:
|
||||
- Tab导航容器:[index.html:1667-1674](file://index.html#L1667-L1674)
|
||||
- Tab按钮与内容区:[index.html:1676-2228](file://index.html#L1676-L2228)
|
||||
- JavaScript切换逻辑:[index.html:2533-2562](file://index.html#L2533-L2562)
|
||||
- 响应式适配:[index.html:1537-1544](file://index.html#L1537-L1544)
|
||||
359
有维项目/.qoder/repowiki/zh/content/用户界面设计/仪表盘布局/仪表盘布局.md
Normal file
359
有维项目/.qoder/repowiki/zh/content/用户界面设计/仪表盘布局/仪表盘布局.md
Normal file
@@ -0,0 +1,359 @@
|
||||
# 仪表盘布局
|
||||
|
||||
<cite>
|
||||
**本文引用的文件**
|
||||
- [index.html](file://index.html)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构总览](#架构总览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考量](#性能考量)
|
||||
8. [故障排查指南](#故障排查指南)
|
||||
9. [结论](#结论)
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本文件为“有维项目”的仪表盘页面提供全面的布局设计文档,面向UI设计师与前端开发者。内容涵盖整体布局架构、导航系统设计、内容区域划分、Tab导航机制、统计卡片网格、内容卡片布局、项目列表展示、交互设计、响应式断点与移动端适配、性能优化建议以及组件使用规范与定制化指南。文档以index.html中的HTML结构与内联样式为基础,结合JavaScript交互逻辑进行系统性梳理与可视化呈现。
|
||||
|
||||
## 项目结构
|
||||
项目采用单页应用(SPA)结构,通过CSS类控制页面切换与Tab切换,并在内联脚本中实现交互逻辑。页面主要由登录页、仪表盘页、AI智能体页三部分组成,每个页面包含统一的顶部导航栏与各自的内容区。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A["index.html"] --> B["登录页(login-page)"]
|
||||
A --> C["仪表盘页(dashboard-page)"]
|
||||
A --> D["AI智能体页(ai-page)"]
|
||||
C --> E["顶部导航栏(navbar)"]
|
||||
C --> F["内容区(dashboard-content)"]
|
||||
F --> G["Tab导航(tab-nav)"]
|
||||
F --> H["统计卡片网格(stats-grid)"]
|
||||
F --> I["内容卡片(content-card)"]
|
||||
F --> J["项目列表/网格(content-grid/membership-grid/ai-grid/course-grid)"]
|
||||
D --> K["顶部导航栏(navbar)"]
|
||||
D --> L["内容区(ai-content)"]
|
||||
L --> M["搜索与筛选(search-box/industry-filter)"]
|
||||
L --> N["AI卡片网格(ai-grid)"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:1548-2735](file://index.html#L1548-L2735)
|
||||
|
||||
章节来源
|
||||
- [index.html:1548-2735](file://index.html#L1548-L2735)
|
||||
|
||||
## 核心组件
|
||||
- 页面容器与切换
|
||||
- 页面容器类.page与.active控制页面显隐与淡入动画。
|
||||
- JavaScript函数showPage负责切换页面。
|
||||
- 顶部导航栏
|
||||
- Logo系统、主导航菜单、通知系统、用户信息面板。
|
||||
- Tab导航系统
|
||||
- Tab按钮集合与对应内容区,激活状态管理与切换动画。
|
||||
- 统计卡片网格
|
||||
- 四列栅格布局,悬停提升与阴影变化。
|
||||
- 内容卡片与网格
|
||||
- 内容卡片容器、项目网格布局、项目卡片与交互。
|
||||
- 响应式断点
|
||||
- 针对1200px、768px的关键断点,调整网格列数与布局。
|
||||
- AI对话弹窗
|
||||
- 弹窗容器、消息列表、快捷问题、输入与发送。
|
||||
|
||||
章节来源
|
||||
- [index.html:41-49](file://index.html#L41-L49)
|
||||
- [index.html:426-523](file://index.html#L426-L523)
|
||||
- [index.html:544-584](file://index.html#L544-L584)
|
||||
- [index.html:587-633](file://index.html#L587-L633)
|
||||
- [index.html:634-710](file://index.html#L634-L710)
|
||||
- [index.html:1469-1545](file://index.html#L1469-L1545)
|
||||
- [index.html:2411-2446](file://index.html#L2411-L2446)
|
||||
|
||||
## 架构总览
|
||||
仪表盘页面采用“页面级SPA + Tab级SPA”混合架构:
|
||||
- 页面级:登录页、仪表盘页、AI智能体页通过类.page与.active切换。
|
||||
- Tab级:仪表盘页内部的Tab导航用于切换不同业务板块内容。
|
||||
- 交互层:内联脚本集中处理页面切换、Tab切换、用户菜单、行业筛选、AI对话等。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as "用户"
|
||||
participant P as "页面切换(showPage)"
|
||||
participant D as "仪表盘页(dashboard-page)"
|
||||
participant A as "AI页(ai-page)"
|
||||
participant L as "登录页(login-page)"
|
||||
U->>P : 点击导航或登录提交
|
||||
P->>L : 隐藏其他页面
|
||||
P->>D : 显示仪表盘页
|
||||
P->>A : 显示AI页
|
||||
Note over D,A : 页面级切换完成
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:2452-2459](file://index.html#L2452-L2459)
|
||||
- [index.html:1625-1629](file://index.html#L1625-L1629)
|
||||
- [index.html:2232-2236](file://index.html#L2232-L2236)
|
||||
- [index.html:1555-1562](file://index.html#L1555-L1562)
|
||||
|
||||
章节来源
|
||||
- [index.html:2452-2459](file://index.html#L2452-L2459)
|
||||
- [index.html:1625-1629](file://index.html#L1625-L1629)
|
||||
- [index.html:2232-2236](file://index.html#L2232-L2236)
|
||||
- [index.html:1555-1562](file://index.html#L1555-L1562)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 顶部导航栏设计
|
||||
- Logo系统
|
||||
- 左侧Logo区域包含图标与品牌名,采用圆角与渐变背景增强识别度。
|
||||
- 主导航菜单
|
||||
- 中央主导航菜单包含“首页、AI智能体、学习中心、校友社群”,当前页面对应项高亮。
|
||||
- 通知系统
|
||||
- 右侧通知按钮带红点徽标,突出未读状态。
|
||||
- 用户信息面板
|
||||
- 用户头像点击展开下拉菜单,包含用户信息、菜单项与退出登录。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class Navbar {
|
||||
+Logo
|
||||
+NavMenu
|
||||
+Notification
|
||||
+UserDropdown
|
||||
}
|
||||
class NavLogo {
|
||||
+Icon
|
||||
+BrandName
|
||||
}
|
||||
class NavMenu {
|
||||
+NavItem[]
|
||||
+ActiveItem
|
||||
}
|
||||
class Notification {
|
||||
+Badge
|
||||
}
|
||||
class UserDropdown {
|
||||
+Avatar
|
||||
+UserMenu
|
||||
}
|
||||
Navbar --> NavLogo : "包含"
|
||||
Navbar --> NavMenu : "包含"
|
||||
Navbar --> Notification : "包含"
|
||||
Navbar --> UserDropdown : "包含"
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:426-523](file://index.html#L426-L523)
|
||||
|
||||
章节来源
|
||||
- [index.html:426-523](file://index.html#L426-L523)
|
||||
|
||||
### Tab导航系统实现原理
|
||||
- 结构组成
|
||||
- Tab按钮组与对应内容区,每个内容区通过id与按钮关联。
|
||||
- 激活状态管理
|
||||
- showTab函数移除所有按钮与内容的激活类,再为当前Tab设置激活状态。
|
||||
- 切换动画
|
||||
- 内容区使用fadeIn动画,Tab内容切换具备平滑过渡。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as "用户"
|
||||
participant BTN as "Tab按钮"
|
||||
participant TAB as "showTab()"
|
||||
participant CT as "Tab内容区"
|
||||
U->>BTN : 点击Tab按钮
|
||||
BTN->>TAB : 触发showTab(tabId)
|
||||
TAB->>CT : 移除所有激活类
|
||||
TAB->>CT : 为对应内容添加激活类
|
||||
CT-->>U : 显示新内容并播放fadeIn动画
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:2533-2550](file://index.html#L2533-L2550)
|
||||
- [index.html:577-584](file://index.html#L577-L584)
|
||||
|
||||
章节来源
|
||||
- [index.html:2533-2550](file://index.html#L2533-L2550)
|
||||
- [index.html:577-584](file://index.html#L577-L584)
|
||||
|
||||
### 统计卡片网格布局
|
||||
- 设计模式
|
||||
- 四列等宽栅格,卡片统一圆角、阴影与悬停提升效果。
|
||||
- 视觉反馈
|
||||
- 悬停时卡片轻微上浮与阴影增强,提供明确的交互反馈。
|
||||
- 数据密度
|
||||
- 每个卡片包含图标、数值与标签,信息层次清晰。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start(["进入平台概览Tab"]) --> Grid["渲染四列统计网格"]
|
||||
Grid --> Hover{"鼠标悬停卡片?"}
|
||||
Hover --> |是| Lift["卡片上浮 + 阴影增强"]
|
||||
Hover --> |否| Normal["恢复默认样式"]
|
||||
Lift --> Hover
|
||||
Normal --> Hover
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:587-633](file://index.html#L587-L633)
|
||||
|
||||
章节来源
|
||||
- [index.html:587-633](file://index.html#L587-L633)
|
||||
|
||||
### 内容卡片布局策略与项目列表展示
|
||||
- 布局策略
|
||||
- 内容卡片采用统一圆角、阴影与内边距,标题、描述与网格内容分层组织。
|
||||
- 项目列表展示
|
||||
- 使用网格布局展示课程、AI卡片、会员方案、活动与心声等,支持响应式列数调整。
|
||||
- 交互设计
|
||||
- 卡片hover产生位移动画与阴影变化,增强可点击性;按钮与标签提供明确操作入口。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
CC["内容卡片"] --> H2["标题"]
|
||||
CC --> Desc["描述"]
|
||||
CC --> Grid["网格布局"]
|
||||
Grid --> Item["项目卡片"]
|
||||
Item --> Icon["图标"]
|
||||
Item --> Title["标题"]
|
||||
Item --> Text["文本"]
|
||||
Item --> List["列表/特征"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:634-710](file://index.html#L634-L710)
|
||||
- [index.html:824-877](file://index.html#L824-L877)
|
||||
- [index.html:1083-1176](file://index.html#L1083-L1176)
|
||||
- [index.html:1701-1740](file://index.html#L1701-L1740)
|
||||
|
||||
章节来源
|
||||
- [index.html:634-710](file://index.html#L634-L710)
|
||||
- [index.html:824-877](file://index.html#L824-L877)
|
||||
- [index.html:1083-1176](file://index.html#L1083-L1176)
|
||||
- [index.html:1701-1740](file://index.html#L1701-L1740)
|
||||
|
||||
### 响应式断点与移动端适配
|
||||
- 关键断点
|
||||
- 1200px:登录页内容改为纵向堆叠,统计、内容、AI网格列数减少。
|
||||
- 768px:导航菜单隐藏,内容区左右内边距减小,网格列数进一步压缩至1列,Tab横向滚动。
|
||||
- 移动端体验
|
||||
- 弹窗尺寸自适应,输入框随内容自动增高,确保触控友好。
|
||||
- 下拉菜单与行业筛选在移动端保持可点击与可关闭行为。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
View["视口宽度"] --> W1200{"≤ 1200px?"}
|
||||
W1200 --> |是| C1200["登录页堆叠<br/>网格列数减少"]
|
||||
W1200 --> |否| W768{"≤ 768px?"}
|
||||
W768 --> |是| C768["导航隐藏<br/>网格1列<br/>Tab横向滚动"]
|
||||
W768 --> |否| Desktop["桌面端布局"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:1469-1545](file://index.html#L1469-L1545)
|
||||
|
||||
章节来源
|
||||
- [index.html:1469-1545](file://index.html#L1469-L1545)
|
||||
|
||||
### 性能优化建议
|
||||
- 图片与图标
|
||||
- 使用emoji或SVG图标减少HTTP请求,避免外部资源加载阻塞。
|
||||
- 动画与过渡
|
||||
- 合理使用transform与opacity属性触发GPU加速,避免频繁重排。
|
||||
- DOM访问
|
||||
- 将频繁查询的DOM节点缓存,减少重复查询与计算。
|
||||
- 事件委托
|
||||
- 在容器上绑定事件监听,减少事件处理器数量。
|
||||
- 懒加载
|
||||
- 对于长列表或图片,考虑懒加载策略以降低首屏压力。
|
||||
- 缓存策略
|
||||
- 对静态资源启用浏览器缓存,减少重复下载。
|
||||
|
||||
## 依赖关系分析
|
||||
- 页面级依赖
|
||||
- 三个页面共享同一导航栏结构,但内容区不同。
|
||||
- Tab级依赖
|
||||
- 仪表盘页内部的Tab按钮与内容区存在一一对应关系,通过函数参数关联。
|
||||
- 交互依赖
|
||||
- 用户菜单、行业筛选、AI对话弹窗均依赖全局脚本函数与DOM操作。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "页面"
|
||||
LP["登录页(login-page)"]
|
||||
DP["仪表盘页(dashboard-page)"]
|
||||
AP["AI页(ai-page)"]
|
||||
end
|
||||
subgraph "公共组件"
|
||||
NB["导航栏(navbar)"]
|
||||
UM["用户菜单(user-menu)"]
|
||||
IF["行业筛选(industry-filter)"]
|
||||
CM["聊天弹窗(chat-modal)"]
|
||||
end
|
||||
DP --> NB
|
||||
AP --> NB
|
||||
NB --> UM
|
||||
AP --> IF
|
||||
DP --> CM
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:1625-1659](file://index.html#L1625-L1659)
|
||||
- [index.html:2232-2266](file://index.html#L2232-L2266)
|
||||
- [index.html:2411-2446](file://index.html#L2411-L2446)
|
||||
|
||||
章节来源
|
||||
- [index.html:1625-1659](file://index.html#L1625-L1659)
|
||||
- [index.html:2232-2266](file://index.html#L2232-L2266)
|
||||
- [index.html:2411-2446](file://index.html#L2411-L2446)
|
||||
|
||||
## 性能考量
|
||||
- 渲染性能
|
||||
- 使用CSS transform与opacity实现动画,避免影响布局与绘制性能。
|
||||
- 交互性能
|
||||
- 事件监听集中在容器上,减少事件冒泡与捕获成本。
|
||||
- 资源加载
|
||||
- 减少外部依赖,优先使用系统字体与内联样式,缩短关键渲染路径。
|
||||
- 可访问性
|
||||
- 提供键盘导航支持,确保Tab索引顺序合理,按钮具备可聚焦状态。
|
||||
|
||||
## 故障排查指南
|
||||
- 页面无法切换
|
||||
- 检查showPage函数调用是否正确传入页面ID,确认对应元素存在且类名拼写一致。
|
||||
- Tab不生效
|
||||
- 确认showTab函数中按钮与内容区的id匹配,检查active类移除与添加逻辑。
|
||||
- 用户菜单不关闭
|
||||
- 检查closeAllMenus与点击外部关闭逻辑,确保事件监听绑定正确。
|
||||
- 行业筛选无效
|
||||
- 确认filterByIndustry与toggleIndustryMore函数调用,检查下拉菜单开关状态。
|
||||
- 聊天弹窗异常
|
||||
- 检查openChat与closeChat函数,确认模态框类名切换与消息列表初始化。
|
||||
|
||||
章节来源
|
||||
- [index.html:2452-2459](file://index.html#L2452-L2459)
|
||||
- [index.html:2533-2550](file://index.html#L2533-L2550)
|
||||
- [index.html:2510-2522](file://index.html#L2510-L2522)
|
||||
- [index.html:2564-2583](file://index.html#L2564-L2583)
|
||||
- [index.html:2645-2666](file://index.html#L2645-L2666)
|
||||
|
||||
## 结论
|
||||
该仪表盘布局以简洁清晰的栅格系统与统一的视觉语言为核心,结合页面级与Tab级的双层SPA架构,实现了良好的可维护性与扩展性。通过合理的响应式断点与交互细节,兼顾了桌面端与移动端的用户体验。建议在后续迭代中引入更完善的可访问性支持与模块化脚本组织,以进一步提升长期可维护性。
|
||||
|
||||
## 附录
|
||||
- 组件使用规范
|
||||
- 页面切换:使用showPage(pageId),确保页面ID与HTML元素一致。
|
||||
- Tab切换:使用showTab(tabId),按钮文本需与映射表一致。
|
||||
- 用户菜单:通过toggleUserMenu(menuId)控制展开与收起。
|
||||
- 行业筛选:filterByIndustry(btn, industry)与toggleIndustryMore(btn)配合使用。
|
||||
- 聊天弹窗:openChat(name, icon, bgColor)初始化并打开,closeChat()关闭。
|
||||
- 定制化指南
|
||||
- 颜色主题:通过CSS变量统一管理主色、辅助色与阴影,便于主题切换。
|
||||
- 布局密度:根据业务需要调整网格列数与卡片间距,保持视觉平衡。
|
||||
- 动效节奏:统一动画时长与缓动曲线,确保交互一致性。
|
||||
|
||||
章节来源
|
||||
- [index.html:2448-2732](file://index.html#L2448-L2732)
|
||||
364
有维项目/.qoder/repowiki/zh/content/用户界面设计/仪表盘布局/内容区域布局.md
Normal file
364
有维项目/.qoder/repowiki/zh/content/用户界面设计/仪表盘布局/内容区域布局.md
Normal file
@@ -0,0 +1,364 @@
|
||||
# 内容区域布局
|
||||
|
||||
<cite>
|
||||
**本文引用的文件**
|
||||
- [index.html](file://index.html)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构总览](#架构总览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考量](#性能考量)
|
||||
8. [故障排查指南](#故障排查指南)
|
||||
9. [结论](#结论)
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本文件面向UI设计师与前端开发者,系统梳理“有维项目”的内容区域布局设计与实现,重点解析:
|
||||
- 内容卡片网格系统的实现原理与响应式策略
|
||||
- 功能卡片、项目卡片、列表卡片的布局规范与交互设计
|
||||
- 内容区域的排版系统、间距控制与对齐规则
|
||||
- 响应式断点、移动端适配与触摸交互优化
|
||||
- 卡片样式定制指南、主题配置与尺寸调整方案
|
||||
- 可访问性设计、字体排版与色彩对比度考虑
|
||||
|
||||
## 项目结构
|
||||
本项目采用单页应用(SPA)结构,通过页面切换与标签页切换组织内容区域。核心结构如下:
|
||||
- 页面容器:登录页、仪表盘页、AI智能体页
|
||||
- 仪表盘页包含导航栏、Tab导航与多个内容区(概览、教育、AI工具、校友、会员)
|
||||
- AI智能体页包含导航栏、搜索与筛选、卡片网格
|
||||
- 全局样式通过CSS变量统一主题色与阴影,配合媒体查询实现响应式
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A["index.html"] --> B["登录页(login-page)"]
|
||||
A --> C["仪表盘页(dashboard-page)"]
|
||||
A --> D["AI智能体页(ai-page)"]
|
||||
C --> E["导航栏(navbar)"]
|
||||
C --> F["Tab导航(tab-nav)"]
|
||||
C --> G["概览内容区(tab-content#overview)"]
|
||||
C --> H["教育内容区(tab-content#education)"]
|
||||
C --> I["AI工具内容区(tab-content#ai-tools)"]
|
||||
C --> J["校友内容区(tab-content#alumni)"]
|
||||
C --> K["会员内容区(tab-content#membership)"]
|
||||
D --> L["导航栏(navbar)"]
|
||||
D --> M["搜索与筛选(ai-header/industry-filter)"]
|
||||
D --> N["AI卡片网格(ai-grid)"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
章节来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
## 核心组件
|
||||
本节聚焦内容区域的关键组件及其职责:
|
||||
- 页面容器与切换:通过类名切换实现页面显示隐藏与动画过渡
|
||||
- 导航与Tab:主导航与内容区Tab切换,统一交互与视觉反馈
|
||||
- 卡片网格系统:统计卡片、内容卡片、课程卡片、AI卡片、会员卡片、活动卡片、心声卡片等
|
||||
- 响应式断点:针对不同屏幕宽度的网格列数与布局调整
|
||||
|
||||
章节来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
## 架构总览
|
||||
内容区域的布局架构围绕“网格系统 + 主题变量 + 响应式断点”展开,辅以交互脚本完成页面与内容区切换。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "主题与排版"
|
||||
T1["CSS变量(:root)"]
|
||||
T2["字体与行高(body)"]
|
||||
T3["阴影与渐变(阴影/渐变变量)"]
|
||||
end
|
||||
subgraph "页面与容器"
|
||||
P1["登录页(login-page)"]
|
||||
P2["仪表盘页(dashboard-page)"]
|
||||
P3["AI智能体页(ai-page)"]
|
||||
C1["仪表盘内容(dashboard-content)"]
|
||||
C2["AI内容(ai-content)"]
|
||||
end
|
||||
subgraph "网格系统"
|
||||
G1["统计网格(stats-grid)"]
|
||||
G2["内容网格(content-grid)"]
|
||||
G3["课程网格(course-grid)"]
|
||||
G4["AI网格(ai-grid)"]
|
||||
G5["会员网格(membership-grid)"]
|
||||
G6["活动列表(activity-list)"]
|
||||
G7["心声网格(testimonial-grid)"]
|
||||
end
|
||||
subgraph "交互与动画"
|
||||
S1["页面切换(showPage)"]
|
||||
S2["Tab切换(showTab)"]
|
||||
S3["用户菜单(toggleUserMenu/closeAllMenus)"]
|
||||
S4["加载遮罩(login-loading)"]
|
||||
end
|
||||
T1 --> G1
|
||||
T1 --> G2
|
||||
T1 --> G3
|
||||
T1 --> G4
|
||||
T1 --> G5
|
||||
T1 --> G6
|
||||
T1 --> G7
|
||||
T2 --> P2
|
||||
T2 --> P3
|
||||
T3 --> G1
|
||||
T3 --> G2
|
||||
T3 --> G3
|
||||
T3 --> G4
|
||||
T3 --> G5
|
||||
T3 --> G6
|
||||
T3 --> G7
|
||||
P1 --> S4
|
||||
P2 --> C1
|
||||
P3 --> C2
|
||||
C1 --> G1
|
||||
C1 --> G2
|
||||
C1 --> G3
|
||||
C1 --> G4
|
||||
C1 --> G5
|
||||
C1 --> G6
|
||||
C1 --> G7
|
||||
C2 --> G4
|
||||
S1 --> P1
|
||||
S1 --> P2
|
||||
S1 --> P3
|
||||
S2 --> G1
|
||||
S2 --> G2
|
||||
S2 --> G3
|
||||
S2 --> G4
|
||||
S2 --> G5
|
||||
S2 --> G6
|
||||
S2 --> G7
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 网格系统与卡片类型
|
||||
- 统计卡片网格(stats-grid)
|
||||
- 规则:固定4列栅格,列间距与卡片内边距统一,悬停提升与阴影增强
|
||||
- 适用:平台概览中的指标展示
|
||||
- 内容卡片网格(content-grid)
|
||||
- 规则:默认3列,卡片内含图标、标题、描述与列表;hover轻微上移
|
||||
- 适用:三大业务板块(教育/AI/校友)的功能概览
|
||||
- 课程卡片网格(course-grid)
|
||||
- 规则:默认4列,卡片内含图标、标题、描述与元信息(时长/人数)
|
||||
- 适用:课程体系展示与学习路径
|
||||
- AI卡片网格(ai-grid)
|
||||
- 规则:默认3列,卡片含头像、标签、特性标签与操作按钮;hover提升与边框强调
|
||||
- 适用:AI智能体门户
|
||||
- 会员卡片网格(membership-grid)
|
||||
- 规则:默认3列,推荐卡片带徽章与渐变背景;hover提升与阴影增强
|
||||
- 适用:会员体系对比
|
||||
- 活动列表(activity-list)
|
||||
- 规则:垂直列表,每项含日期、信息与标签;hover向右平移
|
||||
- 适用:近期活动展示
|
||||
- 心声网格(testimonial-grid)
|
||||
- 规则:2列网格,卡片内含引号文本与作者信息
|
||||
- 适用:校友评价展示
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class StatsGrid {
|
||||
+grid-template-columns : 4
|
||||
+gap : 24px
|
||||
+hover : 提升+阴影
|
||||
}
|
||||
class ContentGrid {
|
||||
+grid-template-columns : 3
|
||||
+gap : 24px
|
||||
+item : 图标+标题+描述+列表
|
||||
+hover : 轻微上移
|
||||
}
|
||||
class CourseGrid {
|
||||
+grid-template-columns : 4
|
||||
+gap : 20px
|
||||
+item : 图标+标题+描述+元信息
|
||||
+hover : 提升+阴影
|
||||
}
|
||||
class AiGrid {
|
||||
+grid-template-columns : 3
|
||||
+gap : 24px
|
||||
+item : 头像+标签+特性+按钮
|
||||
+hover : 提升+边框强调
|
||||
}
|
||||
class MembershipGrid {
|
||||
+grid-template-columns : 3
|
||||
+gap : 24px
|
||||
+item : 标题+价格+描述+列表
|
||||
+recommended : 徽章+渐变背景
|
||||
+hover : 提升+阴影
|
||||
}
|
||||
class ActivityList {
|
||||
+flex-direction : column
|
||||
+item : 日期+信息+标签
|
||||
+hover : 向右平移
|
||||
}
|
||||
class TestimonialGrid {
|
||||
+grid-template-columns : 2
|
||||
+gap : 24px
|
||||
+item : 引号文本+作者信息
|
||||
}
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
章节来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
### 响应式布局策略
|
||||
- 大屏(≥1200px)
|
||||
- 登录页内容改为纵向排列
|
||||
- 功能卡片网格:3列
|
||||
- 统计卡片网格:2列
|
||||
- 内容卡片网格:2列
|
||||
- AI卡片网格:2列
|
||||
- 中屏(≤1200px)
|
||||
- 功能卡片网格:3列
|
||||
- 统计卡片网格:2列
|
||||
- 内容卡片网格:2列
|
||||
- AI卡片网格:2列
|
||||
- 小屏(≤768px)
|
||||
- 登录页内容:减少内边距,表单宽度自适应
|
||||
- 导航菜单隐藏,侧边栏简化
|
||||
- 统计卡片网格:1列
|
||||
- 内容/会员/AI卡片网格:1列
|
||||
- 课程网格:2列
|
||||
- Tab导航:横向滚动
|
||||
- 聊天窗口:尺寸适配移动设备
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start(["进入页面"]) --> Viewport["检测视口宽度"]
|
||||
Viewport --> Large{"≥1200px?"}
|
||||
Large --> |是| LargeLayout["大屏布局<br/>网格列数按规则设置"]
|
||||
Large --> |否| Medium{"≤768px?"}
|
||||
Medium --> |是| SmallLayout["小屏布局<br/>网格列数降级为1列<br/>登录页自适应宽度"]
|
||||
Medium --> |否| MediumLayout["中屏布局<br/>网格列数适度压缩"]
|
||||
LargeLayout --> End(["渲染完成"])
|
||||
MediumLayout --> End
|
||||
SmallLayout --> End
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
章节来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
### 排版系统、间距控制与对齐规则
|
||||
- 字体与行高
|
||||
- 全局字体族与行高统一,确保阅读舒适度
|
||||
- 标题层级
|
||||
- 页面标题、卡片标题、子标题采用明确字号与字重,形成清晰的视觉层级
|
||||
- 间距控制
|
||||
- 卡片间外边距、网格间隙、内边距均以统一变量控制,保证一致性
|
||||
- 对齐规则
|
||||
- 居中、两端对齐、左对齐在不同容器中分场景使用,保持信息密度与可读性的平衡
|
||||
|
||||
章节来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
### 交互设计与动画
|
||||
- 页面切换与Tab切换
|
||||
- 使用类名切换与淡入动画,避免闪烁
|
||||
- 卡片悬停
|
||||
- 提升与阴影变化,提供明确的交互反馈
|
||||
- 下拉菜单与筛选
|
||||
- 缩放入场动画,点击外部区域自动关闭
|
||||
- 加载遮罩
|
||||
- 渐变背景与旋转动画,提升等待体验
|
||||
|
||||
章节来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
### 可访问性与色彩对比度
|
||||
- 色彩体系
|
||||
- 主色、辅助色、强调色与背景色通过CSS变量统一管理,便于主题切换
|
||||
- 文字对比度
|
||||
- 文本颜色与背景色满足基本对比度要求,确保可读性
|
||||
- 交互元素
|
||||
- 悬停与焦点状态明确,键盘可达性良好(结合现有交互)
|
||||
|
||||
章节来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
## 依赖关系分析
|
||||
- 样式依赖
|
||||
- 所有组件依赖于CSS变量定义的主题色与阴影
|
||||
- 响应式断点依赖于媒体查询
|
||||
- 脚本依赖
|
||||
- 页面切换与Tab切换依赖DOM节点选择与类名操作
|
||||
- 下拉菜单与筛选依赖事件监听与状态管理
|
||||
- 数据流
|
||||
- 登录成功后更新用户显示信息,随后切换页面
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as "用户"
|
||||
participant JS as "脚本"
|
||||
participant DOM as "DOM"
|
||||
participant Page as "页面"
|
||||
U->>JS : 输入账号密码并提交
|
||||
JS->>DOM : 显示加载遮罩
|
||||
JS->>JS : 验证输入
|
||||
JS->>DOM : 隐藏加载遮罩
|
||||
JS->>DOM : 更新用户显示
|
||||
JS->>Page : 切换到仪表盘页
|
||||
Note over JS,Page : 页面切换与Tab切换由脚本控制
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
章节来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
## 性能考量
|
||||
- 样式层面
|
||||
- 使用CSS变量减少重复定义,降低维护成本
|
||||
- 合理使用box-shadow与transform,避免强制重排
|
||||
- 交互层面
|
||||
- 下拉菜单与筛选使用缩放动画,避免复杂布局抖动
|
||||
- 响应式断点仅在必要时改变网格列数,减少重绘
|
||||
- 资源层面
|
||||
- 图标以emoji或小尺寸背景图实现,避免额外资源请求
|
||||
|
||||
## 故障排查指南
|
||||
- 页面无法切换
|
||||
- 检查页面ID是否正确,确认脚本中showPage调用的目标ID存在
|
||||
- Tab内容未显示
|
||||
- 检查Tab按钮与内容区ID是否一致,确认active类名切换逻辑
|
||||
- 下拉菜单不关闭
|
||||
- 检查点击外部关闭逻辑是否绑定到document,确认closeAllMenus被调用
|
||||
- 响应式异常
|
||||
- 检查媒体查询断点与网格列数设置,确认浏览器视口尺寸触发预期断点
|
||||
- 卡片悬停无效果
|
||||
- 检查hover样式是否被覆盖,确认CSS变量值正确
|
||||
|
||||
章节来源
|
||||
- [index.html](file://index.html)
|
||||
|
||||
## 结论
|
||||
本项目的内容区域布局以网格系统为核心,结合统一的主题变量与响应式断点,实现了跨设备的一致体验。通过卡片化的内容组织与明确的交互反馈,既满足了信息密度的需求,也兼顾了可用性与可访问性。建议在后续迭代中进一步完善无障碍属性与键盘导航,并持续优化移动端交互细节。
|
||||
|
||||
## 附录
|
||||
- 主题变量清单(摘自CSS变量)
|
||||
- 主色、主色浅/深、辅助色、强调色、背景色、卡片背景、文本主/次色、边框色
|
||||
- 渐变色1/2、阴影变量(sm/md/lg/xl)
|
||||
- 常用间距与尺寸
|
||||
- 卡片圆角、内边距、网格间隙、卡片图标尺寸、头像尺寸等
|
||||
- 媒体查询断点
|
||||
- ≥1200px、≤768px两个主要断点下的网格列数与布局调整
|
||||
|
||||
章节来源
|
||||
- [index.html](file://index.html)
|
||||
393
有维项目/.qoder/repowiki/zh/content/用户界面设计/仪表盘布局/导航系统设计.md
Normal file
393
有维项目/.qoder/repowiki/zh/content/用户界面设计/仪表盘布局/导航系统设计.md
Normal file
@@ -0,0 +1,393 @@
|
||||
# 导航系统设计
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [index.html](file://index.html)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构总览](#架构总览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本设计文档面向有维项目的导航系统,聚焦顶部导航栏的完整架构与实现细节,包括:
|
||||
- Logo系统设计与品牌一致性
|
||||
- 主导航菜单布局与交互
|
||||
- 通知系统实现与视觉反馈
|
||||
- 用户信息面板与下拉菜单
|
||||
- 导航项激活状态管理机制
|
||||
- 悬停效果与过渡动画
|
||||
- 响应式设计与粘性定位
|
||||
- 层级管理与可访问性设计
|
||||
- 样式定制化指南与性能优化建议
|
||||
|
||||
## 项目结构
|
||||
有维项目采用单页应用(SPA)结构,导航系统位于页面顶部,贯穿登录页与仪表盘页。导航由三大部分组成:左侧Logo区、中间主导航菜单、右侧用户信息区(通知按钮与用户头像下拉菜单)。页面切换通过JavaScript控制,导航状态随页面变化而更新。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A["index.html"] --> B["样式层<br/>CSS变量与动画"]
|
||||
A --> C["导航容器<br/>.navbar"]
|
||||
C --> D["Logo区<br/>.nav-logo"]
|
||||
C --> E["主导航菜单<br/>.nav-menu/.nav-item"]
|
||||
C --> F["用户信息区<br/>.nav-user"]
|
||||
F --> G["通知按钮<br/>.nav-notification"]
|
||||
F --> H["用户头像<br/>.user-avatar"]
|
||||
H --> I["用户下拉菜单<br/>.user-menu"]
|
||||
A --> J["脚本层<br/>导航与页面切换逻辑"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:426-487](file://index.html#L426-L487)
|
||||
- [index.html:1627-1659](file://index.html#L1627-L1659)
|
||||
- [index.html:2234-2266](file://index.html#L2234-L2266)
|
||||
|
||||
章节来源
|
||||
- [index.html:426-487](file://index.html#L426-L487)
|
||||
- [index.html:1627-1659](file://index.html#L1627-L1659)
|
||||
- [index.html:2234-2266](file://index.html#L2234-L2266)
|
||||
|
||||
## 核心组件
|
||||
- Logo系统:统一的品牌标识,包含图标与文字,确保在不同页面保持一致的视觉识别。
|
||||
- 主导航菜单:包含多个导航项,支持悬停高亮与激活状态切换。
|
||||
- 通知系统:圆形徽标带红色小圆点,用于提示未读消息或重要事项。
|
||||
- 用户信息面板:用户头像点击展开下拉菜单,包含用户信息与操作项(如会员中心、账户设置、退出登录)。
|
||||
- 页面切换与状态管理:通过JavaScript控制页面显示与导航项激活状态,支持跨页面的一致交互体验。
|
||||
|
||||
章节来源
|
||||
- [index.html:185-204](file://index.html#L185-L204)
|
||||
- [index.html:438-457](file://index.html#L438-L457)
|
||||
- [index.html:459-481](file://index.html#L459-L481)
|
||||
- [index.html:489-522](file://index.html#L489-L522)
|
||||
- [index.html:1632-1637](file://index.html#L1632-L1637)
|
||||
- [index.html:2239-2244](file://index.html#L2239-L2244)
|
||||
|
||||
## 架构总览
|
||||
导航系统采用“结构-样式-行为”三层分离:
|
||||
- 结构:HTML语义化标签与类名组织,保证可读性与可维护性。
|
||||
- 样式:CSS变量定义主题色与阴影,动画与过渡增强交互体验。
|
||||
- 行为:JavaScript负责页面切换、菜单开关、状态同步与事件绑定。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as "用户"
|
||||
participant N as "导航栏"
|
||||
participant S as "脚本层"
|
||||
participant P as "页面容器"
|
||||
U->>N : 点击导航项
|
||||
N->>S : 触发onclick回调
|
||||
S->>P : 隐藏所有页面
|
||||
S->>P : 显示目标页面
|
||||
S->>N : 更新导航项激活状态
|
||||
N-->>U : 展示新页面与激活状态
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:2453-2459](file://index.html#L2453-L2459)
|
||||
- [index.html:1633](file://index.html#L1633)
|
||||
- [index.html:2240](file://index.html#L2240)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### Logo系统设计
|
||||
- 设计要点
|
||||
- 图标与文字组合,图标采用圆角矩形背景与品牌主色渐变,文字采用品牌主字体与字号。
|
||||
- 在登录页与仪表盘页均保持一致的Logo样式,确保品牌一致性。
|
||||
- 可定制化
|
||||
- 通过CSS变量调整图标尺寸、圆角半径、背景色与文字颜色。
|
||||
- 支持替换图标内容与品牌文案,满足不同版本需求。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class Logo {
|
||||
+图标元素
|
||||
+文字元素
|
||||
+品牌配色
|
||||
+圆角设计
|
||||
}
|
||||
class LoginHeader {
|
||||
+Logo容器
|
||||
}
|
||||
class Navbar {
|
||||
+Logo容器
|
||||
}
|
||||
LoginHeader --> Logo : "包含"
|
||||
Navbar --> Logo : "包含"
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:185-204](file://index.html#L185-L204)
|
||||
- [index.html:438-457](file://index.html#L438-L457)
|
||||
- [index.html:1557-1562](file://index.html#L1557-L1562)
|
||||
- [index.html:1628-1631](file://index.html#L1628-L1631)
|
||||
|
||||
章节来源
|
||||
- [index.html:185-204](file://index.html#L185-L204)
|
||||
- [index.html:438-457](file://index.html#L438-L457)
|
||||
- [index.html:1557-1562](file://index.html#L1557-L1562)
|
||||
- [index.html:1628-1631](file://index.html#L1628-L1631)
|
||||
|
||||
### 主导航菜单布局与交互
|
||||
- 布局
|
||||
- 居中对齐,采用flex布局,间距统一,圆角与过渡动画提升交互质感。
|
||||
- 激活状态管理
|
||||
- 使用active类控制当前页面对应的导航项高亮,切换页面时动态更新。
|
||||
- 悬停效果
|
||||
- hover状态下背景色与文字色变化,提供即时反馈。
|
||||
- 交互流程
|
||||
- 点击导航项触发页面切换,并同步更新导航项激活状态。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start(["点击导航项"]) --> HidePages["隐藏所有页面"]
|
||||
HidePages --> ShowTarget["显示目标页面"]
|
||||
ShowTarget --> UpdateActive["更新导航项激活状态"]
|
||||
UpdateActive --> End(["完成"])
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:459-481](file://index.html#L459-L481)
|
||||
- [index.html:2453-2459](file://index.html#L2453-L2459)
|
||||
- [index.html:1633](file://index.html#L1633)
|
||||
- [index.html:2240](file://index.html#L2240)
|
||||
|
||||
章节来源
|
||||
- [index.html:459-481](file://index.html#L459-L481)
|
||||
- [index.html:2453-2459](file://index.html#L2453-L2459)
|
||||
- [index.html:1632-1637](file://index.html#L1632-L1637)
|
||||
- [index.html:2239-2244](file://index.html#L2239-L2244)
|
||||
|
||||
### 通知系统实现
|
||||
- 视觉设计
|
||||
- 圆形按钮,带红色小圆点徽章,突出未读状态。
|
||||
- 交互行为
|
||||
- 点击通知按钮可触发相应动作(如跳转至通知页面),当前实现为占位交互。
|
||||
- 动画与过渡
|
||||
- 使用CSS过渡属性实现平滑的悬停与点击反馈。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class NotificationButton {
|
||||
+圆形按钮
|
||||
+徽章标记
|
||||
+悬停过渡
|
||||
+点击交互
|
||||
}
|
||||
class Badge {
|
||||
+红色圆点
|
||||
+绝对定位
|
||||
}
|
||||
NotificationButton --> Badge : "徽章"
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:489-510](file://index.html#L489-L510)
|
||||
- [index.html:1639](file://index.html#L1639)
|
||||
- [index.html:2246](file://index.html#L2246)
|
||||
|
||||
章节来源
|
||||
- [index.html:489-510](file://index.html#L489-L510)
|
||||
- [index.html:1639](file://index.html#L1639)
|
||||
- [index.html:2246](file://index.html#L2246)
|
||||
|
||||
### 用户信息面板与下拉菜单
|
||||
- 用户头像
|
||||
- 圆形头像,背景采用品牌渐变色,显示用户首字母作为占位头像。
|
||||
- 下拉菜单
|
||||
- 点击头像展开菜单,包含用户信息与操作项;点击外部区域自动关闭。
|
||||
- 操作项
|
||||
- 会员中心、账户设置、退出登录等常用功能入口。
|
||||
- 动画与层级
|
||||
- 使用scaleIn动画展开菜单,z-index确保在页面层级中处于上层。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as "用户"
|
||||
participant A as "用户头像"
|
||||
participant M as "用户菜单"
|
||||
U->>A : 点击头像
|
||||
A->>M : 切换active状态
|
||||
M-->>U : 展示菜单项
|
||||
U->>M : 点击菜单项
|
||||
M-->>U : 执行操作并关闭菜单
|
||||
U->>document : 点击页面其他区域
|
||||
document->>M : 关闭菜单
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:511-522](file://index.html#L511-L522)
|
||||
- [index.html:106-126](file://index.html#L106-L126)
|
||||
- [index.html:1640-1657](file://index.html#L1640-L1657)
|
||||
- [index.html:2247-2264](file://index.html#L2247-L2264)
|
||||
|
||||
章节来源
|
||||
- [index.html:511-522](file://index.html#L511-L522)
|
||||
- [index.html:106-126](file://index.html#L106-L126)
|
||||
- [index.html:1640-1657](file://index.html#L1640-L1657)
|
||||
- [index.html:2247-2264](file://index.html#L2247-L2264)
|
||||
|
||||
### 激活状态管理机制
|
||||
- 页面切换时,脚本层遍历所有页面并移除active类,为目标页面添加active类。
|
||||
- 同步更新导航项的激活状态,确保视觉一致性。
|
||||
- Tab切换同样遵循相同机制,通过按钮与内容块的对应关系实现状态同步。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Click["点击Tab按钮"] --> RemoveActive["移除所有按钮active类"]
|
||||
RemoveActive --> HideAll["隐藏所有内容块"]
|
||||
HideAll --> ShowTarget["显示目标内容块"]
|
||||
ShowTarget --> AddActive["为目标按钮添加active类"]
|
||||
AddActive --> Done["完成"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:2534-2550](file://index.html#L2534-L2550)
|
||||
- [index.html:1668-1674](file://index.html#L1668-L1674)
|
||||
|
||||
章节来源
|
||||
- [index.html:2534-2550](file://index.html#L2534-L2550)
|
||||
- [index.html:1668-1674](file://index.html#L1668-L1674)
|
||||
|
||||
### 悬停效果与过渡动画
|
||||
- 导航项与菜单项在hover时改变背景色与文字色,提供即时反馈。
|
||||
- 下拉菜单使用scaleIn动画,配合z-index确保层级正确。
|
||||
- 页面切换与模态框采用淡入与滑动动画,提升用户体验。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Hover["鼠标悬停"] --> ChangeColor["背景色/文字色变化"]
|
||||
ChangeColor --> Transition["过渡动画"]
|
||||
Transition --> Feedback["用户反馈"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:473-476](file://index.html#L473-L476)
|
||||
- [index.html:154-156](file://index.html#L154-L156)
|
||||
- [index.html:1207-1210](file://index.html#L1207-L1210)
|
||||
|
||||
章节来源
|
||||
- [index.html:473-476](file://index.html#L473-L476)
|
||||
- [index.html:154-156](file://index.html#L154-L156)
|
||||
- [index.html:1207-1210](file://index.html#L1207-L1210)
|
||||
|
||||
### 响应式设计与粘性定位
|
||||
- 粘性定位
|
||||
- 导航栏使用sticky定位,top为0,确保滚动时始终固定在顶部。
|
||||
- 响应式布局
|
||||
- 在768px以下断点,主导航菜单隐藏,移动端适配更简洁的布局。
|
||||
- 在1200px以下断点,网格布局自适应列数,保证内容可读性。
|
||||
- 层级管理
|
||||
- 导航栏z-index较高,确保在页面滚动时不会被其他元素遮挡。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Viewport["视口宽度"] --> Mobile{"<= 768px?"}
|
||||
Mobile --> |是| HideMenu["隐藏主导航菜单"]
|
||||
Mobile --> |否| Desktop["保持主导航菜单"]
|
||||
Viewport --> Tablet{"<= 1200px?"}
|
||||
Tablet --> |是| GridAdjust["网格列数调整"]
|
||||
Tablet --> |否| FullGrid["全宽网格"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:1510-1516](file://index.html#L1510-L1516)
|
||||
- [index.html:1492-1545](file://index.html#L1492-L1545)
|
||||
- [index.html:433-436](file://index.html#L433-L436)
|
||||
|
||||
章节来源
|
||||
- [index.html:1510-1516](file://index.html#L1510-L1516)
|
||||
- [index.html:1492-1545](file://index.html#L1492-L1545)
|
||||
- [index.html:433-436](file://index.html#L433-L436)
|
||||
|
||||
### 可访问性设计
|
||||
- 语义化结构
|
||||
- 使用nav、button等语义化标签,便于辅助技术识别。
|
||||
- 键盘导航
|
||||
- 导航项与按钮具备可聚焦性,可通过Tab键导航,Enter键触发。
|
||||
- 屏幕阅读器兼容
|
||||
- 文字与图标结合,提供清晰的视觉与语义信息;徽章用于传达状态(如未读消息)。
|
||||
|
||||
章节来源
|
||||
- [index.html:459-481](file://index.html#L459-L481)
|
||||
- [index.html:2718-2724](file://index.html#L2718-L2724)
|
||||
|
||||
### 样式定制化指南
|
||||
- 主题色与变量
|
||||
- 通过CSS变量统一管理主色、辅色、背景色、阴影等,便于全局主题切换。
|
||||
- 尺寸调整
|
||||
- 导航高度、内边距、圆角半径、字体大小等均可通过变量与类名调整。
|
||||
- 动画参数
|
||||
- 过渡时长、缓动函数、动画时序等可在CSS中集中修改,确保一致性。
|
||||
|
||||
章节来源
|
||||
- [index.html:14-31](file://index.html#L14-L31)
|
||||
- [index.html:426-487](file://index.html#L426-L487)
|
||||
|
||||
## 依赖关系分析
|
||||
导航系统依赖于以下关键要素:
|
||||
- HTML结构:导航容器、Logo、菜单项、用户头像与下拉菜单。
|
||||
- CSS样式:主题变量、动画与响应式断点。
|
||||
- JavaScript:页面切换、菜单开关、状态同步与事件绑定。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
HTML["HTML结构"] --> CSS["CSS样式"]
|
||||
HTML --> JS["JavaScript行为"]
|
||||
CSS --> JS
|
||||
JS --> HTML
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:426-487](file://index.html#L426-L487)
|
||||
- [index.html:2448-2732](file://index.html#L2448-L2732)
|
||||
|
||||
章节来源
|
||||
- [index.html:426-487](file://index.html#L426-L487)
|
||||
- [index.html:2448-2732](file://index.html#L2448-L2732)
|
||||
|
||||
## 性能考虑
|
||||
- 减少重绘与回流
|
||||
- 使用transform与opacity而非改变布局属性触发动画。
|
||||
- 合理使用CSS变量,避免频繁计算与样式抖动。
|
||||
- 事件委托
|
||||
- 使用document级事件监听减少重复绑定,提高事件处理性能。
|
||||
- 懒加载与按需渲染
|
||||
- 下拉菜单与模态框采用条件渲染,仅在需要时加载DOM节点。
|
||||
- 缓存与复用
|
||||
- 复用CSS动画与过渡,避免重复定义相同效果。
|
||||
|
||||
## 故障排除指南
|
||||
- 下拉菜单无法关闭
|
||||
- 检查点击外部区域的事件监听是否生效,确认closeAllMenus调用链。
|
||||
- 导航项状态不同步
|
||||
- 确认页面切换后是否正确移除其他按钮的active类并为目标按钮添加。
|
||||
- 响应式布局异常
|
||||
- 检查媒体查询断点与元素display属性,确保在目标分辨率下生效。
|
||||
- 动画卡顿
|
||||
- 检查transform与opacity使用情况,避免在动画过程中触发布局计算。
|
||||
|
||||
章节来源
|
||||
- [index.html:2511-2522](file://index.html#L2511-L2522)
|
||||
- [index.html:2534-2550](file://index.html#L2534-L2550)
|
||||
- [index.html:1492-1545](file://index.html#L1492-L1545)
|
||||
- [index.html:1207-1210](file://index.html#L1207-L1210)
|
||||
|
||||
## 结论
|
||||
有维项目的导航系统通过清晰的结构、统一的主题与流畅的交互,实现了品牌一致性与良好的用户体验。其激活状态管理、悬停效果与过渡动画、响应式设计与粘性定位,以及可访问性与性能优化,共同构成了一个可扩展、易维护的导航体系。建议在后续迭代中进一步完善键盘导航与无障碍支持,并持续优化动画性能与交互反馈。
|
||||
|
||||
## 附录
|
||||
- 代码片段路径
|
||||
- 导航容器与样式:[index.html:426-487](file://index.html#L426-L487)
|
||||
- Logo与导航项:[index.html:185-204](file://index.html#L185-L204)、[index.html:438-481](file://index.html#L438-L481)
|
||||
- 用户下拉菜单:[index.html:106-126](file://index.html#L106-L126)、[index.html:1640-1657](file://index.html#L1640-L1657)
|
||||
- 页面切换与状态管理:[index.html:2453-2459](file://index.html#L2453-L2459)、[index.html:2534-2550](file://index.html#L2534-L2550)
|
||||
- 响应式断点:[index.html:1492-1545](file://index.html#L1492-L1545)
|
||||
- 动画与过渡:[index.html:51-64](file://index.html#L51-L64)、[index.html:1207-1210](file://index.html#L1207-L1210)
|
||||
323
有维项目/.qoder/repowiki/zh/content/用户界面设计/仪表盘布局/统计卡片设计.md
Normal file
323
有维项目/.qoder/repowiki/zh/content/用户界面设计/仪表盘布局/统计卡片设计.md
Normal file
@@ -0,0 +1,323 @@
|
||||
# 统计卡片设计
|
||||
|
||||
<cite>
|
||||
**本文引用的文件**
|
||||
- [index.html](file://index.html)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构总览](#架构总览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排查指南](#故障排查指南)
|
||||
9. [结论](#结论)
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本设计文档聚焦于“有维项目”的统计卡片系统,围绕统计卡片网格布局、响应式断点与视觉层次组织展开;同时对三类卡片设计模式(数据展示卡片、指标统计卡片、状态指示卡片)进行规范说明,并系统阐述交互设计(悬停、点击反馈、动画过渡、视觉引导)、颜色系统与图标设计、数据可视化原则、定制化指南、数据绑定与动态更新机制,以及性能优化、懒加载策略与内存管理建议。文档旨在为设计师与开发者提供统一、可落地的设计参考与实现指南。
|
||||
|
||||
## 项目结构
|
||||
本项目采用单页应用结构,统计卡片主要位于仪表盘页面的“平台概览”Tab中,采用CSS Grid实现网格布局,并通过媒体查询在不同屏幕尺寸下自适应调整列数与间距。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A["index.html<br/>主入口"] --> B["仪表盘页面<br/>.dashboard-page"]
|
||||
B --> C["Tab导航<br/>.tab-nav"]
|
||||
C --> D["平台概览Tab<br/>.tab-content#overview"]
|
||||
D --> E["统计卡片网格<br/>.stats-grid"]
|
||||
E --> F["统计卡片<br/>.stat-card"]
|
||||
F --> G["图标容器<br/>.stat-icon"]
|
||||
F --> H["数值展示<br/>.stat-value"]
|
||||
F --> I["标签说明<br/>.stat-label"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:1626-1741](file://index.html#L1626-L1741)
|
||||
|
||||
章节来源
|
||||
- [index.html:1626-1741](file://index.html#L1626-L1741)
|
||||
|
||||
## 核心组件
|
||||
- 统计卡片网格(.stats-grid)
|
||||
- 使用CSS Grid实现,初始为4列,通过媒体查询在小屏设备上减少列数,保证信息密度与可读性。
|
||||
- 统计卡片(.stat-card)
|
||||
- 卡片容器,包含图标、数值与标签三要素,具备悬停提升与阴影增强的交互反馈。
|
||||
- 图标容器(.stat-icon)
|
||||
- 固定尺寸圆角矩形,内置图标,按主题色区分不同业务域。
|
||||
- 数值展示(.stat-value)
|
||||
- 大号粗体数字,强调关键指标。
|
||||
- 标签说明(.stat-label)
|
||||
- 小号辅助文本,解释数值含义。
|
||||
|
||||
章节来源
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
|
||||
## 架构总览
|
||||
统计卡片系统由“布局层(Grid)—卡片层(Card)—内容层(Icon/Value/Label)”三层构成,配合CSS变量与媒体查询实现主题与响应式一致性。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "布局层"
|
||||
S1[".stats-grid<br/>Grid容器"]
|
||||
end
|
||||
subgraph "卡片层"
|
||||
C1[".stat-card<br/>卡片容器"]
|
||||
C2[".stat-card:hover<br/>悬停态"]
|
||||
end
|
||||
subgraph "内容层"
|
||||
I1[".stat-icon<br/>图标容器"]
|
||||
V1[".stat-value<br/>数值"]
|
||||
L1[".stat-label<br/>标签"]
|
||||
end
|
||||
S1 --> C1
|
||||
C1 --> I1
|
||||
C1 --> V1
|
||||
C1 --> L1
|
||||
C1 -.-> C2
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 统计卡片网格布局
|
||||
- 初始布局:4列等宽网格,列间距与行间距均为固定像素值,确保视觉对齐。
|
||||
- 响应式断点:
|
||||
- 宽度小于等于1200px:网格改为2列,适配中屏设备。
|
||||
- 宽度小于等于768px:网格改为1列,保证移动端阅读体验。
|
||||
- 视觉层次:卡片具备圆角、浅阴影与悬停提升效果,形成层级感与交互反馈。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start(["进入平台概览Tab"]) --> Init["初始化统计网格<br/>4列布局"]
|
||||
Init --> CheckWidth{"屏幕宽度"}
|
||||
CheckWidth --> |<= 768px| OneCol["1列网格"]
|
||||
CheckWidth --> |<= 1200px & > 768px| TwoCol["2列网格"]
|
||||
CheckWidth --> |> 1200px| FourCol["4列网格"]
|
||||
OneCol --> Render["渲染卡片"]
|
||||
TwoCol --> Render
|
||||
FourCol --> Render
|
||||
Render --> Hover["悬停提升与阴影增强"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:1469-1545](file://index.html#L1469-L1545)
|
||||
- [index.html:1677-1699](file://index.html#L1677-L1699)
|
||||
|
||||
章节来源
|
||||
- [index.html:1469-1545](file://index.html#L1469-L1545)
|
||||
- [index.html:1677-1699](file://index.html#L1677-L1699)
|
||||
|
||||
### 数据展示卡片
|
||||
- 设计要点
|
||||
- 图标:使用语义明确的表情符号或图标,颜色与业务域一致。
|
||||
- 数值:采用大字号与高权重字体,突出关键信息。
|
||||
- 标签:简洁描述数值含义,避免冗长。
|
||||
- 交互反馈:悬停时卡片轻微上移并增强阴影,提供触控与视觉反馈。
|
||||
- 颜色系统:图标背景色与主题色保持一致,确保品牌一致性。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class StatCard {
|
||||
+图标容器(.stat-icon)
|
||||
+数值(.stat-value)
|
||||
+标签(.stat-label)
|
||||
+悬停效果(.stat-card : hover)
|
||||
}
|
||||
class Icon {
|
||||
+固定尺寸
|
||||
+圆角背景
|
||||
+主题色系
|
||||
}
|
||||
class Value {
|
||||
+大字号
|
||||
+高权重
|
||||
}
|
||||
class Label {
|
||||
+小字号
|
||||
+辅助说明
|
||||
}
|
||||
StatCard --> Icon : "包含"
|
||||
StatCard --> Value : "包含"
|
||||
StatCard --> Label : "包含"
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
|
||||
章节来源
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
|
||||
### 指标统计卡片
|
||||
- 设计要点
|
||||
- 数值单位与格式:如“2000+”等聚合指标,需在标签中明确单位或范围。
|
||||
- 可视化原则:优先使用清晰的数字与简短标签,避免复杂图表。
|
||||
- 交互设计:悬停提升与阴影变化,增强点击预期。
|
||||
- 响应式适配:在窄屏下保持紧凑布局,必要时隐藏次要信息。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as "用户"
|
||||
participant C as ".stat-card"
|
||||
participant G as ".stats-grid"
|
||||
U->>C : "鼠标悬停"
|
||||
C->>C : "transform : translateY(-4px)"
|
||||
C->>C : "box-shadow : var(--shadow-md)"
|
||||
U->>G : "屏幕尺寸变化"
|
||||
G->>G : "媒体查询切换列数"
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
- [index.html:1469-1545](file://index.html#L1469-L1545)
|
||||
|
||||
章节来源
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
- [index.html:1469-1545](file://index.html#L1469-L1545)
|
||||
|
||||
### 状态指示卡片
|
||||
- 设计要点
|
||||
- 使用语义化图标与颜色表达状态(如成功、警告、错误),但本项目未直接出现状态卡片示例。
|
||||
- 若扩展状态卡片,建议结合图标、颜色与标签共同传达状态含义。
|
||||
- 交互设计:与数据展示卡片一致,保持统一的悬停与阴影反馈。
|
||||
|
||||
(本节为概念性说明,不直接分析具体源码)
|
||||
|
||||
### 交互设计
|
||||
- 悬停效果:卡片轻微上移与阴影增强,提供触控与视觉反馈。
|
||||
- 点击反馈:卡片具备可点击区域,结合Tab切换与页面跳转实现导航。
|
||||
- 动画过渡:使用CSS transition实现平滑的位移与阴影变化。
|
||||
- 视觉引导:通过阴影与提升效果引导用户关注当前交互元素。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as "用户"
|
||||
participant S as "统计卡片"
|
||||
U->>S : "鼠标悬停"
|
||||
S-->>U : "transform : translateY(-4px)"
|
||||
S-->>U : "box-shadow : var(--shadow-md)"
|
||||
U->>S : "鼠标离开"
|
||||
S-->>U : "恢复默认状态"
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
|
||||
章节来源
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
|
||||
### 颜色系统与图标设计
|
||||
- 颜色系统
|
||||
- 主题色:紫色、绿色、蓝色、橙色等,用于图标背景与强调色。
|
||||
- 背景色:卡片背景为白色,网格背景为浅灰,确保对比度与可读性。
|
||||
- 阴影:采用多级阴影变量,营造立体感。
|
||||
- 图标设计
|
||||
- 使用表情符号或简洁图标,与业务域对应,保持风格统一。
|
||||
- 图标容器为固定尺寸与圆角背景,确保视觉平衡。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
Theme["主题色系<br/>紫色/绿色/蓝色/橙色"] --> IconBg["图标背景色"]
|
||||
CardBg["卡片背景色<br/>白色"] --> Contrast["对比度保障"]
|
||||
Shadow["阴影变量<br/>多级阴影"] --> Depth["层次感"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:14-31](file://index.html#L14-L31)
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
|
||||
章节来源
|
||||
- [index.html:14-31](file://index.html#L14-L31)
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
|
||||
### 数据可视化原则
|
||||
- 简洁优先:统计卡片以数字与简短标签为主,避免复杂图表。
|
||||
- 语义明确:图标与标签共同传达含义,减少歧义。
|
||||
- 层次清晰:通过字号、权重与颜色区分主次信息。
|
||||
- 响应式适配:在窄屏下保持信息密度与可读性。
|
||||
|
||||
(本节为通用设计原则说明)
|
||||
|
||||
### 定制化指南
|
||||
- 结构定制
|
||||
- 可通过修改统计网格列数与间距,适配不同业务场景。
|
||||
- 卡片内容可替换为新的图标、数值与标签组合。
|
||||
- 样式定制
|
||||
- 使用CSS变量统一管理主题色与阴影,便于全局替换。
|
||||
- 通过伪类与hover状态实现交互反馈。
|
||||
- 数据绑定与动态更新
|
||||
- 在现有结构基础上,可通过脚本动态更新数值与标签内容,保持与后端数据同步。
|
||||
- 建议采用轻量的数据绑定库或原生DOM操作,避免过度依赖框架。
|
||||
|
||||
章节来源
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
- [index.html:2448-2732](file://index.html#L2448-L2732)
|
||||
|
||||
## 依赖关系分析
|
||||
统计卡片系统依赖于:
|
||||
- CSS Grid:实现网格布局与响应式列数切换。
|
||||
- CSS变量:统一颜色与阴影,便于主题定制。
|
||||
- 媒体查询:在不同断点下调整网格列数与间距。
|
||||
- JavaScript:页面切换、用户交互与动态内容更新(与统计卡片联动)。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
CSS["CSS Grid/变量/媒体查询"] --> Layout["统计网格布局"]
|
||||
JS["JavaScript<br/>页面切换/交互"] --> Interact["用户交互"]
|
||||
Layout --> Render["渲染统计卡片"]
|
||||
Interact --> Render
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [index.html:1469-1545](file://index.html#L1469-L1545)
|
||||
- [index.html:2448-2732](file://index.html#L2448-L2732)
|
||||
|
||||
章节来源
|
||||
- [index.html:1469-1545](file://index.html#L1469-L1545)
|
||||
- [index.html:2448-2732](file://index.html#L2448-L2732)
|
||||
|
||||
## 性能考虑
|
||||
- 渲染性能
|
||||
- 使用CSS Grid与transform属性进行布局与动画,避免频繁重排与重绘。
|
||||
- 控制阴影与透明度的使用数量,减少GPU压力。
|
||||
- 响应式性能
|
||||
- 媒体查询仅影响布局列数,不引入额外脚本逻辑,降低复杂度。
|
||||
- 交互性能
|
||||
- 悬停动画使用transition,帧率稳定且开销较小。
|
||||
- 内存管理
|
||||
- 统计卡片为静态内容,无需复杂状态管理;若引入动态数据,建议采用轻量数据绑定与及时清理事件监听。
|
||||
|
||||
(本节为通用性能建议说明)
|
||||
|
||||
## 故障排查指南
|
||||
- 卡片未按预期换列
|
||||
- 检查媒体查询断点是否正确,确认容器宽度是否达到断点阈值。
|
||||
- 悬停效果异常
|
||||
- 检查hover状态样式是否被覆盖,确认transition属性是否生效。
|
||||
- 数值显示错位
|
||||
- 检查字体大小与行高设置,确保在不同字号下仍保持垂直居中。
|
||||
- 颜色不一致
|
||||
- 检查CSS变量定义与引用,确保主题色与图标背景色一致。
|
||||
|
||||
章节来源
|
||||
- [index.html:1469-1545](file://index.html#L1469-L1545)
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
|
||||
## 结论
|
||||
本统计卡片系统以简洁、清晰为核心设计目标,通过CSS Grid实现灵活的网格布局,借助媒体查询在多终端上保持一致的视觉体验。卡片采用统一的颜色与图标体系,配合悬停与阴影反馈,形成良好的交互体验。建议在后续扩展中遵循本文档的设计原则与定制化指南,确保系统在功能扩展与性能优化上的可持续发展。
|
||||
|
||||
## 附录
|
||||
- 响应式断点一览
|
||||
- 1200px:2列网格
|
||||
- 768px:1列网格
|
||||
- 主题色与图标背景
|
||||
- 紫色、绿色、蓝色、橙色等主题色用于图标背景,保持品牌一致性。
|
||||
|
||||
章节来源
|
||||
- [index.html:1469-1545](file://index.html#L1469-L1545)
|
||||
- [index.html:586-633](file://index.html#L586-L633)
|
||||
Reference in New Issue
Block a user