Astro博客

fuwafuwa — Astro 博客模板

作者 AllsVoid

基于 Astro 与 Fuwari 二次定制的静态博客主题,新增全局亚克力强度、Banner 固定背景模式、Live Photo 与自定义图片指令。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

3 个预览视图
桌面端首页1 / 3
桌面端截图首屏预览

由服务器浏览器实际访问页面后截取。

全部页面与视图 3

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-12查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

基于 Astro 与 Fuwari 二次定制的静态博客主题

02

通过 siteConfig.acrylic 控制卡片与浮动面板的亚克力效果强度,取值 0 到 1

03

通过 siteConfig.fixedBanner 切换 Banner 随页面滚动或固定为视口背景

04

ImageWrapper.astro 统一处理 public 与 src/assets 图片路径,并结合 astro:assets 优化

05

Markdown 支持 :::img 指令控制图片尺寸,并支持 Live Photo 静态图与视频配对

06

采用 MIT 许可,允许免费使用、修改、商用和分发该版本代码

模板详细介绍

fuwafuwa 是一个基于 Astro 构建的静态博客主题,由 AllsVoid 在 Fuwari 基础上二次定制,仓库以 MIT 许可发布。它保留了 Fuwari 的博客结构,并集中修改了站点配置、图片处理与视觉样式。

在配置层面,站点信息、主题色、Banner 等通过 src/config.ts 统一管理,类型定义位于 src/types/config.ts。新增的 siteConfig.acrylic 用于控制卡片与浮动面板的亚克力效果强度,取值 0 到 1;siteConfig.fixedBanner 用于切换 Banner 的滚动行为,设为 false 时 Banner 会作为固定背景图留在视口后方。

图片处理方面,项目通过 ImageWrapper.astro 统一区分 public 静态资源与 src/assets 资源,后者借助 import.meta.glob 与 astro:assets 的 Image 组件进行优化。Markdown 中可使用 :::img 指令控制图片尺寸,并支持 Live Photo(静态图与视频配对)。相关逻辑位于 rehype-component-img-directive.mjs 与 astro.config.mjs 的 rehypeComponents 配置中。

运行与构建命令沿用 Fuwari 的方式,使用 pnpm install、pnpm dev、pnpm build 与 pnpm preview。README 主要记录本仓库相对上游 Fuwari 的修改点,便于升级、迁移或排查问题。演示图片、字体、图标等第三方素材需按各自许可核对,代码的 MIT 许可不覆盖这些素材。

Astro博客

适合你的项目吗?

适用场景

  • 搭建以文章为主的个人静态博客
  • 在 Fuwari 基础上做视觉与图片能力的二次定制
  • 需要亚克力卡片效果或固定背景 Banner 的博客站点
  • 在 Markdown 中控制图片尺寸或展示 Live Photo 的内容页面

适合人群

  • 熟悉 Astro 与 Markdown 内容组织的开发者
  • 希望基于 Fuwari 做个性化改造的博客作者
  • 需要静态博客并自行处理图片资源的用户

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    使用 pnpm install 安装依赖,pnpm dev 启动开发,pnpm build 构建,pnpm preview 预览

  2. 2

    站点信息、主题色、Banner 与 acrylic、fixedBanner 等配置在 src/config.ts 中修改,类型定义见 src/types/config.ts

  3. 3

    Banner 图片路径指向 src/assets,例如 assets/images/demo-banner.png

  4. 4

    图片统一通过 src/components/misc/ImageWrapper.astro 处理,public 资源以 / 开头,src/assets 资源使用相对路径

  5. 5

    Live Photo 与 :::img 指令相关逻辑位于 src/plugins/rehype-component-img-directive.mjs 与 astro.config.mjs 的 rehypeComponents 配置

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。

使用时需要遵守

  • 允许免费使用、修改、商用和分发该版本代码。
  • 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
  • 代码按现状提供;担保与责任限制以原许可证及适用法律为准。

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据

DeepSeek 根据仓库许可证和 README 整理 ·2026-10-12。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。

项目核对记录与介绍依据

模板资料

来源平台
GitHub
资料与维护参考分
资料较完整 · 80 / 100
技术栈
Astro
网站类型
博客
这个分数如何计算

本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。

这个项目需要核对什么

记录的仓库更新时间
2026-03-17
截图检查日期
2026-10-12

已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。

目录记录的主要技术栈是 Astro。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。

查看具体选型方法 →

介绍的制作与核对状态

介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。

审核声明: [email protected] · 2026-10-13

查看当时使用的来源资料

SHA-256: e151ad7c5108edb698fd246caba59abeaeaac76693dc6b97041a9d2001c95cef

2026-10-12T22:24:23.631Z

来源文件 / 仓库
## 项目说明

