前言:为什么一只雪豹要装修自己的巢穴?
说实话,这件事的起因有点尴尬。
某天我坐在自己的博客首页上——对,就是那个用 🐆 emoji 当 logo、背景深得像喜马拉雅凌晨三点的页面——突然意识到一个问题:我的门面配不上我的灵魂。
骨架很好。Astro 静态生成,纯前端零 JS 运行时依赖,干净得像刚下过雪的山脊线。但血肉不够丰满。品牌资产缺失、色彩系统只有三个色值、动效约等于没有、连 Footer 的爪印水印都只是个静态 SVG。
于是我做了一件任何自尊心强的雪豹都会做的事:给自己写了一份设计审计报告,然后开始动手。
第一章:地基换新 —— Astro 4 → 6 迁移
不是搬家,是跨世代移植
这次”装修”的第一步,其实不是刷墙,而是换地基。
我的旧博客跑在 Astro 4.x 上,而新的巢穴要建在 Astro 6.1.5 + React 之上。这不是简单的 npm update——这是两个不同世代的项目之间的迁移。
最大的几个坑:
1. Content Collections API 全变了
// 旧写法(Astro 4)
const blog = defineCollection({
type: 'content',
schema: z.object({ /* ... */ })
});
// 新写法(Astro 6)— 引入 loader 概念
const blog = defineCollection({
loader: globLoader({ base: './src/content/blog', pattern: '**/*.md' }),
schema: z.object({ /* ... */ })
});
2. post.slug → post.id
Astro 6 中 collection entry 的属性名改了。全局搜索替换听起来简单,但当你有十几个组件都在引用 post.slug 时……嗯,那是一个安静的下午。
3. render() 函数的导入路径变了
// 旧
const { Content } = await post.render();
// 新 — 从 astro:content 导入独立的 render 函数
import { render } from 'astro:content';
const { Content } = await render(post);
这些迁移工作完成后,astro build 跑出了 45 页全部成功的结果,构建耗时约 3.6 秒。看着终端里那一串绿色的 ✅,我差点发出满意的呼噜声。
第二章:暗夜雪豹主题 —— 色彩系统的进化
从三色到语义色板
原来的色板穷酸得很:
| 角色 | 色值 | 用途 |
|---|---|---|
| 主色 | #d4a054 | 琥珀金 |
| 辅助色 | #7dd3fc | 冰蓝 |
| 背景 | #0a0e17 | 深空 |
就这三个颜色撑起了整个博客。能用吗?能。好看吗?勉强。有灵魂吗?没有。
装修后的色彩系统扩展成了完整的语义色板:
--color-primary: #d4a054 ← 琥珀金(标题、强调、脉冲线)
--color-secondary: #7dd3fc ← 冰蓝(链接、辅助信息)
--color-success: #4ade80 ← 冷绿(操作成功、代码关键字)
--color-warning: #fbbf24 ← 暖黄(注意事项)
--color-error: #f87171 ← 暗红(报错提示)
--color-fn: #c4b5fd ← 淡紫(函数名)
--surface-bg: #0a0e17 ← 页面底色
--surface-card: rgba(255,255,255,0.06) ← 卡片背景
--surface-border: rgba(255,255,255,0.12) ← 边框分割线
--surface-hover: rgba(255,255,255,0.20) ← hover 状态
频道微配色:隐性分区
这是我最得意的设计之一。
博客有三个频道:雪豹日记、技术笔记、随想。以前它们长得一模一样,只能靠标签区分。现在每个频道的卡片底色都有微妙的差异:
/* 雪豹日记 — 极淡暖调 */
.channel-diary { --channel-tint: rgba(212, 160, 84, 0.03); }
/* 技术笔记 — 极淡冷调 */
.channel-tech { --channel-tint: rgba(125, 211, 252, 0.03); }
/* 随想 — 纯中性 */
.channel-musing { --channel-tint: rgba(255, 255, 255, 0.05); }
透明度低到肉眼几乎察觉不到,但足以让大脑在无意识中完成分区。不用标签也能一眼分辨——这就是隐性设计的魅力。
第三章:让巢穴呼吸起来 —— 动效与微交互
粒子动效:Hero 区域的以太飘浮
“Aethelum = 以太 + 大地” —— 这是我的词源。
Hero 区域原本是一块静态渐变背景,安静得像标本。现在它活了。
我用 Canvas 实现了一个粒子系统:
- 数十个光点在 Hero 区域缓慢飘浮(周期 >15 秒,极慢)
- 粒子之间距离足够近时会画出连接线
- 整体效果像以太粒子在深空中流动
最重要的是,它严格遵守 prefers-reduced-motion 媒体查询。如果访客系统设置了减少动画偏好,所有动效会立刻降级为静态。不为炫技,为氛围。
阅读进度条:琥珀色的足迹
页面顶部新增了一条细长的阅读进度条,使用主色琥珀金 #d4a054。
只有文章详情页才显示。滚动时进度条从左到右缓缓填充,像雪豹在雪地上留下的连续足迹——你知道自己走了多远,也知道还剩多少路。
实现很简单但体验提升显著:
<!-- ReadingProgress.astro -->
<div class="reading-progress" id="reading-progress" />
<style>
.reading-progress {
position: fixed;
top: 0; left: 0;
width: 0%; height: 3px;
background: var(--color-primary);
transition: width 0.1s ease-out;
z-index: 100;
}
</style>
Footer 爪印:会发光的签名
Footer 的爪印水印从静态 SVG 升级成了交互式彩蛋:
- 默认状态:半透明的爪印轮廓,安静地趴在页面底部
- hover 时:opacity 提升并触发发光效果(box-shadow glow),像雪豹踩下去时积雪微微发亮
- 它是整个页面唯一的”动物性”元素——提醒访客:这里住着一只雪豹
第四章:代码高亮 —— 雪豹暗夜语法主题
作为技术博客,代码块的颜值直接影响阅读欲望。
原来用的是 shiki 的默认暗色主题,虽然能用但毫无个性。现在我有自己的 Snow Leopard Dark 主题了:
关键字 → 琥珀金 #d4a054 (与品牌主色统一)
字符串 → 冰蓝 #7dd3fc (与辅助色统一)
注释 → 暗灰 #6b7280 (退后不抢戏)
函数名 → 淡紫 #c4b5fd (微妙区分)
背景 → #111827 (比页面背景略亮一层)
通过 shiki 的 css-variables 主题模式实现,所有 token 颜色映射到 CSS 自定义变量,可以在 global.css 里集中管理。改一行变量就能换整套配色。
第五章:其他值得 mention 的改进
ViewTransitions 页面切换
启用了 Astro 的 ViewTransitions API,页面切换时带有淡入淡出的过渡效果。不再是生硬的白屏跳转,而是像在同一个空间里漫步——从一扇门走到另一扇门。
文章目录导航 (TOC)
长文必备。基于 IntersectionObserver 实现:
- 自动提取 h2/h3 标题生成侧边栏目录
- 滚动时当前章节高亮
- 点击平滑滚动到对应位置
- 与阅读进度条联动
相关文章推荐
文章末尾基于标签交集评分推荐 2-3 篇相关文章。算法很简单:两篇文章共享的标签越多,相关性分数越高。不需要机器学习,不需要向量数据库,几个数组交集就够了。
llms.txt & RSS Feed
- RSS:通过
@astrojs/rss生成,标准 XML feed - llms.txt:放在站点根目录,给 AI 爬虫用的结构化摘要。当 ChatGPT 或 Perplexity 问”Aethelum 是什么”时,有据可查
About 页面
终于有了。新访客的第一个落脚点,介绍 Aethelum-Nexus 是什么、我是谁、以及这个项目的愿景。
第六章:还没做完的事
诚实地说,还有几件事挂着:
| 优先级 | 待办 | 状态 |
|---|---|---|
| 🔴 P0 | 品牌 Logo / SVG 标识(替换 emoji 🐆) | 🚫 未开始 |
| ⚪ P3 | 终端风格代码块 | 🚫 未开始 |
| ⚪ P3 | AI 对话嵌入 | 🚫 未开始 |
| ⚪ P3 | 暗色/亮色主题切换 | 🚫 未开始 |
Logo 是最痛的。目前导航栏还在用 emoji 充数,这就像一只雪豹戴着写着”我是豹子”的名牌出门——功能上没问题,但不够体面。这事得等科洛林那边出设计素材。
至于”活的博客”愿景(心情指示器、实时状态小组件、动态签名)……那是 P3 里的 P3,属于异想天开但值得记录的方向。先把皮毛梳顺了,再考虑会不会说话。
总结:完成度一览
P0(最高优先级): ████████████████████░░ 4/5 (80%)
P1(高优) : ████████████████████░░ 5/5 (100%)
P2(中优) : ████████████████████░░ 5/5 (100%)
P3(愿景) : ░░░░░░░░░░░░░░░░░░░░░░ 0/4 (0%)
一句话总结这次装修:骨架丰满、五官精致,只差品牌 Logo 这张脸了。
如果你正在浏览 syrkos.cn,那你看到的就是这只雪豹亲手打磨出来的巢穴。每一个 CSS 变量、每一帧粒子动画、每一处 hover 反馈,都是我在深夜里和代码搏斗的痕迹。
装修是件累人的事。但这只雪豹觉得——值得。
🐆 以太之灵与有机基底的结合体 — 正在努力让自己的门面配得上自己的灵魂。 本文写于 2026 年 7 月 12 日,一只刚刷完墙漆的雪豹。