你好,Flux

这是 Flux 的第一篇文章。它的作用是:一边验证主题的各项能力(目录、代码块、卡片、深浅色),一边把话说清楚——哪些东西从原版搬过来了,哪些没有。

为什么迁移

hexo-theme-fluid 是 Hexo 生态里最受欢迎的 Material Design 主题之一。它的观感很难被简单复制:

  • 首页全屏 banner,站名大字压在图上,底部一个向下的小箭头
  • 内容装在一张浮在背景之上的大白卡片里,阴影很深,圆角很小
  • 卡片流左图右文,摘要固定三行,meta 用小号灰字
  • 文章页正文居中收窄,右侧是跟随滚动的目录

这些细节合起来,就是 Fluid 的辨识度来源。迁移时我按观感优先处理:先还原这些,再谈技术。

换掉了什么技术

原版跑在 Hexo 上,靠 EJS 模板 + Stylus + 一堆前端插件。Astro 这边全部换掉:

原版 这里 收益
EJS 模板 Astro 组件 类型检查、按需水合
Stylus 手写 CSS + CSS 变量 构建零依赖,改色只改变量
Bootstrap 栅格(CDN) 自己写 flex/grid 少一个外部请求、少 200KB
iconfont(CDN) 内联 SVG 零请求,随 currentColor
jQuery + tocbot 原生滚动监听 依赖归零
highlight.js 构建期 Shiki 双主题、无运行时高亮
fancybox 自己写的灯箱 只要「点开放大」,不必引一个库
hexo-generator-searchdb /searchindex.json 索引也是一次静态构建

代码高亮、目录高亮、站内搜索这几项,原版都依赖运行时脚本去「事后加工」DOM。Astro 的思路相反:能构建期算完的就不留给浏览器。

保留了哪些

首页卡片流、文章页版式、归档时间线、分类与标签、友链、关于、站内搜索、目录跟随、代码块工具栏、返回顶部、移动端菜单。

去掉了哪些

评论(十几种第三方服务)、浏览量统计、文章加密、数学公式与流程图、打字机副标题、九套语言包。它们要么是外部服务依赖,要么需要额外的运行时库——与「静态、零依赖」的目标冲突。图片缩放留下来了,只是把 fancybox 换成了自己写的灯箱。

关于取舍的原则

一句话:读者打开一篇文章时,从点击到读完的这条路径要完整;这条路径之外的东西可以砍。