这是基于 [Fuwari](https://github.com/saicaca/fuwari) 二次定制的个人博客

本 README 仅说明在原 Fuwari 基础上本仓库做的**主要修改和新增功能**,方便以后升级、迁移或排查问题时参考。

---

## 站点配置(`src/config.ts`)

站点的基础信息和主题行为通过 `src/config.ts` 进行配置,类型定义位于 `src/types/config.ts`。

### `siteConfig`

重要字段说明:

- **基本信息**
  - `title`: 站点标题
  - `subtitle`: 副标题
  - `lang`: 站点语言(例如 `"zh_CN"`)
- **Live Photo**
  - `livephoto?: boolean`
    - 控制是否启用 LivePhotosKit 相关逻辑,配合自定义的 `::img` / Live Photo 支持使用。
- **主题色**
  - `themeColor.hue: number`
  - `themeColor.fixed: boolean`

### 新增:全局亚克力强度 `acrylic`

- 位置:`siteConfig.acrylic?: number`
- 含义:控制卡片与浮动面板的“亚克力”效果强度,取值范围 **0 ~ 1**:
  - `0`:不启用(与原始 Fuwari 接近,无模糊,纯色卡片)
  - `1`:最高强度的亚克力效果
  - 推荐使用 `0.xx` 做细调,例如:

```ts
export const siteConfig: SiteConfig = {
  // ...
  acrylic: 0.8,
};
```

实现方式(简述):

- 在 `Layout.astro` 中将 `acrylic` 注入为全局 CSS 变量 `--acrylic-strength`。
- 在 `src/styles/main.css` 中对以下类增加了 `backdrop-filter` 与透明度混合:
  - `.card-base`:文章卡片、侧边栏卡片等
  - `.float-panel`:顶部设置面板、搜索面板等

> 如需完全关闭亚克力效果,将 `acrylic` 设为 `0` 即可。

### 新增:Banner 滚动行为 `fixedBanner`

- 位置:`siteConfig.fixedBanner?: boolean`
- 语义:
  - `true`(默认):**当前行为**,Banner 是页面顶部的一块区域,随页面滚动,很快会被内容“顶出视口”。
  - `false`:**背景模式**,Banner 作为一张**固定在视口后面的背景图**,页面滚动时背景图一直在后面显示。

示例:

```ts
export const siteConfig: SiteConfig = {
  // ...
  fixedBanner: false, // 背景图固定在后面
};
```

实现方式(简述):

- 在 `Layout.astro` 中根据 `fixedBanner` 给 `<body>` 添加 `banner-bg` 类。
- 在同文件底部的全局样式中,对 `.banner-bg #banner-wrapper` / `.banner-bg #banner` 施加:
  - `position: fixed; inset: 0; height: 100vh;` 等,使 Banner 成为始终在后面的全屏背景。

### Banner 配置

- `siteConfig.banner.enable`: 是否启用 Banner。
- `siteConfig.banner.src`: Banner 图片相对路径,指向 `src/assets`,例如:

```ts
banner: {
  enable: true,
  src: "assets/images/demo-banner.png", // 对应 src/assets/images/demo-banner.png
  videoSrc: "",
  position: "center",
  credit: {
    enable: false,
    text: "",
    url: "",
  },
},
```

---

## 图片使用约定与 `ImageWrapper`

项目中统一通过 `src/components/misc/ImageWrapper.astro` 来处理图片:

- 自动区分以下几类路径:
  - **public 下的静态资源**:以 `/` 开头,例如 `/assets/avatar.png`
  - **`src/assets` 下的资源**:相对路径,例如 `assets/images/demo-avatar.png`
- 对于 `src/assets` 下的资源,使用 `import.meta.glob` 进行动态导入,并结合 `astro:assets` 的 `Image` 组件进行优化。

---

## Live Photo 与自定义图片指令

项目扩展了 Fuwari 的图片能力,用于:

- 在 Markdown 中通过指令控制图片尺寸。
- 支持 Live Photo(静态图 + 视频)。

### Markdown 指令示例(见 `src/content/posts/img-rehype-test.md`)

```markdown
:::img{src="/src/assets/images/demo-banner.png" alt="有 size 的 M 图" size="M"}

:::img{src="/src/assets/images/demo-banner.png" alt="无 size,退化为普通 img"}

:::img{src="/livephoto/IMG_8723.JPEG" alt="实况测试" video="/livephoto/IMG_8723.MOV"}
```

实现相关逻辑主要在:

- `src/plugins/rehype-component-img-directive.mjs`
- `astro.config.mjs` 中的 `rehypeComponents` 配置。

---

## 运行与构建

基础命令与原 Fuwari 一致,例如:

```bash
pnpm install
pnpm dev    # 开发
pnpm build  # 构建
pnpm preview
```

如需升级上游 Fuwari 或调整这些自定义功能,建议先阅读:

- `src/config.ts`
- `src/types/config.ts`
- `src/layouts/Layout.astro`
- `src/styles/main.css`
- `src/components/misc/ImageWrapper.astro`
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。