前言
在这个信息爆炸的时代,拥有一个属于自己的博客就像在互联网的海洋中拥有一座小岛。经过深思熟虑,我选择了基于 Astro Nano 进行深度定制,打造了这个融合现代技术与个人风格的博客网站。
技术选型:为什么选择 Astro?
性能优先的架构
Astro 的”岛屿架构”(Island Architecture) 让我深深着迷。它允许我在需要交互的地方使用 React 组件,而在静态内容区域保持纯 HTML,这种设计理念完美契合了博客的使用场景:
- 静态优先:大部分内容是静态的,不需要 JavaScript
- 按需交互:只在 TOC 导航、主题切换等功能中引入 React
- 极致性能:实现了不错的 Lighthouse 分数评测
现代化的开发体验
// 类型安全的内容集合定义
export const collections = {
blog: defineCollection({
type: "content",
schema: z.object({
title: z.string(),
description: z.string(),
date: z.string(),
draft: z.boolean().optional(),
}),
}),
};
Astro 的内容集合系统提供了类型安全的内容管理,让我在写作时就能享受到 TypeScript 的智能提示。
核心功能实现
智能导航系统
我设计了一套上下文感知的导航系统:
- 首页行为:点击导航链接时平滑滚动到对应区域
- 跨页导航:在其他页面时直接跳转到相应列表页
- 事件委托:高效的点击事件处理机制
// 智能导航核心逻辑
if (window.location.pathname === "/") {
// 首页:平滑滚动
targetElement?.scrollIntoView({ behavior: "smooth" });
} else {
// 其他页面:跨页导航
window.location.href = `/${section}`;
}
React TOC 系统
这是最有意思的功能之一。通过 Zustand 状态管理 + Intersection Observer API,实现了实时的文章阅读进度追踪:
核心组件架构
- TOCInitializer:扫描文档结构,初始化状态
- MarkdownOutlineView:主容器,固定定位在右侧
- MarkdownOutlineItem:单个目录项,支持缩进层级
- ActiveSectionHighlight:2px 樱花粉动画滑块
// Zustand 状态管理
interface TocState {
activeSectionId: string | null;
headings: HeadingData[];
setActiveSection: (id: string | null) => void;
setHeadings: (headings: HeadingData[]) => void;
}
设计理念
视觉设计
- Logo:自定义的 icon 设计,支持主题自适应
- 固定导航栏:半透明毛玻璃效果,提升视觉层次
- Catppuccin 主题:Latte(浅色)/ Macchiato(深色)配色方案
- 字体优化:LXGW WenKai(中文)+ Bookerly(英文)+ Hack Nerd Font(代码)
交互体验
- 80px 标准间距:全站统一的标题偏移量
- 响应式设计:桌面优先,移动端优雅降级
- 渐进增强:基础功能优先,高级特性按需加载
技术亮点
性能优化
- 字体加载策略:
@font-face {
font-family: "LXGW WenKai";
src: url("/fonts/LXGWWenKai-Light.woff2") format("woff2");
font-display: swap; /* 性能优先 */
}
- 代码分割:React 组件仅在需要时加载
- 静态生成:完整的 SSG 构建
- 图片优化:Astro 自动图片处理
开发体验
- TypeScript 严格模式:完整的类型安全覆盖
- ESLint + Prettier:代码风格统一
- 热重载:开发时实时预览
- 构建优化:自动类型检查 + 打包
内容管理
三大内容集合
- 博客文章:支持 Markdown 和 MDX,自动 TOC 生成
- 工作经历:时间线展示,职业发展历程
- 项目展示:技术作品集,支持 Demo 和源码链接
写作体验
得益于 Astro 的内容集合系统,我可以专注于写作本身:
---
title: "文章标题"
description: "文章描述"
date: "June 23 2025"
draft: false
---
## 正文开始
支持完整的 Markdown 语法...
部署与运维
构建流程
# 依赖安装
npm install
# 开发环境
npm run dev
# 类型检查 + 构建
npm run build
# 本地预览
npm run preview
性能监控
- Lighthouse CI:持续性能监控
- Core Web Vitals:用户体验指标追踪
- Bundle Analyzer:打包体积优化
总结
这个博客不仅仅是一个展示平台,更是我对现代前端技术的实践和探索。通过深度定制 Astro Nano,我创造了一个既具备优秀性能又富有个人特色的博客系统。
每一行代码都经过深思熟虑,每一个组件都追求极致的用户体验。这不仅是技术的展示,更是对美好事物的追求和对细节的执着。
希望这个博客能成为我记录成长、分享思考的理想空间,也希望能为访问者带来愉悦的阅读体验。
技术栈:Astro 5.0.5 · React · TypeScript · Tailwind CSS · Zustand · View Transition API
源码地址:期待开源,敬请关注