Shiro (白)
English | 简体中文
一个简洁、优雅、健壮的 Hexo 主题,灵感源自留白(余白)。基于 Nunjucks 和 Tailwind CSS 构建。
由 Acris 倾情打造 ❤️
特性
- 简洁美学:极简设计,注重排版与可读性。
- 响应式:完全响应式设计,适配移动端和桌面端。
- Tailwind CSS:现代实用优先的 CSS 框架。
- 多语言:支持英语、简体中文(
zh-CN)、繁体中文(zh-TW)、日语(ja-JP)和法语(fr)。 - 暗色模式:优雅的暗色主题,采用暖中性色调,三态切换(系统/亮色/暗色)。
- 目录:构建期生成文章侧边栏目录,可配置标题深度;客户端 JavaScript 仅负责折叠和当前章节高亮。
- 阅读进度条:页面顶部的朱红色细进度条。
- 回到顶部:平滑滚动的回到顶部按钮。
- 字体加载遮罩:在品牌标题字体就绪前,用一层主题雾面遮罩盖住页面,配以淡淡的朱红涟漪,随后轻轻淡出,让标题不会出现明显的字体切换。
- 代码块:语法高亮,带复制按钮和语言标签。
- 图片:构建期为正文图片补充加载、解码、尺寸和优先级属性,文章首图保留 eager 以照顾首屏。LightGallery 资源会提前预取,因此即便是没有悬停的触摸设备也能点击即开。
- 评论系统:支持 Disqus 和 giscus(GitHub Discussions)评论系统,接近评论区时按需加载。
- Google Analytics:GA4 支持,非阻塞脚本加载。
- RSS:Atom 订阅支持(需要 hexo-generator-feed)。
- SEO 友好:为每个页面输出 meta 描述、Open Graph(含
article:*、og:locale与og:image宽高)与 Twitter Card 标签、canonical 及分页rel=prev/rel=next链接(分页页面的<title>带页码,避免与第 1 页重复),以及 schema.org JSON-LD(文章页用BlogPosting,首页用WebSite)。 - 印章:可选的装饰性朱红印章图标显示在页头,可通过
seal_text自定义印章文字。 - 站内搜索:内置基于 Pagefind 的静态站内搜索——
hexo generate之后自动生成索引,无需任何外部服务。搜索资源会提前预取并预热,因此即便是没有悬停的触摸设备也能点击即开。 - 快速:优化性能,最小化 JavaScript,并在构建期缓存页面分析、补充正文图片加载与尺寸提示。
安装
安装主题
如果你使用 Hexo 5.0 或更高版本,最简单的安装方式是通过 npm:
1 | npm i hexo-theme-shiro |
通过 git 安装:
1 | git clone -b main --depth=1 https://github.com/Acris/hexo-theme-shiro.git themes/shiro |
如果你想启用 RSS,请安装 feed 插件:
1 | npm i hexo-generator-feed |
启用
修改 _config.yml 中的主题设置为 shiro:
1 | _config.yml |
🛠️ 更新
要将主题更新到最新版本,请使用与你的安装方式对应的方法:
npm
1 | npm i hexo-theme-shiro@latest |
Git
1 | cd themes/shiro |
注意: 升级后,请查看默认
_config.yml中是否有新增或变更的选项,并相应更新你的_config.shiro.yml。
配置
配置文件
在站点根目录创建专用的主题配置文件 _config.shiro.yml(Hexo 5.0.0 起支持)。此文件的优先级高于主题的默认配置。
根据你的安装方式,将对应默认配置复制到站点根目录的 _config.shiro.yml:
- npm 安装:
node_modules/hexo-theme-shiro/_config.yml - git 安装:
themes/shiro/_config.yml
1 | # 站点 |
创建页面(标签和分类)
由于 Hexo 默认不会生成”所有标签”或”所有分类”页面,如果你想在菜单中使用它们,需要手动创建。
创建页面:
1
2hexo new page tags
hexo new page categories修改
source/tags/index.md:1
2
3
4
title: 标签
layout: tag修改
source/categories/index.md:1
2
3
4
title: 分类
layout: category
搜索
Shiro 内置基于 Pagefind 的静态站内搜索。索引会在 hexo generate 完成后自动生成;发布已生成的输出前,无需再单独运行搜索索引命令。
npm 安装(强烈推荐)
为了让构建更快、更稳定、也更适合 CI,请将 Pagefind 作为 devDependency 安装到 站点根目录(不是主题目录):
1 | npm install pagefind --save-dev |
无论你通过 npm i hexo-theme-shiro 安装主题,还是以 git clone 方式将主题放在 themes/shiro/,都建议这样做。之后 hexo g 会自动从站点的 node_modules 解析 Pagefind。若没有安装 Pagefind,构建钩子会回退到 npx --yes pagefind,可能在 hexo generate 期间联网下载,明显拖慢构建,并在离线 CI 中失败。当 search.enabled: true 时,索引失败会让 Hexo 生成失败,以便发布前发现搜索不可用。这个 npx fallback 只适合作为临时兜底,不应作为日常发布方案。
配置(_config.yml / _config.shiro.yml)
1 | search: |
将 search.enabled 设为 false 即可关闭:构建钩子被跳过,搜索按钮也不会渲染。
本地预览
该钩子注册在 Hexo 的 before_exit 事件上,并对 generate(g)与 deploy(d)命令生效。发布时,请先运行 hexo generate,确保 public/pagefind/ 已写入后再上传。hexo server 走内存渲染,不会触发该钩子,因此本地预览时不会重建搜索索引。要本地预览搜索,请走真实构建并用静态服务器:
1 | hexo clean && hexo g |
开发
如果你想修改主题源代码或参与贡献:
项目结构
1 | hexo-theme-shiro/ |
快速开始
在主题目录安装依赖:
1
2cd themes/shiro
npm install开发时监听 CSS 变更:
1
npm run dev
构建生产环境 CSS 和 JavaScript:
1
npm run build
注意:修改 _tailwind.css、source/css/_src/ 下的可选功能 CSS、source/js/_src/ 下的文件或 tools/snippets/ 下的构建期片段后,必须运行 npm run build 重新生成 style.min.css、功能 *.min.css 和 *.min.js 资源。
添加新语言
- 在
languages/目录创建新的 YAML 文件(例如ko.yml)。 - 复制
languages/en.yml的结构并翻译所有值。 - 按同级字母顺序排列所有键,并确保所有顶级命名空间(
clipboard,common,gallery,index,nav,page,search,theme,toc)都存在。
致谢
感谢 JetBrains 提供开源许可证。