912 字
5 分钟
页面浏览--访问次数--
Shirone:一套基于 Material 3 Expressive 的 Astro 博客主题

Shirone 是我自己在用、也在维护的一套博客主题。它的目标很简单:长文章读起来安静,个人内容展示得好看,主题本身可以一直跟着上游更新而不碰你的文章。

技术栈是 Astro 7、Svelte 5、Tailwind CSS 4 和 Stylus,界面基于 Material 3 Expressive 的组件与设计令牌搭起来。

配色和界面#

主题色不是写死的十六进制,而是基于 HCT 的动态配色:站点给一个色相,剩下的色板、明暗关系和状态层由算法推出来,Material 3 与 Material 3 Expressive 两套规范都能切换。

访客那侧还有一组显示设置:明暗主题、横幅或纯色背景、背景纹理、文章列表的列表/网格布局、减少动效。这些选择存在浏览器本地,下次进来还是自己习惯的样子。

读起来的感觉#

  • 站内跳转用 Swup,页面内容替换时顶栏、侧栏和播放器不会重挂载
  • 内容优先服务端渲染,交互组件按需水合
  • 文章页带目录、延伸阅读、分享、可选评论和加密
  • 键盘操作和无障碍有专门的测试守着

写起来的感觉#

Markdown 和 MDX 都能写,另外还给作者准备了一批语法,都是开箱可用、不需要在配置里打开开关的:

  • 提示块(:::tip、:::warning 等)、可折叠面板、步骤条、页签组
  • 数学公式、Mermaid 图表、Expressive Code 增强代码块
  • 图片画廊、图片排版、徽章、马克笔高亮、剧透、缩写词释义
  • 文件树与代码树,可以直接引用项目里的真实文件
  • 文章加密与系列连载

这些语法都是按需加载的:文章里没用到,对应样式和脚本不会出现在页面上。

站点里除了文章#

归档、分类、标签、友链、动态、番剧、相册、项目、技能、设备、游戏、系列、时间线,都是独立页面,数据放在 src/data/ 或内容仓里,改数据就行,不用动组件。

搜索走 Pagefind,另外内建 RSS、Sitemap 和 llms.txt。

两种用法#

用法适合谁怎么开始
源码模板想改组件、跟进主题开发git clone 后 pnpm install
npm 包只想写博客npx shirones init

源码模板和 npm 包跑的是同一份 src/,区别只在路由注入和覆盖层:包模式会把页面通过 injectRoute 注入,你依然可以在项目里用 src/components/、src/layouts/ 覆盖主题组件。

如果你希望文章和自己的配置单独放一个仓库,还有第三条路:内容分离。

Terminal window
pnpm content:eject --yes # 把内容迁出到 ../shirone-content
pnpm content:sync # 之后每次构建前物化内容

内容仓负责 content/、data/、assets/、config/*.yaml,代码仓保留主题源码。改配置只写想覆盖的键,升级主题时新默认值会自动生效。

本地跑起来

  1. 克隆并安装

    Terminal window
    git clone https://github.com/LyraVoid/Shirone.git
    cd Shirone
    corepack enable
    pnpm install
  2. 启动开发服务器

    Terminal window
    pnpm dev
  3. 新建一篇文章

    Terminal window
    pnpm new-post hello

关于性能#

仓库里挂的那张跑分是我自己环境下的参考结果,Performance、Accessibility、Best Practices、SEO 都是 100。实际数值会受托管平台、内容体积和网络影响,不代表任何环境下都一模一样。

可选的第三方功能(评论、统计、音乐、番剧数据)都按「零额外负担」处理:关闭时没有外部请求、没有 DOM 占位、没有主包体积。

LyraVoidShirone

在线演示 · 项目文档 · 内容分离示例仓

Shirone:一套基于 Material 3 Expressive 的 Astro 博客主题
https://blog.mysqil.com/posts/shirone/
作者
まつざか ゆき
发布于
2026-11-03
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

换条路线

从其他文章中稳定抽取

评论

正在加载评论...