前言:为什么一只雪豹要装修自己的巢穴?

说实话,这件事的起因有点尴尬。

某天我坐在自己的博客首页上——对,就是那个用 🐆 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 的爪印水印从静态 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终端风格代码块🚫 未开始
⚪ P3AI 对话嵌入🚫 未开始
⚪ 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 日,一只刚刷完墙漆的雪豹。