1082 lines
28 KiB
Markdown
1082 lines
28 KiB
Markdown
# 博客风格调整与功能扩展设计
|
||
|
||
## 一、设计目标
|
||
|
||
### 1.1 核心问题
|
||
当前博客存在明显的"AI生成感",主要体现在:
|
||
- 过度使用渐变色效果(gradient-primary在多处应用)
|
||
- 动画效果过于统一和机械化(fadeInUp、旋转动画等)
|
||
- 缺乏个性化的视觉识别元素
|
||
- 排版过于规整,缺少杂志式的灵活布局
|
||
- 功能单一,缺少现代博客的交互特性
|
||
|
||
### 1.2 改造方向
|
||
- 采用杂志风格设计语言,强调排版层次和空间留白
|
||
- 减少装饰性动画,保留必要的交互反馈
|
||
- 建立个性化的视觉识别系统
|
||
- 增加实用功能:文章搜索、目录导航、评论系统
|
||
|
||
## 二、视觉设计改造
|
||
|
||
### 2.1 色彩系统重构
|
||
|
||
#### 2.1.1 主色调调整
|
||
**设计原则**:从渐变色过渡到单色调+强调色的配色方案
|
||
|
||
**亮色模式**
|
||
- 主背景:保持纯白 `#ffffff`
|
||
- 次级背景:从 `#f8f9fa` 调整为更温暖的 `#fafaf9`(暖灰色)
|
||
- 三级背景:从 `#f0f2f5` 调整为 `#f5f5f4`
|
||
- 主文本:从 `#2c3e50` 调整为 `#18181b`(更深的黑色,提高对比度)
|
||
- 次级文本:从 `#6b7280` 调整为 `#71717a`
|
||
- 强调色:从蓝色系改为更有个性的颜色
|
||
- 主强调色:`#d97706`(琥珀色,温暖而专业)
|
||
- 次强调色:`#0891b2`(青色,用于链接和按钮)
|
||
|
||
**暗色模式**
|
||
- 主背景:从 `#0f172a` 调整为 `#09090b`(更纯粹的黑)
|
||
- 次级背景:`#18181b`
|
||
- 三级背景:`#27272a`
|
||
- 主文本:`#fafafa`
|
||
- 强调色:
|
||
- 主强调色:`#fbbf24`(亮琥珀色)
|
||
- 次强调色:`#06b6d4`(亮青色)
|
||
|
||
#### 2.1.2 移除渐变色
|
||
**操作范围**
|
||
- 页面标题(h1):从渐变文字改为纯色+下划线装饰
|
||
- Logo文字:从渐变改为单色+图标组合
|
||
- 卡片悬停效果:移除渐变边框光效
|
||
- 背景装饰:移除旋转渐变背景
|
||
|
||
**替代方案**
|
||
- 使用色块分隔和强调色点缀
|
||
- 使用字体粗细和大小变化建立层次
|
||
- 使用边框和阴影增强视觉焦点
|
||
|
||
### 2.2 排版系统优化
|
||
|
||
#### 2.2.1 字体层级重构
|
||
**设计原则**:建立清晰的字体比例系统(基于1.25倍率)
|
||
|
||
| 元素 | 当前大小 | 调整后大小 | 字重 | 用途 |
|
||
|------|---------|-----------|------|------|
|
||
| 页面主标题 | 3.5rem | 3rem | 800 | 首页Hero标题 |
|
||
| 文章标题 | 2.75rem | 2.5rem | 700 | 文章详情页标题 |
|
||
| H2标题 | 2rem | 1.875rem | 700 | 文章二级标题 |
|
||
| H3标题 | 1.625rem | 1.5rem | 600 | 文章三级标题 |
|
||
| 正文 | 1.0625rem | 1.125rem | 400 | 文章正文 |
|
||
| 小字 | 0.875rem | 0.9375rem | 400 | 元信息 |
|
||
|
||
#### 2.2.2 行高与间距调整
|
||
- 标题行高:从 `1.3` 调整为 `1.4`(增加呼吸感)
|
||
- 正文行高:从 `1.8` 调整为 `1.75`
|
||
- 段落间距:从 `1.5em` 调整为 `1.75em`
|
||
- 章节间距:从 `2.5em` 调整为 `3em`
|
||
|
||
#### 2.2.3 内容宽度优化
|
||
- 文章内容:从 `800px` 调整为 `680px`(更适合阅读的行长度)
|
||
- 首页列表:从 `900px` 调整为 `760px`
|
||
- 页面布局:保持 `1200px` 不变
|
||
|
||
### 2.3 动画与交互简化
|
||
|
||
#### 2.3.1 需要移除的动画
|
||
- Hero区域的旋转渐变背景动画
|
||
- 页面元素的统一fadeInUp入场动画
|
||
- 主题切换按钮的360度旋转效果
|
||
- 卡片的渐变光效动画
|
||
|
||
#### 2.3.2 需要保留的交互
|
||
- 链接下划线的扩展效果(调整为更快速:150ms)
|
||
- 卡片的轻微上浮效果(减小位移量:从4px改为2px)
|
||
- 按钮的颜色过渡
|
||
- 图片的轻微缩放效果(从1.02改为1.01)
|
||
|
||
#### 2.3.3 新增微交互
|
||
- 文章卡片悬停时,显示细微的左侧彩色边框(4px宽)
|
||
- 导航链接悬停时,文字轻微放大(scale 1.02)
|
||
- 标签悬停时,添加轻微的阴影而非颜色反转
|
||
|
||
### 2.4 视觉识别元素
|
||
|
||
#### 2.4.1 Logo设计概念
|
||
**结构**:图标 + 文字组合
|
||
|
||
**图标元素**:使用几何图形组合
|
||
- 一个实心圆点(代表"42"中的点)
|
||
- 简洁的线条装饰
|
||
- 使用强调色填充
|
||
|
||
**文字处理**:
|
||
- 去除渐变色
|
||
- 使用深色主文本颜色
|
||
- 数字"42"使用强调色
|
||
- "的博客"使用次级文本色
|
||
|
||
#### 2.4.2 装饰性元素
|
||
**引入杂志风格装饰**
|
||
|
||
**章节分隔符**
|
||
- 使用大写字母作为章节编号(A、B、C...)
|
||
- 配合细线和色块组合
|
||
- 位置:文章二级标题左侧
|
||
|
||
**边注设计**
|
||
- 在宽屏幕下,为重要信息添加侧边标注区域
|
||
- 显示发布日期、阅读时间等元信息
|
||
- 使用竖线分隔
|
||
|
||
**引用块重设计**
|
||
- 移除大号引号装饰
|
||
- 使用粗左边框(6px)+ 灰色背景
|
||
- 添加来源标注样式(右下角斜体小字)
|
||
|
||
## 三、布局结构调整
|
||
|
||
### 3.1 首页布局改造
|
||
|
||
#### 3.1.1 Hero区域重设计
|
||
**当前问题**:过于居中对称,缺乏动态感
|
||
|
||
**新设计方案**
|
||
- 采用左右分栏布局
|
||
- 左侧:标题 + 简介文字(左对齐)
|
||
- 右侧:精选标签云或最新文章数量统计
|
||
- 移除背景模糊渐变圆
|
||
- 添加几何装饰线条(使用强调色)
|
||
|
||
**布局规格**
|
||
| 元素 | 宽度 | 对齐方式 |
|
||
|------|------|---------|
|
||
| 左侧内容区 | 60% | 左对齐 |
|
||
| 右侧信息区 | 35% | 右对齐 |
|
||
| 间距 | 5% | - |
|
||
|
||
#### 3.1.2 文章列表优化
|
||
**当前问题**:所有卡片样式完全一致,缺少视觉节奏
|
||
|
||
**新设计方案**
|
||
- 保持卡片式布局,但引入不同的视觉重量
|
||
- 第一篇文章:大卡片样式
|
||
- 更大的标题字号(2rem)
|
||
- 显示文章摘要的前两行
|
||
- 更多的内边距
|
||
- 其他文章:标准卡片样式
|
||
- 标题字号(1.5rem)
|
||
- 显示一行摘要
|
||
|
||
**卡片边框设计**
|
||
- 移除默认边框
|
||
- 仅在悬停时显示左侧强调色边框(4px)
|
||
- 背景色变化更轻微(从bg-secondary到bg-primary的过渡)
|
||
|
||
### 3.2 文章详情页布局
|
||
|
||
#### 3.2.1 顶部信息栏重设计
|
||
**当前布局**:所有元信息在标题下方横向排列
|
||
|
||
**新布局方案**
|
||
- 标题独立一行,增加上下间距
|
||
- 元信息分为两行:
|
||
- 第一行:作者 + 发布日期(左对齐)
|
||
- 第二行:阅读时间 + 分类 + 标签(左对齐)
|
||
- 移除过多的分隔符,使用自然的间距分隔
|
||
|
||
#### 3.2.2 文章内容区优化
|
||
**宽度控制**
|
||
- 正文:680px(约65-75字符/行)
|
||
- 代码块:可突破正文宽度,最大800px
|
||
- 图片:可突破正文宽度,最大900px(可选全宽模式)
|
||
|
||
**侧边空间利用**(仅在宽屏≥1200px显示)
|
||
- 左侧:显示文章目录导航(固定定位)
|
||
- 右侧:显示元信息和社交分享(固定定位)
|
||
|
||
### 3.3 响应式布局优化
|
||
|
||
**断点策略**
|
||
| 断点 | 宽度范围 | 主要调整 |
|
||
|------|---------|---------|
|
||
| Desktop | ≥1200px | 显示侧边栏和目录 |
|
||
| Laptop | 992-1199px | 隐藏侧边栏,保留目录按钮 |
|
||
| Tablet | 768-991px | 单列布局,减少内边距 |
|
||
| Mobile | <768px | 紧凑布局,优化触摸交互 |
|
||
|
||
## 四、功能扩展设计
|
||
|
||
### 4.1 文章搜索功能
|
||
|
||
#### 4.1.1 搜索入口设计
|
||
**位置**:网站头部导航栏
|
||
|
||
**视觉呈现**
|
||
- 初始状态:搜索图标按钮(与主题切换按钮同样式)
|
||
- 激活状态:展开为搜索输入框
|
||
- 宽度:从40px展开至280px(过渡时间300ms)
|
||
|
||
**交互流程**
|
||
```
|
||
用户点击搜索图标
|
||
↓
|
||
输入框从右侧展开
|
||
↓
|
||
用户输入搜索关键词
|
||
↓
|
||
实时显示搜索建议(debounce 300ms)
|
||
↓
|
||
用户选择结果或按回车
|
||
↓
|
||
跳转到搜索结果页或文章页
|
||
```
|
||
|
||
#### 4.1.2 搜索算法设计
|
||
**索引构建**
|
||
- 在构建时生成搜索索引JSON文件
|
||
- 索引内容包含:
|
||
- 文章标题(权重:3)
|
||
- 文章描述(权重:2)
|
||
- 文章标签(权重:2)
|
||
- 文章分类(权重:1.5)
|
||
- 文章正文前500字(权重:1)
|
||
|
||
**搜索匹配策略**
|
||
- 使用Fuse.js实现模糊搜索
|
||
- 匹配阈值:0.3(平衡精确度和召回率)
|
||
- 支持中文分词
|
||
- 最多返回10条结果
|
||
|
||
**搜索结果排序**
|
||
- 按相关度得分排序
|
||
- 同分情况下,优先显示最新文章
|
||
|
||
#### 4.1.3 搜索结果页面
|
||
**布局结构**
|
||
- 顶部:搜索框(显示当前搜索词)+ 结果数量统计
|
||
- 主体:搜索结果列表(卡片式)
|
||
- 每个结果卡片显示:
|
||
- 文章标题(高亮匹配关键词)
|
||
- 文章描述(高亮匹配内容)
|
||
- 元信息:日期、分类、标签
|
||
- 匹配度指示器(可选)
|
||
|
||
**空结果处理**
|
||
- 显示"未找到相关文章"提示
|
||
- 提供搜索建议:
|
||
- 检查拼写
|
||
- 尝试不同的关键词
|
||
- 浏览所有分类
|
||
- 显示推荐文章(最新3篇)
|
||
|
||
#### 4.1.4 技术实现方案
|
||
**客户端实现**
|
||
- 使用SolidJS组件实现搜索UI
|
||
- 搜索索引通过静态JSON文件提供
|
||
- 使用Fuse.js进行客户端搜索
|
||
|
||
**数据结构**
|
||
```
|
||
搜索索引JSON结构:
|
||
{
|
||
"posts": [
|
||
{
|
||
"id": "文章slug",
|
||
"title": "文章标题",
|
||
"description": "文章描述",
|
||
"content": "文章摘要",
|
||
"category": "分类",
|
||
"tags": ["标签1", "标签2"],
|
||
"date": "发布日期ISO字符串",
|
||
"url": "/posts/文章slug"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 4.2 文章目录导航(TOC)
|
||
|
||
#### 4.2.1 目录生成策略
|
||
**提取规则**
|
||
- 自动提取文章中的H2和H3标题
|
||
- H2作为一级目录项
|
||
- H3作为二级目录项(缩进显示)
|
||
- 忽略H1(文章标题)和H4-H6
|
||
|
||
**目录项数据结构**
|
||
```
|
||
{
|
||
"id": "标题锚点ID",
|
||
"text": "标题文本",
|
||
"level": 2或3,
|
||
"children": [子标题数组]
|
||
}
|
||
```
|
||
|
||
#### 4.2.2 桌面端展示方案
|
||
**显示位置**
|
||
- 位置:文章内容区左侧
|
||
- 定位:固定定位(sticky)
|
||
- 宽度:200px
|
||
- 距离内容:60px
|
||
|
||
**视觉设计**
|
||
- 目录标题:"目录"(小号字体,次级文本色)
|
||
- 目录项样式:
|
||
- 默认:次级文本色,无背景
|
||
- 悬停:主文本色,左侧显示强调色指示线(2px)
|
||
- 激活(当前阅读位置):强调色文字,粗体,左侧强调色指示线(3px)
|
||
- 间距:每项之间8px
|
||
- H3缩进:16px
|
||
|
||
**滚动联动**
|
||
- 监听页面滚动位置
|
||
- 当某个标题进入视口上方100px时,高亮对应目录项
|
||
- 目录项点击时,平滑滚动到对应标题位置
|
||
- 滚动偏移量:-80px(避免被固定头部遮挡)
|
||
|
||
#### 4.2.3 移动端展示方案
|
||
**显示方式**
|
||
- 初始状态:浮动按钮(右下角固定定位)
|
||
- 按钮样式:圆形,显示"目录"图标
|
||
- 点击后:从底部弹出抽屉式目录面板
|
||
|
||
**抽屉面板设计**
|
||
- 高度:占屏幕60%
|
||
- 背景:带模糊效果的背景色
|
||
- 内容:可滚动的目录列表
|
||
- 关闭方式:点击遮罩层或向下滑动
|
||
|
||
**性能优化**
|
||
- 仅在文章有3个以上标题时显示目录功能
|
||
- 使用IntersectionObserver监听标题可见性(性能更优)
|
||
|
||
#### 4.2.4 无障碍支持
|
||
- 为目录导航添加ARIA标签
|
||
- 支持键盘导航(Tab切换,Enter选择)
|
||
- 目录项添加focus样式
|
||
- 屏幕阅读器支持
|
||
|
||
### 4.3 评论系统集成
|
||
|
||
#### 4.3.1 评论系统选型
|
||
**推荐方案**:Giscus(基于GitHub Discussions)
|
||
|
||
**选择理由**
|
||
- 无需后端服务器
|
||
- 数据存储在GitHub,开发者友好
|
||
- 支持Markdown格式
|
||
- 自动主题适配(亮色/暗色)
|
||
- 完全免费且开源
|
||
- 支持评论回复和表情反应
|
||
|
||
**备选方案**
|
||
- Utterances:更轻量,但功能较少
|
||
- Disqus:功能完整,但有广告且较重
|
||
- Waline:自托管方案,需要服务器
|
||
|
||
#### 4.3.2 集成位置设计
|
||
**显示位置**
|
||
- 文章内容底部
|
||
- 在"相关文章推荐"之前(如有)
|
||
- 与正文内容使用分隔线区分
|
||
|
||
**容器设计**
|
||
- 宽度:与文章正文宽度一致(680px)
|
||
- 上边距:80px
|
||
- 背景:与页面背景一致
|
||
- 顶部标题:"评论讨论"(H2样式)
|
||
|
||
#### 4.3.3 主题适配方案
|
||
**颜色适配**
|
||
- 监听博客主题切换事件
|
||
- 动态切换Giscus主题:
|
||
- 亮色模式 → `light` 主题
|
||
- 暗色模式 → `dark` 主题
|
||
- 确保评论区与博客整体风格一致
|
||
|
||
**自定义样式**
|
||
- 调整评论框边框颜色,使用博客边框色变量
|
||
- 调整按钮颜色,使用博客强调色
|
||
- 调整字体大小,与博客正文保持一致
|
||
|
||
#### 4.3.4 加载优化
|
||
**懒加载策略**
|
||
- 使用IntersectionObserver延迟加载评论组件
|
||
- 仅当用户滚动到评论区域附近(提前200px)时才加载
|
||
- 加载前显示占位符:"加载评论中..."
|
||
|
||
**性能考虑**
|
||
- Giscus脚本异步加载
|
||
- 不阻塞文章内容渲染
|
||
- 设置加载超时(10秒),超时显示错误提示
|
||
|
||
#### 4.3.5 隐私与配置
|
||
**配置选项**
|
||
- 是否启用评论:可通过文章Front Matter控制
|
||
```
|
||
comments: true/false(默认true)
|
||
```
|
||
- 评论顺序:默认按时间倒序(最新在前)
|
||
- 输入位置:顶部(方便用户快速评论)
|
||
|
||
**隐私说明**
|
||
- 在评论区上方添加提示:
|
||
"评论功能由 GitHub Discussions 提供,需要登录 GitHub 账号"
|
||
- 提供隐私政策链接(如有)
|
||
|
||
### 4.4 其他优化功能
|
||
|
||
#### 4.4.1 阅读进度指示器
|
||
**设计方案**
|
||
- 位置:页面顶部,紧贴导航栏下方
|
||
- 样式:细线(2px高),使用强调色
|
||
- 宽度:根据阅读进度百分比动态变化
|
||
- 过渡:平滑过渡(transition: width 150ms)
|
||
|
||
**计算逻辑**
|
||
- 监听滚动事件(节流:每100ms计算一次)
|
||
- 进度 = (当前滚动距离) / (页面总高度 - 视口高度) × 100%
|
||
- 仅在文章详情页显示
|
||
|
||
#### 4.4.2 返回顶部按钮
|
||
**显示条件**
|
||
- 仅在页面向下滚动超过800px时显示
|
||
- 使用fade渐入/渐出动画
|
||
|
||
**视觉设计**
|
||
- 位置:右下角固定定位
|
||
- 样式:圆形按钮(48px × 48px)
|
||
- 图标:向上箭头
|
||
- 颜色:强调色背景 + 白色图标
|
||
- 阴影:中等阴影
|
||
|
||
**交互行为**
|
||
- 点击后平滑滚动到页面顶部(800ms duration)
|
||
- 悬停时轻微放大(scale 1.1)
|
||
- 移动端位置调整:避免与目录按钮重叠
|
||
|
||
#### 4.4.3 代码块增强
|
||
**复制按钮**
|
||
- 位置:代码块右上角
|
||
- 样式:小号按钮,显示"复制"文字或图标
|
||
- 交互:
|
||
- 点击后复制代码到剪贴板
|
||
- 显示"已复制"提示(2秒后恢复)
|
||
|
||
**语言标识**
|
||
- 位置:代码块左上角
|
||
- 显示:代码语言名称(如JavaScript、Python)
|
||
- 样式:小号徽章,使用次级背景色
|
||
|
||
**行号显示**
|
||
- 可选功能,默认关闭
|
||
- 在长代码块(>10行)时自动启用
|
||
- 样式:浅灰色,右对齐
|
||
|
||
## 五、组件设计规范
|
||
|
||
### 5.1 Header组件改造
|
||
|
||
#### 5.1.1 结构调整
|
||
**当前问题**:所有页面重复定义Header样式
|
||
|
||
**改造方案**
|
||
- 将Header提取为独立的SiteHeader组件
|
||
- 所有页面复用同一组件
|
||
- 支持传入当前页面标识,高亮对应导航项
|
||
|
||
**组件属性**
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
|--------|-----|--------|------|
|
||
| currentPath | string | '/' | 当前页面路径 |
|
||
| showSearch | boolean | true | 是否显示搜索功能 |
|
||
|
||
#### 5.1.2 导航项设计
|
||
**导航结构**
|
||
```
|
||
Logo - 导航链接1 - 导航链接2 - 导航链接3 - 导航链接4 - [搜索] - [主题切换]
|
||
```
|
||
|
||
**激活状态指示**
|
||
- 当前页面的导航项文字颜色变为主文本色
|
||
- 底部下划线始终显示(不需要悬停)
|
||
- 字体加粗(font-weight: 600)
|
||
|
||
**响应式处理**
|
||
- 桌面端(≥768px):水平排列所有项目
|
||
- 移动端(<768px):
|
||
- Logo保持可见
|
||
- 导航项收起至汉堡菜单
|
||
- 搜索和主题切换保持可见
|
||
|
||
### 5.2 ArticleCard组件改造
|
||
|
||
#### 5.2.1 卡片样式优化
|
||
**边框处理**
|
||
- 移除默认1px边框
|
||
- 添加底部1px分隔线(使用border-color)
|
||
- 悬停时显示左侧4px强调色边框
|
||
|
||
**背景处理**
|
||
- 默认:透明背景
|
||
- 悬停:浅灰背景(bg-secondary)
|
||
- 过渡:200ms
|
||
|
||
**间距调整**
|
||
- 内边距:从2rem改为1.75rem(垂直) × 2rem(水平)
|
||
- 卡片间距:从1.5rem改为2rem
|
||
|
||
#### 5.2.2 内容布局调整
|
||
**标题处理**
|
||
- 移除悬停时的渐变色效果
|
||
- 悬停时仅改变颜色为强调色
|
||
- 字号:从1.75rem改为1.625rem
|
||
|
||
**元信息重排**
|
||
- 分类标签移到标题右侧(行内显示)
|
||
- 日期和阅读时间保持在独立一行
|
||
- 减少分隔符使用
|
||
|
||
**标签显示**
|
||
- 从pills样式改为简单的文字+井号
|
||
- 悬停时仅改变颜色,不改变背景
|
||
- 使用逗号分隔多个标签
|
||
|
||
### 5.3 搜索组件设计
|
||
|
||
#### 5.3.1 SearchButton组件
|
||
**职责**:触发搜索功能的按钮
|
||
|
||
**状态管理**
|
||
- 未激活:显示搜索图标
|
||
- 激活:展开为搜索框
|
||
- 搜索中:显示加载指示器
|
||
|
||
**组件属性**
|
||
| 属性名 | 类型 | 说明 |
|
||
|--------|-----|------|
|
||
| onSearch | (query: string) => void | 搜索回调函数 |
|
||
| placeholder | string | 输入框占位文字 |
|
||
|
||
#### 5.3.2 SearchModal组件
|
||
**职责**:全屏搜索界面(备选方案)
|
||
|
||
**显示时机**
|
||
- 用户点击搜索按钮
|
||
- 或使用快捷键(Ctrl/Cmd + K)
|
||
|
||
**界面布局**
|
||
- 顶部:大号搜索输入框
|
||
- 中部:实时搜索结果列表
|
||
- 底部:快捷键提示
|
||
|
||
**关闭方式**
|
||
- 点击遮罩层
|
||
- 按ESC键
|
||
- 点击关闭按钮
|
||
|
||
### 5.4 TableOfContents组件设计
|
||
|
||
#### 5.4.1 组件职责
|
||
- 自动提取文章标题结构
|
||
- 渲染目录列表
|
||
- 处理滚动联动
|
||
- 处理点击跳转
|
||
|
||
#### 5.4.2 组件属性
|
||
| 属性名 | 类型 | 说明 |
|
||
|--------|-----|------|
|
||
| headings | Heading[] | 标题数据数组 |
|
||
| activeId | string | 当前激活的标题ID |
|
||
| onItemClick | (id: string) => void | 目录项点击回调 |
|
||
|
||
#### 5.4.3 状态管理
|
||
**内部状态**
|
||
- activeId: 当前高亮的标题ID
|
||
- isOpen: 移动端抽屉是否打开
|
||
|
||
**滚动监听**
|
||
- 使用IntersectionObserver监听所有标题元素
|
||
- 更新activeId为当前可见的第一个标题
|
||
- 防抖处理,避免频繁更新
|
||
|
||
### 5.5 CommentSection组件设计
|
||
|
||
#### 5.5.1 组件职责
|
||
- 动态加载Giscus脚本
|
||
- 监听主题变化并同步更新
|
||
- 处理懒加载逻辑
|
||
|
||
#### 5.5.2 组件属性
|
||
| 属性名 | 类型 | 说明 |
|
||
|--------|-----|------|
|
||
| enabled | boolean | 是否启用评论 |
|
||
| repo | string | GitHub仓库地址 |
|
||
| repoId | string | 仓库ID |
|
||
| category | string | Discussions分类 |
|
||
| categoryId | string | 分类ID |
|
||
|
||
#### 5.5.3 生命周期处理
|
||
**初始化**
|
||
- 组件挂载时检查IntersectionObserver支持
|
||
- 设置观察器监听组件容器
|
||
|
||
**加载时机**
|
||
- 容器进入视口时触发加载
|
||
- 加载Giscus脚本并初始化
|
||
|
||
**主题同步**
|
||
- 监听博客主题切换事件
|
||
- 通过postMessage更新Giscus主题
|
||
|
||
## 六、实施计划
|
||
|
||
### 6.1 阶段划分
|
||
|
||
#### 阶段一:视觉基础改造(优先级:高)
|
||
**范围**
|
||
- 色彩系统重构
|
||
- 移除渐变色效果
|
||
- 简化动画效果
|
||
- 字体系统优化
|
||
|
||
**预期成果**
|
||
- 建立新的设计变量系统
|
||
- 页面视觉风格显著改善
|
||
- 减少"AI感"
|
||
|
||
**涉及文件**
|
||
- `/src/styles/base.css`
|
||
- `/src/styles/typography.css`
|
||
- `/src/styles/enhancements.css`
|
||
|
||
#### 阶段二:布局结构调整(优先级:高)
|
||
**范围**
|
||
- Hero区域重设计
|
||
- 文章列表布局优化
|
||
- 文章详情页布局调整
|
||
- Header组件提取
|
||
|
||
**预期成果**
|
||
- 杂志式布局初步成型
|
||
- 提升视觉层次感
|
||
- 组件复用优化
|
||
|
||
**涉及文件**
|
||
- `/src/pages/index.astro`
|
||
- `/src/layouts/PostLayout.astro`
|
||
- `/src/components/SiteHeader.astro`(新增)
|
||
- `/src/components/ArticleCard.astro`
|
||
|
||
#### 阶段三:搜索功能开发(优先级:中)
|
||
**范围**
|
||
- 搜索索引构建脚本
|
||
- SearchButton组件开发
|
||
- 搜索结果页开发
|
||
- 搜索算法集成
|
||
|
||
**预期成果**
|
||
- 完整的搜索功能
|
||
- 良好的搜索体验
|
||
|
||
**涉及文件**
|
||
- `/src/components/SearchButton.tsx`(新增)
|
||
- `/src/pages/search.astro`(新增)
|
||
- `/src/utils/search-index.ts`(新增)
|
||
- `/scripts/build-search-index.ts`(新增)
|
||
|
||
#### 阶段四:目录导航开发(优先级:中)
|
||
**范围**
|
||
- 目录提取逻辑
|
||
- TableOfContents组件开发
|
||
- 滚动联动实现
|
||
- 移动端抽屉实现
|
||
|
||
**预期成果**
|
||
- 桌面端和移动端目录导航
|
||
- 平滑的滚动联动效果
|
||
|
||
**涉及文件**
|
||
- `/src/components/TableOfContents.tsx`(新增)
|
||
- `/src/utils/extract-headings.ts`(新增)
|
||
- `/src/layouts/PostLayout.astro`(更新)
|
||
|
||
#### 阶段五:评论系统集成(优先级:低)
|
||
**范围**
|
||
- Giscus配置
|
||
- CommentSection组件开发
|
||
- 主题适配
|
||
- 懒加载实现
|
||
|
||
**预期成果**
|
||
- 完整的评论功能
|
||
- 主题自动切换
|
||
|
||
**涉及文件**
|
||
- `/src/components/CommentSection.tsx`(新增)
|
||
- `/src/layouts/PostLayout.astro`(更新)
|
||
|
||
#### 阶段六:细节优化(优先级:低)
|
||
**范围**
|
||
- 阅读进度条
|
||
- 返回顶部按钮
|
||
- 代码块增强
|
||
- 性能优化
|
||
- 无障碍优化
|
||
|
||
**预期成果**
|
||
- 完善的用户体验
|
||
- 性能和可访问性提升
|
||
|
||
**涉及文件**
|
||
- `/src/components/ReadingProgress.tsx`(新增)
|
||
- `/src/components/BackToTop.tsx`(新增)
|
||
- `/src/components/CodeBlock.astro`(新增)
|
||
|
||
### 6.2 技术依赖
|
||
|
||
#### 6.2.1 新增依赖包
|
||
| 包名 | 版本 | 用途 |
|
||
|------|-----|------|
|
||
| fuse.js | ^7.0.0 | 模糊搜索引擎 |
|
||
| @giscus/solid | ^3.0.0 | Giscus评论组件(SolidJS版) |
|
||
|
||
#### 6.2.2 开发工具依赖
|
||
| 包名 | 版本 | 用途 |
|
||
|------|-----|------|
|
||
| @types/fuse.js | ^7.0.0 | Fuse.js类型定义 |
|
||
|
||
### 6.3 兼容性要求
|
||
|
||
**浏览器支持**
|
||
- Chrome/Edge 90+
|
||
- Firefox 88+
|
||
- Safari 14+
|
||
- 移动端浏览器(iOS Safari 14+, Chrome Mobile 90+)
|
||
|
||
**功能降级策略**
|
||
- 不支持IntersectionObserver:目录不显示滚动联动
|
||
- 不支持backdrop-filter:Header使用纯色背景
|
||
- 不支持CSS变量:提供fallback颜色值
|
||
|
||
## 七、设计验收标准
|
||
|
||
### 7.1 视觉设计验收
|
||
|
||
**色彩系统**
|
||
- ✓ 所有渐变色已替换为单色
|
||
- ✓ 强调色应用一致(琥珀色 + 青色)
|
||
- ✓ 亮色/暗色模式对比度符合WCAG AA标准
|
||
|
||
**排版系统**
|
||
- ✓ 字体大小符合新的比例系统
|
||
- ✓ 行高和间距调整到位
|
||
- ✓ 内容宽度优化完成(680px)
|
||
|
||
**动画效果**
|
||
- ✓ 移除所有装饰性动画
|
||
- ✓ 保留必要的交互反馈
|
||
- ✓ 过渡时间控制在150-300ms
|
||
|
||
### 7.2 功能验收
|
||
|
||
**搜索功能**
|
||
- ✓ 搜索框正常展开/收起
|
||
- ✓ 搜索结果准确且相关
|
||
- ✓ 支持中文搜索
|
||
- ✓ 空结果时显示提示和推荐
|
||
|
||
**目录导航**
|
||
- ✓ 自动提取H2和H3标题
|
||
- ✓ 滚动联动正确高亮
|
||
- ✓ 点击跳转平滑滚动
|
||
- ✓ 移动端抽屉正常工作
|
||
|
||
**评论系统**
|
||
- ✓ Giscus正常加载
|
||
- ✓ 主题自动切换
|
||
- ✓ 懒加载工作正常
|
||
- ✓ 评论提交和显示正常
|
||
|
||
### 7.3 性能验收
|
||
|
||
**加载性能**
|
||
- ✓ 首屏加载时间 < 2秒(3G网络)
|
||
- ✓ Lighthouse性能分数 > 90
|
||
- ✓ 搜索索引大小 < 500KB
|
||
|
||
**运行性能**
|
||
- ✓ 滚动帧率保持60fps
|
||
- ✓ 搜索响应时间 < 100ms
|
||
- ✓ 无内存泄漏
|
||
|
||
### 7.4 响应式验收
|
||
|
||
**桌面端(≥1200px)**
|
||
- ✓ 显示侧边目录导航
|
||
- ✓ 布局合理利用空间
|
||
- ✓ 所有功能正常
|
||
|
||
**平板端(768-1199px)**
|
||
- ✓ 自适应布局正确
|
||
- ✓ 目录通过按钮访问
|
||
- ✓ 触摸交互友好
|
||
|
||
**移动端(<768px)**
|
||
- ✓ 单列布局清晰
|
||
- ✓ 字体大小适中
|
||
- ✓ 按钮大小适合触摸(≥44px)
|
||
- ✓ 导航菜单正常工作
|
||
|
||
### 7.5 可访问性验收
|
||
|
||
**键盘导航**
|
||
- ✓ 所有交互元素可通过Tab访问
|
||
- ✓ Focus样式清晰可见
|
||
- ✓ 快捷键不冲突
|
||
|
||
**屏幕阅读器**
|
||
- ✓ 语义化HTML标签使用正确
|
||
- ✓ ARIA标签添加完整
|
||
- ✓ 图片添加alt描述
|
||
- ✓ 链接文字有意义
|
||
|
||
**色彩对比**
|
||
- ✓ 正文对比度 > 4.5:1
|
||
- ✓ 大号文字对比度 > 3:1
|
||
- ✓ 交互元素对比度符合标准
|
||
|
||
## 八、风险与应对
|
||
|
||
### 8.1 技术风险
|
||
|
||
**风险1:搜索索引文件过大**
|
||
- 影响:增加页面加载时间
|
||
- 概率:中
|
||
- 应对:
|
||
- 限制索引内容长度(正文仅索引前500字)
|
||
- 使用gzip压缩
|
||
- 考虑分片加载策略
|
||
|
||
**风险2:目录导航滚动性能问题**
|
||
- 影响:低端设备卡顿
|
||
- 概率:低
|
||
- 应对:
|
||
- 使用IntersectionObserver代替scroll事件
|
||
- 添加节流处理
|
||
- 仅在有足够标题时启用
|
||
|
||
**风险3:评论系统加载失败**
|
||
- 影响:评论功能不可用
|
||
- 概率:低
|
||
- 应对:
|
||
- 设置加载超时
|
||
- 显示友好的错误提示
|
||
- 提供重试按钮
|
||
|
||
### 8.2 设计风险
|
||
|
||
**风险1:色彩系统改动影响可读性**
|
||
- 影响:用户阅读体验下降
|
||
- 概率:低
|
||
- 应对:
|
||
- 严格遵循对比度标准
|
||
- 进行多设备测试
|
||
- 收集用户反馈后微调
|
||
|
||
**风险2:布局调整导致响应式问题**
|
||
- 影响:部分设备显示异常
|
||
- 概率:中
|
||
- 应对:
|
||
- 使用多种设备和模拟器测试
|
||
- 设置合理的断点
|
||
- 使用flex和grid布局提高兼容性
|
||
|
||
### 8.3 兼容性风险
|
||
|
||
**风险1:旧浏览器不支持部分特性**
|
||
- 影响:功能降级或显示异常
|
||
- 概率:低
|
||
- 应对:
|
||
- 提供功能降级方案
|
||
- 使用@supports进行特性检测
|
||
- 提供fallback样式
|
||
|
||
## 九、后续优化方向
|
||
|
||
### 9.1 内容增强
|
||
- 相关文章推荐算法(基于标签和分类)
|
||
- 文章系列组织(将相关文章组成系列)
|
||
- 阅读历史记录(使用localStorage)
|
||
|
||
### 9.2 交互优化
|
||
- 深色模式自动切换(根据系统设置)
|
||
- 字体大小调节器
|
||
- 阅读模式(隐藏侧边栏,专注阅读)
|
||
|
||
### 9.3 性能优化
|
||
- 图片懒加载和响应式图片
|
||
- 关键CSS内联
|
||
- 预加载关键资源
|
||
- Service Worker缓存策略
|
||
|
||
### 9.4 SEO优化
|
||
- 结构化数据标记(JSON-LD)
|
||
- Open Graph标签完善
|
||
- XML Sitemap优化
|
||
- 面包屑导航
|
||
|
||
### 9.5 社交功能
|
||
- 文章分享按钮(微信、微博、Twitter等)
|
||
- 打赏功能
|
||
- 订阅Newsletter
|
||
- RSS订阅优化
|
||
|
||
---
|
||
|
||
**信心评估**:中等
|
||
|
||
**信心基础**
|
||
- 视觉设计改造方向明确,基于现代杂志风格的成熟设计原则
|
||
- 功能需求清晰,技术方案可行(基于现有Astro + SolidJS技术栈)
|
||
- 存在一定的技术挑战(搜索索引优化、滚动性能),但有成熟的解决方案可参考
|
||
- ✓ 搜索索引大小 < 500KB
|
||
|
||
**运行性能**
|
||
- ✓ 滚动帧率保持60fps
|
||
- ✓ 搜索响应时间 < 100ms
|
||
- ✓ 无内存泄漏
|
||
|
||
### 7.4 响应式验收
|
||
|
||
**桌面端(≥1200px)**
|
||
- ✓ 显示侧边目录导航
|
||
- ✓ 布局合理利用空间
|
||
- ✓ 所有功能正常
|
||
|
||
**平板端(768-1199px)**
|
||
- ✓ 自适应布局正确
|
||
- ✓ 目录通过按钮访问
|
||
- ✓ 触摸交互友好
|
||
|
||
**移动端(<768px)**
|
||
- ✓ 单列布局清晰
|
||
- ✓ 字体大小适中
|
||
- ✓ 按钮大小适合触摸(≥44px)
|
||
- ✓ 导航菜单正常工作
|
||
|
||
### 7.5 可访问性验收
|
||
|
||
**键盘导航**
|
||
- ✓ 所有交互元素可通过Tab访问
|
||
- ✓ Focus样式清晰可见
|
||
- ✓ 快捷键不冲突
|
||
|
||
**屏幕阅读器**
|
||
- ✓ 语义化HTML标签使用正确
|
||
- ✓ ARIA标签添加完整
|
||
- ✓ 图片添加alt描述
|
||
- ✓ 链接文字有意义
|
||
|
||
**色彩对比**
|
||
- ✓ 正文对比度 > 4.5:1
|
||
- ✓ 大号文字对比度 > 3:1
|
||
- ✓ 交互元素对比度符合标准
|
||
|
||
## 八、风险与应对
|
||
|
||
### 8.1 技术风险
|
||
|
||
**风险1:搜索索引文件过大**
|
||
- 影响:增加页面加载时间
|
||
- 概率:中
|
||
- 应对:
|
||
- 限制索引内容长度(正文仅索引前500字)
|
||
- 使用gzip压缩
|
||
- 考虑分片加载策略
|
||
|
||
**风险2:目录导航滚动性能问题**
|
||
- 影响:低端设备卡顿
|
||
- 概率:低
|
||
- 应对:
|
||
- 使用IntersectionObserver代替scroll事件
|
||
- 添加节流处理
|
||
- 仅在有足够标题时启用
|
||
|
||
**风险3:评论系统加载失败**
|
||
- 影响:评论功能不可用
|
||
- 概率:低
|
||
- 应对:
|
||
- 设置加载超时
|
||
- 显示友好的错误提示
|
||
- 提供重试按钮
|
||
|
||
### 8.2 设计风险
|
||
|
||
**风险1:色彩系统改动影响可读性**
|
||
- 影响:用户阅读体验下降
|
||
- 概率:低
|
||
- 应对:
|
||
- 严格遵循对比度标准
|
||
- 进行多设备测试
|
||
- 收集用户反馈后微调
|
||
|
||
**风险2:布局调整导致响应式问题**
|
||
- 影响:部分设备显示异常
|
||
- 概率:中
|
||
- 应对:
|
||
- 使用多种设备和模拟器测试
|
||
- 设置合理的断点
|
||
- 使用flex和grid布局提高兼容性
|
||
|
||
### 8.3 兼容性风险
|
||
|
||
**风险1:旧浏览器不支持部分特性**
|
||
- 影响:功能降级或显示异常
|
||
- 概率:低
|
||
- 应对:
|
||
- 提供功能降级方案
|
||
- 使用@supports进行特性检测
|
||
- 提供fallback样式
|
||
|
||
## 九、后续优化方向
|
||
|
||
### 9.1 内容增强
|
||
- 相关文章推荐算法(基于标签和分类)
|
||
- 文章系列组织(将相关文章组成系列)
|
||
- 阅读历史记录(使用localStorage)
|
||
|
||
### 9.2 交互优化
|
||
- 深色模式自动切换(根据系统设置)
|
||
- 字体大小调节器
|
||
- 阅读模式(隐藏侧边栏,专注阅读)
|
||
|
||
### 9.3 性能优化
|
||
- 图片懒加载和响应式图片
|
||
- 关键CSS内联
|
||
- 预加载关键资源
|
||
- Service Worker缓存策略
|
||
|
||
### 9.4 SEO优化
|
||
- 结构化数据标记(JSON-LD)
|
||
- Open Graph标签完善
|
||
- XML Sitemap优化
|
||
- 面包屑导航
|
||
|
||
### 9.5 社交功能
|
||
- 文章分享按钮(微信、微博、Twitter等)
|
||
- 打赏功能
|
||
- 订阅Newsletter
|
||
- RSS订阅优化
|
||
|
||
---
|
||
|
||
**信心评估**:中等
|
||
|
||
**信心基础**
|
||
- 视觉设计改造方向明确,基于现代杂志风格的成熟设计原则
|
||
- 功能需求清晰,技术方案可行(基于现有Astro + SolidJS技术栈)
|
||
- 存在一定的技术挑战(搜索索引优化、滚动性能),但有成熟的解决方案可参考
|
||
- 需要在实施过程中根据实际效果进行微调,特别是色彩和排版细节- ✓ Lighthouse性能分数 > 90
|
||
- ✓ 首屏加载时间 < 2秒(3G网络)
|